开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的3天,点击查看活动详情
四.JdbcTemplate
1.基本概念
-
什么是JdbcTemplate?
- Spring框架对]DBC进行封装,使用JdbcTemplate方便实现对数据库操作
-
准备工作
-
引入相关jar包
-
在spring配置文件配置数据库连接池
<!-- 数据库连接池--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="jdbc:mysql:///db02?serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="123456"/> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> </bean> -
配置JdbcTemplate对象,注入DataSource
<!--JdbcTemplate对象--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!--注入dataSource--> <property name="dataSource" ref="dataSource"/> </bean> -
创建service类,创建dao类,在dao注入jdbcTemplate对象
-
配置文件
<!--组件扫描--> <context:component-scan base-package="com.gbx"/> -
Service
@Service public class BookService { //注入dao @Autowired private BooKDao booKDao; } -
Dao
@Repository public class BookImpl implements BooKDao{ //注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; }
-
-
2.操作数据库
2.1添加
-
对应数据库创建实体类
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; } } -
编写service和dao
-
在dao进行数据库添加操作
-
调用JdbcTemplate对象里面update方法实现添加操作
有两个参数
第一个参数:sql语句
第二个参数:可变参数,设置sql语句值
@Repository public class BookImpl implements BooKDao{ //注入JdbcTemplate @Autowired 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 = 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("三国"); book.setUstatus("售罄"); bookService.addBook(book); }
2.2修改和删除
Service 层
//修改的方法
public void update(Book book){
booKDao.updateBook(book);
}
//删除的方法
public void delete(String id){
booKDao.deleteBook(id);
}
Dao 层
void updateBook(Book book);
void deleteBook(String id);
实现类
//修改
@Override
public void updateBook(Book book) {
//1 创建sql语句
String sql = "update t_book set username=?,ustatus=?,where user_id=?";
//2 调用方法实现
Object[] args = {book.getUsername(),book.getUstatus(),book.getUserId()};
int update = jdbcTemplate.update(sql,args);
System.out.println(update);
}
//删除
@Override
public void deleteBook(String id) {
//1 创建sql语句
String sql = "delete from t_book where user_id=?";
//2 调用方法实现
int update = jdbcTemplate.update(sql,id);
System.out.println(update);
}
Test类
//修改
Book book = new Book();
book.setUserId("1");
book.setUsername("三国演义");
book.setUstatus("在售");
bookService.update(book);
//删除
bookService.delete("1");
2.3查询
2.3.1查询返回某个值
-
查询表里面有多少条记录,返回是某个值
-
使用JdbcTemplate实现查询返回某个值代码
-
有两个参数
- 第一个参数:sql语句
- 第二个参数:返回类型Class
//查询表记录 @Override public int selectCount() { String sql = "select count(*) from t_book"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; } -
2.3.2查询返回对象
-
场景:查询图书详情
-
JdbcTemplate实现
-
有三个参数
- 第一个参数:sql语句
- 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
- 第三个参数:sql语句值
//查询返回对象 @Override public Book findBookInfo(String id) { String sql = "select * from t_book where userid=?"; Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id); return book; } -
2.3.3查询返回集合
-
场景:查询图书列表分页...
-
调用JdbcTemplate方法实现查询返回集合
-
有三个参数
- 第一个参数: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;
}
2.4批量操作
2.4.1批量添加
-
批量操作:操作表里面多条记录
-
]dbcTemplate实现批量添加操作
-
有两个参数
- 第一个参数: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)); } Test类 //批量添加 List<Object[]> batchArgs=new ArrayList<>(); 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
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(ints);
}
//批量修改
List<Object[]> batchArgs=new ArrayList<>();
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
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 = {"4"};
Object[]o2 = {"9"};
Object[]o3 = {"6"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
bookService.batchDelete(batchArgs);