一,JdbcTemplate 概念
1,什么是JdbcTemplate
(1)spring 框架对JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作
2,准备工作
(1)引入相关 jar 包(。。表示任意版本号)
<!--数据库连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="name" value="jdbc:mysql://localhost:3306/demo1?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
</bean>
(3)配置 JdbcTemplate 对象,注入 DataSource
<!--JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
(4)创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象
<!--组件扫描-->
<context:component-scan base-package="com.at"></context:component-scan>
@Service
public class BookService {
//注入 dao
@Autowired
private BookDao bookDao;
}
@Repository
public class BookDaoImpl {
//注入 JdbcTemplate
private JdbcTemplate jdbcTemplate;
}
二,添加操作
1,对应数据库创建实体类
public class Book {
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;
}
}
2,编写 service 和 dao
public interface BookDao {
public void add(Book book);
}
@Service
public class BookService {
//注入 dao
@Autowired
private BookDao bookDao;
//添加的方法
public void addBook(Book book) {
bookDao.add(book);
}
}
(1)在 dao 进行数据库添加操作
(2)调用 JdbcTemplate 对象里面 update 方法实现添加
update (String sql, Object… args)
- 有两个参数
- 第一个:sql 语句
- 第二个:可变参数,设置 sql 语句值
@Repository
public class BookDaoImpl implements BookDao{
//注入 JdbcTemplate
private JdbcTemplate jdbcTemplate;
@Override
public void add(Book book) {
//1,创建sql语句
String sql = "insert into t_book values(?,?,?)";
//2,调用方法实现
Object[] args = {book.getUserId(),book.getUsername(),book.getUstatus()};
int update = dbcTemplate.update(sql,args);
System.out.println(update);
}
}
(3)测试
public class TestBook {
@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("JdbcTemplate");
book.setUstatus("a");
bookService.addBook(book);
}
}
结果:
这里的1是来自 : int update = dbcTemplate.update(sql,args);
System.out.println(update);
的输出,表示影响的行数,加了一个数据
三,修改和删除
1,Dao添加
//修改
void updataBook(Book book);
//删除
void deleteBook(String id);
2,service添加
//修改的方法
public void updataBook(Book book) {
bookDao.updataBook(book);
}
//删除的方法
public void deleteBook(String id) {
bookDao.deleteBook(id);
}
3,Impl实现
//修改
@Override
public void updataBook(Book book) {
String sql = "update t_book set username=?,ustatus=? where user_id=?";
Object[] args = {book.getUsername(), book.getUstatus(), book.getUserId()};
int update= jdbcTemplate.update(sql, args);
System.out.println(update);
}
//删除
@Override
public void deleteBook(String id) {
String sql = "delete from t_book where user_id=?";
int update= jdbcTemplate.update(sql, id);
System.out.println(update);
}
四,查询返回某个值
1,查询表里面有多少条记录,返回一个值
2,使用 JdbcTemplate 实现查询返回某个值代码
(1)queryForObject(String sql, Class<T> requiredType);
- 有两个参数
- 第一个:sql 语句
- 第二个: 返回类型的 Class
//查询表记录数
@Override
public int selectCount() {
String sql = "select count(*) from t)book";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
return count;
}
五,查询返回对象
1,场景:查询图书的详情信息
2,JdbcTemplate 实现查询返回对象
(1)queryForObject(String sql, RowMapper<T> rowMapper, Object… args)
- 有三个参数
- 第一个:sql 语句
- 第二个:RowMapper,是一个接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
- 第三个: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;
}
关于 BeanPropertyRowMapper 的映射对象的具体注意可看一下其他博主:
六,查询返回集合
1,场景:查询图书列表分页。。。
2,调用 JdbcTemplate 方法实现查询返回集合
(1)query(String sql, RowMapper<T> rowMapper, Object… args)
- 有三个参数
- 第一个: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;
}
七,批量操作
1,批量操作:操作表里面多条记录
2,JdbcTemplate 实现批量添加操作
(1)batchUpdate(String sql, List<Object[]> batchArgs)
- 有两个参数
- 第一个:sql 语句
- 第二个:List 集合,添加多条记录数据
(浅原理:遍历 batchArgs ,得到 batchArgs 中每个数组的值,然后根据每个数组执行 sql 语句)
//批量添加
@Override
public void batchAddBook(List<Object[]> batchArgs) {
String sql = "insert into t_book values(?,?,?)";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs); //添加成功数组值为1,表示影响了一行记录
}
八,批量修改
//批量修改
@Override
public void batchUpdateBook(List<Object[]> batchArgs) {
String sql = "update t_book set username=?,ustatus=? where user_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
}
九,批量删除
//批量删除
@Override
public void batchDeleteBook(List<Object[]> batchArgs) {
String sql = "delete from t_book where user_id=?";
int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
}