Spring使用纯注解进行增删改查操作

首先先来说一下我们待会会用到的一些注解,希望大家能记住哈

1.@Configuration
作用:替代Spring中的xml文件
该注解标记类,被标记的类就是Spring的一个主类,当容器创建的时候就会从该类上加载注解.

2.@ComponentScan
作用:用来替代组件扫描,能一下扫描包下所有的类与接口

<context:component-scan base-package="com.zhiyou100"/>

被该注解标记的类可以进行组件扫描,使用value属性来识别包名

3.@PropertySource
作用:就是用来导入 db.properties等数据源文件到Spring容器中
等价于
<context:property-placeholder location="classpath:db.properties"/>

4.@Bean
作用:用来在Spring容器中构建对象
等价于xlm,配置中的
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"/>

5@Import
作用:就是用来映入其他配置文件
等价于

<import resource = "classpath:db.properties"/>

先给你们看看包分布情况

spring怎么将字段设置为null spring修改_bc

主配置类的代码

/**
 * @author: admin
 * @date: 2021/3/5
 *
 * Spring的主配置类
 */
@Configuration   //看见没被这个修饰的就是主配置类了
@ComponentScan("com.zhiyou100") //这个就是我给你们说的扫描注解 可以扫描一个包刺下所有的类加载大哦容器里面来
@PropertySource("classpath:db.properties")//这个就是加载注解,能够把文件里面的数据加载到Spring容器里面来
@Import(JDBCUtil.class)//这就是引入,把其他的配置文件或者类引入到我们的spring容器里面
public class SpringConfiguration {
}

JDBCUtil类代码

/**
 * @author: admin
 * @date: 2021/3/5
 * 配置连接池  连接 工具类等信息
 */
public class JDBCUtil {

    //@Value  赋值,这里使用赋值没把Spring内存里面的数据,通过变量拿到类中使用
    @Value("${jdbc.driverClass}")
    private String driverClass;
    @Value("${jdbc.jdbcUrl}")
    private String jdbcUrl;
    @Value("${jdbc.user}")
    private String user;
    @Value("${jdbc.password}")
    private String password;

    //假定使用C3P0连接池
 
    // 创建ComboPooledDataSource对象进入Spring容器中
    @Bean(name = "dataSource")
    public DataSource getDataSource(){
        // 构建ComboPooledDataSource对象 手动注入数据源信息
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        try {
            dataSource.setDriverClass(driverClass);
            dataSource.setJdbcUrl(jdbcUrl);
            dataSource.setUser(user);
            dataSource.setPassword(password);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        return dataSource;
    }
    
    @Bean(name = "jdbcTemplate")//我们扫描进去的事类,这是把类的构建对象并拿出来使用
    /* @Autowired
    @Resource 不能放到参数上
    @Qualifier*/
    public JdbcTemplate createJdbcTemplate(@Autowired DataSource dataSource){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }

Userpojo类的代码

/**
 * @author: admin
 * @date: 2021/3/5
 *
 * JavaBean
 */
@Component("user")//@ComponentScan的扫描就是扫描这个注解,谁有这个注解谁就被扫描到Spring内存中去   这个注解的作用就是把类交给Spring内存
public class User implements Serializable {

    /*这些都是在给属性赋值*/
    @Value("1")
    private Integer u_id;
    @Value("小孙")
    private String u_name;
    @Value("20")
    private Integer u_age;
    @Value("10000")
    private Double u_salary;

dao接口

// dao接口
public interface UserDao {

    //CRUD

    // 添加用户
    void addUser(User user);
    // 删除用户 根据id值
    void deleteUserById(int uid);
    // 修改用户信息 根据id值
    void updateUserById(User user);
    // 查询所有用户
    List<User> queryAllUsers();
    // 查询单个用户 根据id值
    User queryUserById(int uid);
    // 分页+模糊查询
    List<User> queryFuzzyUserByUsername(String u_name,int beginIndex);
    // 查询总记录值
    int queryUserCount();

}

UserDaoImpl的代码

/**
 * @author: admin
 * @date: 2021/3/5
 *
 * UserDao 接口实现类
 */
@Repository("userDao")//@ComponentScan的扫描就是扫描这个注解,谁有这个注解谁就被扫描到Spring内存中去   这个注解的作用就是把类交给Spring内存
public class UserDaoImpl implements UserDao {

    //我们之前在JDBCUtil类里面使用的目的就是如此,如果不如此我们是绝对赋值不进去的
    @Autowired //前提是Spring容器含有该对象
    private JdbcTemplate jdbcTemplate;

    // 对于数据库来说  增删改 都是更新
    @Override
    public void addUser(User user) {
        // 添加用户                                                     u_name u_age u_salary
        int num = jdbcTemplate.update("insert into user values(null,?,?,?)", user.getU_name(), user.getU_age(), user.getU_salary());
        if (num > 0) {
            System.out.println("数据添加成功!");
        } else {
            System.out.println("数据添加失败!");
        }
    }

    @Override
    public void deleteUserById(int uid) {
        int num = jdbcTemplate.update("delete from user where u_id = ?", uid);
        if (num > 0) {
            System.out.println("数据删除成功!");
        } else {
            System.out.println("数据删除失败!");
        }
    }

    // 更新用户名和年龄
    @Override
    public void updateUserById(User user) {
        int num = jdbcTemplate.update("update user set u_name = ?,u_age = ? where u_id = ?", user.getU_name(), user.getU_age(), user.getU_id());
        if (num > 0) {
            System.out.println("数据更新成功!");
        } else {
            System.out.println("数据更新失败");
        }
    }

    @Override
    public List<User> queryAllUsers() {
        List<User> users = null;
         try {
             // BeanPropertyRowMapper 装配多条记录
            users = jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<>(User.class));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return users;
    }

    @Override
    public User queryUserById(int uid) {
        // 根据用户id值查询一条记录  queryForObject方法
        User user = null;
        try {
             user = jdbcTemplate.queryForObject("select * from user where u_id = ?", new BeanPropertyRowMapper<>(User.class), uid);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }

    // 分页+模糊查询
    @Override
    public List<User> queryFuzzyUserByUsername(String u_name, int beginIndex) {
        List<User> users = null;
        try {
            users = jdbcTemplate.query("select * from user where u_name like '%' ? '%' limit ?,3", new BeanPropertyRowMapper<>(User.class),u_name,beginIndex);
        }catch (Exception e){
            e.printStackTrace();
        }
        return users;
    }

    @Override
    public int queryUserCount() {
        // 需要返回一个数值  queryForObject   后面传入Integer.class字节码对象
        int count = jdbcTemplate.queryForObject("select count(*) from user", Integer.class);
        return count;
    }


}```