1. 概念

1.1 什么是jdbcTemplate

Spring 框架对JDBC进行封装,可以对数据库实现增删改查

2. JDBCTemplate操作

2.1 配置jdbc文件及xml文件

  1. prop.driverClass=com.mysql.jdbc.Driver
  2. prop.url=jdbc:mysql://localhost:3306/user_db
  3. prop.userName=root
  4. prop.password=123456
<!--step1:外部配置文件引入-->
    <context:property-placeholder location="jdbc.properties"></context:property-placeholder>

    <!-- step2:连接数据库-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="username" value="${prop.userName}"></property>
        <property name="driverClassName" value="${prop.driverClass}"></property>
        <property name="password" value="${prop.password}"></property>
        <property name="url" value="${prop.url}"></property>
    </bean>

    <!--step3:配置JDBCTemplate对象-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!--创建对象时,会调用无参构造(内部调用set()),所以需要把数据源信息注入进来-->
        <property name="dataSource" ref="dataSource"></property>
    </bean>

2.2 创建Servie类和Dao类,在dao类注入jdbcTemplate对象

2.2.1 step1: 在service中注入dao,在dao实现类中注入jdbcTemplate

开启类和组件的扫描,现实自动注入

@Service
public class BookService {
  //    注入Dao
  @Autowired 
  private BookDao bookDao;
}
@Repository
public class BookDaoImpl implements BookDao {

  @Autowired 
  private JdbcTemplate jdbcTemplate;  // 实现对数据库的操作
}

2.2.2 使用jdbcTemplate对数据库现实增加/修改/删除操作—-update()

step1: 针对数据库表创建实体类,eg: t_user;

public class User {
  private String userId;
  private String userName;
  private String uStatus;

  public void setUserId(String userId) {
    this.userId = userId;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public void setuStatus(String uStatus) {
    this.uStatus = uStatus;
  }
}

step2: 在dao中实现数据添加的操作
逻辑图:
4. JDBC template - 图1

@Service
public class BookService {
  //    注入Dao
  @Autowired
  private BookDao bookDao;

  public void addBook(Book book){
    bookDao.add(book);
  }
}
@Repository
public class BookDaoImpl implements BookDao {

  @Autowired private JdbcTemplate jdbcTemplate;

  @Override
  public void add(Book book) {
    String sql = "insert into t_book values(?,?,?)";
    // 返回值表明影响行数
    Object[] args = {book.getBookId(), book.getBookName(), book.getbStatus()};
    int update = jdbcTemplate.update(sql, args);
    System.out.println("update()所添加的的行数值是:" + update);
  }
}

测试:

@Test
    public void testJDBCTemplate(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = context.getBean("bookService", BookService.class);
        Book book = new Book();
        book.setBookId("1");
        book.setBookName("<<北平无战事>>");
        book.setbStatus("borrowed");
        bookService.addBook(book);

    }

2.2.3 查询

  • 查询返回某个值:
    - String sql = "select count(*) from book";
    - jdbcTemplate.queryForObject(sql, 返回值类型.class);
    
  • 查询返回对象:
    - 场景: 查询图书的详情页面
    - rowMapper<T>:  是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装. 
       - T代表把返回值封装到T类型中。
    - new BeanPropertyRowMapper<Book>(Book.class)
    - jdbcTemplate.queryForObject(sql, rowMapper, sql语句值);
    
  • 返回集合
    • 查询图书列表/分页查询
      • jdbcTemplate.query(sql, rowMapper, sql语句值);

3. 使用jdbcTemplate对数据库批量操作

操作表里面的多条记录。

3.1 批量添加

image.png

List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {3,"小兵张嘎",borrowed};
Object[] o2 = {4,"java",borrowed};
Object[] o3 = {5,"c++",borrowed};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);