四.JdbcTemplate
1.基本概念
- 什么是JdbcTemplate?
- Spring框架对]DBC进行封装,使用JdbcTemplate方便实现对数据库操作
- 准备工作
- 引入相关jar包
网络异常,图片无法展示|
- 在spring配置文件配置数据库连接池
<!-- 数据库连接池-->
<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close">
<propertyname="url"value="jdbc:mysql:///db02?serverTimezone=UTC"/>
<propertyname="username"value="root"/>
<propertyname="password"value="123456"/>
<propertyname="driverClassName"value="com.mysql.cj.jdbc.Driver"/>
</bean>
- 配置JdbcTemplate对象,注入DataSource
<!--JdbcTemplate对象-->
<beanid="jdbcTemplate"class="org.springframework.jdbc.core.JdbcTemplate">
<!--注入dataSource-->
<propertyname="dataSource"ref="dataSource"/>
</bean>
- 创建service类,创建dao类,在dao注入jdbcTemplate对象
- 配置文件
<!--组件扫描-->
<context:component-scanbase-package="com.gbx"/>
- Service
@Service
publicclassBookService {
//注入dao
@Autowired
privateBooKDaobooKDao;
}
- Dao
@Repository
publicclassBookImplimplementsBooKDao{
//注入JdbcTemplate
@Autowired
privateJdbcTemplatejdbcTemplate;
}
2.操作数据库
2.1添加
- 对应数据库创建实体类
publicclassUser {
privateStringuserId;
privateStringusername;
privateStringustatus;
publicvoidsetUserId(StringuserId) {
this.userId=userId;
}
publicvoidsetUsername(Stringusername) {
this.username=username;
}
publicvoidsetUstatus(Stringustatus) {
this.ustatus=ustatus;
}
}
- 编写service和dao
- 在dao进行数据库添加操作
- 调用JdbcTemplate对象里面update方法实现添加操作
网络异常,图片无法展示|
有两个参数
第一个参数:sql语句
第二个参数:可变参数,设置sql语句值
@Repository
publicclassBookImplimplementsBooKDao{
//注入JdbcTemplate
@Autowired
privateJdbcTemplatejdbcTemplate;
//添加的方法
@Override
publicvoidadd(Bookbook) {
//1 创建sql语句
Stringsql="insert into t_book values (?,?,?)";
//2 调用方法实现
Object[] args= {book.getUserId(),book.getUsername(),book.getUstatus()};
intupdate=jdbcTemplate.update(sql,args);
System.out.println(update);
}
}
- 测试类
@Test
publicvoidtestJdbcTemplate(){
ApplicationContextcontext=
newClassPathXmlApplicationContext("bean1.xml");
BookServicebookService=context.getBean("bookService", BookService.class);
Bookbook=newBook();
book.setUserId("1");
book.setUsername("三国");
book.setUstatus("售罄");
bookService.addBook(book);
}
-
网络异常,图片无法展示|
2.2修改和删除
Service 层
//修改的方法
publicvoidupdate(Bookbook){
booKDao.updateBook(book);
}
//删除的方法
publicvoiddelete(Stringid){
booKDao.deleteBook(id);
}
Dao 层
voidupdateBook(Bookbook);
voiddeleteBook(Stringid);
实现类
//修改
@Override
publicvoidupdateBook(Bookbook) {
//1 创建sql语句
Stringsql="update t_book set username=?,ustatus=?,where user_id=?";
//2 调用方法实现
Object[] args= {book.getUsername(),book.getUstatus(),book.getUserId()};
intupdate=jdbcTemplate.update(sql,args);
System.out.println(update);
}
//删除
@Override
publicvoiddeleteBook(Stringid) {
//1 创建sql语句
Stringsql="delete from t_book where user_id=?";
//2 调用方法实现
intupdate=jdbcTemplate.update(sql,id);
System.out.println(update);
}
Test类
//修改
Bookbook=newBook();
book.setUserId("1");
book.setUsername("三国演义");
book.setUstatus("在售");
bookService.update(book);
//删除
bookService.delete("1");
2.3查询
2.3.1查询返回某个值
- 查询表里面有多少条记录,返回是某个值
- 使用JdbcTemplate实现查询返回某个值代码
网络异常,图片无法展示|
- 有两个参数
- 第一个参数:sql语句
- 第二个参数:返回类型Class
//查询表记录
@Override
publicintselectCount() {
Stringsql= "select count(*) from t_book";
Integercount=jdbcTemplate.queryForObject(sql, Integer.class);
returncount;
}
2.3.2查询返回对象
- 场景:查询图书详情
- JdbcTemplate实现
网络异常,图片无法展示|
- 有三个参数
- 第一个参数:sql语句
- 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
- 第三个参数:sql语句值
//查询返回对象
@Override
publicBookfindBookInfo(Stringid) {
Stringsql="select * from t_book where userid=?";
Bookbook=jdbcTemplate.queryForObject(sql, newBeanPropertyRowMapper<Book>(Book.class), id);
returnbook;
}
2.3.3查询返回集合
- 场景:查询图书列表分页...
- 调用JdbcTemplate方法实现查询返回集合
网络异常,图片无法展示|
- 有三个参数
- 第一个参数:sql语句
- 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
- 第三个参数:sql语句值
//查询返回集合
@Override
publicList<Book>findAllBook() {
Stringsql="select * from t_book";
List<Book>bookList=jdbcTemplate.query(sql, newBeanPropertyRowMapper<Book>(Book.class));
returnbookList;
}
2.4批量操作
2.4.1批量添加
- 批量操作:操作表里面多条记录
- ]dbcTemplate实现批量添加操作
网络异常,图片无法展示|
- 有两个参数
- 第一个参数:sql语句
- 第二个参数:List集合,添加多条记录数据
//批量添加
@Override
publicvoidbatchAddBook(List<Object[]>batchArgs) {
Stringsql="insert into t_book values (?,?,?)";
int[] ints=jdbcTemplate.batchUpdate(sql,batchArgs);
System.out.println(Arrays.toString(ints));
}
Test类
//批量添加
List<Object[]>batchArgs=newArrayList<>();
Object[]o1= {"3","java","a"};
Object[]o2= {"2","py","b"};
Object[]o3= {"4","C++","c"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
//调用批量参加
bookService.batchAdd(batchArgs);
2.4.2批量修改
@Override
publicvoidbatchUpdateBook(List<Object[]>batchArgs) {
Stringsql="update t_book set username=?,ustatus=?where user_id=?";
int[] ints=jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(ints);
}
//批量修改
List<Object[]>batchArgs=newArrayList<>();
Object[]o1= {"java","在售","4"};
Object[]o2= {"py","售罄","9"};
Object[]o3= {"C++","在售","6"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchUpdate(batchArgs);
2.4.3批量删除
@Override
publicvoidbatchDeleteBook(List<Object[]>batchArgs) {
Stringsql="delete from t_book where user_id=?";
int[] ints=jdbcTemplate.batchUpdate(sql, batchArgs);
System.out.println(Arrays.toString(ints));
}
//批量修改
List<Object[]>batchArgs=newArrayList<>();
Object[]o1= {"4"};
Object[]o2= {"9"};
Object[]o3= {"6"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchDelete(batchArgs);