Spring框架使用JDBCTemplate连接数据库

JDBCTemplate

JDBCTemplate(概念和准备)

  1. 什么是JdbcTemplate

    1. Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库的操作
  2. 准备工作

    1. 引入相关的jar包
      image-20211204205930339

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NOyWzANa-1638844933137)(C:\Users\Master\AppData\Roaming\Typora\typora-user-images\image-20211204205952748.png)]

    2. 数据库连接池
          
          <bean id="dateSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
              <property name="driverClassName" value="com.mysql.jdbc.Driver">property>
              
              <property name="url" value="jdbc:mysql://localhost:3306/dxz?characterEncoding=utf8">property>
              <property name="username" value="root">property>
              <property name="password" value="root">property>
          bean>
      
    3. 配置JdbcTemplate对象,注入DataSource
          
          <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
              
              <property name="dataSource" ref="dateSource">property>
          bean>
      
    4. 创建一个service类,创建dao类,在dao注入jdbcTemplate对象

      配置文件:

          
          <context:component-scan base-package="com.dxz.demo.book">context:component-scan>
      

      source:

      @Service
      public class BookSource {
          @Autowired
          private BookImp bookImp;
      }
      
      

      BookImp:

      @Component
      public class BookImp implements Book{
          @Autowired
          private JdbcTemplate jdbcTemplate;
      }
      
  3. JdbcTemplate操作数据库(添加)

    1. 对应数据库创建实体类
    2. 编写service和dao
      1. 在Book中进行数据库添加操作

      2. 调用JdbcTemplate对象里面updata方法实现添加操作

        这个方法有两个参数:

        第一个参数sql语句,第二个参数可变参数,设置sql语句值

        @Component
        public class BookImp implements Book{
            @Autowired
            private JdbcTemplate jdbcTemplate;
        
            public void add(User user){
                String sql1 = "insert into spring values(?,?,?);";
                Object[] args = {user.getUserId(),user.getUserName(),user.getUserStatus()};
                int result = jdbcTemplate.update(sql1,args);
                System.out.println(result);
            }
        }
        
      3. 在BookSource中完成添加数据的操作
        @Service
        public class BookSource {
            @Autowired
            private BookImp bookImp;
        
            public void bookAdd(User user){
                bookImp.add(user);
            }
        }
        
  4. JdbcTemplate操作数据库(修改和删除)

    1. 在Book接口中添加删除和修改两个方法
      public interface Book {
          //添加方法
          public void add(User user);
          //修改方法
          public void update(User user);
          //删除方法
          public void delete(String id);
      }
      
    2. 在BookImp实现类之中重写删除和修改两个方法
          //修改方法
          public void update(User user){
              String sql2 = "update spring set name=?,status=? where id=?;";
              Object[] args = {user.getUserName(),user.getUserStatus(),user.getUserId()};
              int result = jdbcTemplate.update(sql2,args);
              System.out.println(result);
          }
          //删除方法
          public void delete(String id) {
              String sql3 = "delete from spring where id=?";
              int result = jdbcTemplate.update(sql3,id);
              System.out.println(result);
          }
      
    3. 在BookSource类中添加删除和修改
          //数据库的修改操作
          public void bookUpdate(User user){
              bookImp.update(user);
          }
          //数据库的删除操作
          public void bookDelete(String id){
              bookImp.delete(id);
          }
      
  5. JdbcTemplate操作数据库(查询)

    1. 查询返回某个值
      //查询返回所有数据的个数
          @Override
          public int selectCountBook() {
              String sql4 = "select count(*) from spring";
              int result = jdbcTemplate.queryForObject(sql4,Integer.class);
              System.out.println(result);
              return result;
          }
      
    2. 查询返回对象
      1. 场景:查询图书详情

      2. JdbcTemplate实现查询返回

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-riAguf5p-1638844933138)(C:\Users\Master\AppData\Roaming\Typora\typora-user-images\image-20211205110020838.png)]

        总共有三个参数

        (1)sql语句。

        (2)RowMapper是接口,针对返回不同类型的数据,使用接口里面实现类完成数据封装

        (3)sql语句值

        *注意数据库中的字段名和java中的字段名一定要一样

            @Override
            public User selectObjectBook(String id) {
                String sql5 = "select * from spring where id=?";
                User user = jdbcTemplate.queryForObject(sql5, new BeanPropertyRowMapper<User>(User.class),id);
                return user;
            }
        
    3. 查询返回集合
      1. 场景:查询图书列表分页

      2. 调用JdbcTemplate方法实现查询返回集合

        调用的方法是query,返回值为list集合

        总共有三个参数

        (1)sql语句。

        (2)RowMapper是接口,针对返回不同类型的数据,使用接口里面实现类完成数据封装

        (3)sql语句值

  6. JdbcTemplate操作数据库(批量操作)

    1. 批量操作就是操作表里面的多条记录

    2. JdbcTemplate实现批量添加操作

      batchUpdate(String sql,List<Object[]> batchArgs)
      

      有两个参数

      第一个参数:sql语句

      第二个参数:List集合,添加多条记录

          @Override
          public void adds() {
              String sql7 = "insert into spring values(?,?,?);";
              List<Object[]> listBatch = new ArrayList<>();
              Object[] o1 = {"3","java","a"};
              Object[] o2 = {"4","c++","b"};
              Object[] o3 = {"5","mysql","c"};
              listBatch.add(o1);
              listBatch.add(o2);
              listBatch.add(o3);
              int[] result = jdbcTemplate.batchUpdate(sql7,listBatch);
              System.out.println(Arrays.toString(result));
          }
      

istBatch.add(o1);
listBatch.add(o2);
listBatch.add(o3);
int[] result = jdbcTemplate.batchUpdate(sql7,listBatch);
System.out.println(Arrays.toString(result));
}
```

你可能感兴趣的:(学习笔记,spring,数据库,java)