一、JdbcTemplate(概念和准备)
- 什么是JdbcTemplate?
(1)Spring框架怼JDBC进行封装,使用JdbcTemplate方面实现对数据库操作。 - 准备工作:
(1)引入相关jar包
\quad
spring-jdbc-5.2.6.RELEASE.jar
\quad
spring-orm-5.2.6.RELEASE.jar
\quad
spring-tx-5.2.6.RELEASE.jar
\quad
druid-1.1.9.jar
\quad
mysql-connector-java-5.17-bin.jar (2)在spring配置文件中配置数据库连接池(尚硅谷教程,有错误)
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///user.db"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
配置德鲁伊时一直显示失败: 原因是我的mysql是8.0版本的,但驱动是mysql-connector-java-5.17-bin.jar,即5版本的,故需要下载8.0版本的驱动。重新配置即可
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/user_db?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
\quad\quad
(3)配置JdbcTemplate对象,注入DataSource
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
\quad\quad
(4)创建service类,创建dao类,在dao注入jdbcTemplate对象
<context:component-scan base-package="cn.dhu.spring5"></context:component-scan>
@Service
public class BookService {
@Autowired
private BookDao bookDao;
}
@Repository
public class BookDaoImpl implements BookDao{
@Autowired
private JdbcTemplate jdbcTemplate;
}
二、JdbcTemplate操作数据库(添加)
- 对应数据库表创建实体类
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;
}
public String getUserId() {
return userId;
}
public String getUsername() {
return username;
}
public String getUstatus() {
return ustatus;
}
}
- 编写service和dao
(1)在dao进行数据库添加操作 (2)调JdbcTemplate对象里面update方法实现添加操作 有两个参数 第一个参数:sql语句(如添加操作) 第二个参数:可变参数,设置sql语句值
@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.getUserId(),book.getUsername(),book.getstatus()};
int update = jdbcTemplate.update(sql,args);
System.out.println(update);
}
}
- 测试类
@Test
public void testJdbcTemplate(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
BookService bookService = context.getBean("bookService", BookService.class);
Book book = new Book();
book.setUserId("1");
book.setUsername("java");
book.setstatus("a");
bookService.addBook(book);
}
三、JdbcTemplate操作数据库(修改和删除)
- 修改
@Override
public void updateBook(Book book){
String sql = "update t_book set username=?,ustatus=?where user_id=?";
Object[] args = {book.getUsername(),book.getstatus(),book.getUserId()};
int update = jdbcTemplate.update(sql,args);
System.out.println(update);
}
- 删除
@Override
public void delete(String id){
String sql = "delete from t_book where user_id=?";
int update = jdbcTemplate.update(sql, id);
System.out.println(update);
}
四、JdbcTemplate操作数据库(查询)
4.1 查询返回某个值
- 查询表里面有多少条记录,返回某个值
- 使用JdbcTemplate实现查询返回某个值代码
有两个参数:jdbcTemplate.queryForObject() 第一个参数:sql语句 第二个参数:返回类型Class
@Override
public int selectCount(){
String sql = "select count(*) from t_book";
Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
return count;
}
4.2 查询返回对象
- 场景:查询图书详情
- JdbcTemplate实现查询返回对象
有三个参数:jdbcTemplate.queryForObject() 第一个参数:sql语句 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面的实现类完成数据封装。(固定写法:new BeanPropertyRowMapper(Book.class)) 第三个参数:sql语句值
@Override
public Book findBookInfo(String id){
String sql = "select * from t_book where user_id=?";
Book book = jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
return book;
}
4.3 查询返回集合
- 场景:查询图书列表分页…
- 调用JdbcTemplate方法实现查询返回集合
有三个参数:jdbcTemplate.query() 第一个参数:sql语句 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面的实现类完成数据封装。 第三个参数:sql语句值(可以省略不写)
@Override
public List<Book> findAllBook(){
String sql = "select * from t_book";
List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
return bookList;
}
五、JdbcTemplate操作数据库(批量操作)
- 批量操作:操作表内多条记录
5.1 使用JdbcTemplate完成批量添加
有两个参数: 第一个参数:sql语句 第二个参数:List集合,表示添加多条记录数据的值
@Override
public void batchAddBook(List<Object[]> batchArgs){
String sql = "insert into t_book values(?,?,?)";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
测试文件:
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"3","java1","as"};
Object[] o2 = {"4","c","b"};
Object[] o3 = {"5","mysql","d"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchAdd(batchArgs);
5.2 使用JdbcTemplate完成批量修改
@Override
public void batchUpdateBook(List<Object[]> batchArgs){
String sql = "update t_book set username=?,ustatus=?where user_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
测试文件:
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"java10909","as","3"};
Object[] o2 = {"c1010","b","4",};
Object[] o3 = {"mysql1111","d","5"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchUpdate(batchArgs);
5.3 使用JdbcTemplate完成批量删除
public void batchDeleteBook(List<Object[]> batchArgs){
String sql = "delete from t_book where user_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
测试文件:
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"3"};
Object[] o2 = {"4",};
batchArgs.add(o1);
batchArgs.add(o2);
bookService.batchDelete(batchArgs);
参考:本篇内容主要为尚硅谷Spring5听课笔记
|