1. 概念
1.1 什么是jdbcTemplate
Spring 框架对JDBC进行封装,可以对数据库实现增删改查
2. JDBCTemplate操作
2.1 配置jdbc文件及xml文件
prop.driverClass=com.mysql.jdbc.Driver
prop.url=jdbc:mysql://localhost:3306/user_db
prop.userName=root
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中实现数据添加的操作
逻辑图:
@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语句值);
- jdbcTemplate.query(sql, rowMapper
- 查询图书列表/分页查询
3. 使用jdbcTemplate对数据库批量操作
3.1 批量添加
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);