JdbcTemplate(概念和准备):
1、什么是 JdbcTemplate
(1)Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作;
2、准备工作
(1)引入相关 jar 包
(2)在 spring 配置文件配置数据库连接池
<bean id="dataSourse" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="jdbc:mysql:///user"/> <property name="username" value="root"/> <property name="password" value="root"/> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> </bean>
(3)配置 JdbcTemplate 对象,注入 DataSource
<!--jdbcTemPlate对象--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!--注入dataSource--> <property name="dataSource" ref="dataSourse"></property> </bean>
(4)创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象
* 配置文件
<!--组件扫描--> <context:component-scan base-package="com.atguigu"></context:compon-scan>
*Service
package com.atguigu.spring5; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * @author GGBond * @create 2021-04-02-16:26 */ @Service public class BookService { //注入dao @Autowired private BookDao bookDao; }
*Dao
package com.atguigu.spring5; /** * @author GGBond * @create 2021-04-02-16:27 */ public interface BookDao { } package com.atguigu.spring5; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; /** * @author GGBond * @create 2021-04-02-16:27 */ @Repository public class BookDaoImpl implements BookDao { //注入JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; }
JdbcTemplate 操作数据库(添加):
1、对应数据库创建实体类
package com.atguigu.spring5; /** * @author GGBond * @create 2021-04-02-16:42 */ 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
(1)在 dao 进行数据库添加操作
(2)调用 JdbcTemplate 对象里面 update 方法实现添加操作
有两个参数
第一个参数:sql 语句
第二个参数:可变参数,设置 sql 语句值
package com.atguigu.spring5; /** * @author GGBond * @create 2021-04-02-16:27 */ public interface BookDao { //添加的方法 void add(Book book); } import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; /** * @author GGBond * @create 2021-04-02-16:27 */ @Repository public class BookDaoImpl 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); } }
3.测试类
package com.atguigu.spring5; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author GGBond * @create 2021-04-02-16:52 */ public class test { @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml"); BookService bookService = context.getBean("bookService", BookService.class); Book book = new Book(); book.setUserId("2"); book.setUsername("php"); book.setUstatus("b"); bookService.addBook(book); } }
JdbcTemplate 操作数据库(修改和删除):
1.修改
//修改 @Override public void update(Book book) { String sql = "update t_book set username=?,ustatues=? where userid=?"; Object[] args = {book.getUsername(), book.getUstatus(), book.getUserId()}; int update = jdbcTemplate.update(sql, args); System.out.println(update); }
//修改 Book book= new Book(); book.setUserId("1"); book.setUsername("jdbc"); book.setUstatus("c"); bookService.updateBook(book);
2.删除
@Override public void delete(String id) { String sql = "delete from t_book where userid=?"; int update = jdbcTemplate.update(sql,id); System.out.println(update); }
//删除
bookService.deleteBook("1");
jdbcTemplate操作数据库(查询返回某个值):
1、查询表里面有多少条记录,返回是某个值
2、使用 JdbcTemplate 实现查询返回某个值代码
有两个参数:
*第一个参数:sql 语句
*第二个参数:返回类型 Class
//查询表记录数 public int findCount(){ return bookDao.selectCount(); }
//查询表记录数 int selectCount();
@Override public int selectCount() { String sql = "select count(*) from t_book"; Integer count = jdbcTemplate.queryForObject(sql,Integer.class); return count; }
//查询返回某个值 int count = bookService.findCount(); System.out.println(count);
JdbcTemplate操作数据库(查询返回对象):
1、场景:查询图书详情
2、JdbcTemplate 实现查询返回对象
有三个参数:
第一个参数:sql 语句;
第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装;
第三个参数:sql 语句值;
//查询返回对象 public Book findOne(String id){ return bookDao.findBookInfo(id); }
@Override public String toString() { return "Book{" + "userId='" + userId + '\'' + ", username='" + username + '\'' + ", ustatus='" + ustatus + '\'' + '}'; }
@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; }
//查询返回对象 Book findBookInfo(String id);
//查询返回对象 Book book = bookService.findOne("1"); System.out.println(book);
JdbcTemplate操作数据库(查询返回集合):
1、场景:查询图书列表分页…
2、调用 JdbcTemplate 方法实现查询返回集合
有三个参数
第一个参数:sql 语句;
第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装;
第三个参数:sql 语句值;
//查询返回集合 public List<Book> findAllBook(){ return bookDao.findAllBook(); }
//查询返回集合 List<Book> findAllBook();
@Override public List<Book> findAllBook() { String sql = "select *from t_book"; //调用方法 List<Book> bookList = jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class)); return bookList; }
//查询返回集合 List<Book> all = bookService.findAllBook(); System.out.println(all);
JdbcTemplate操作数据库(批量操作):
1、批量操作:操作表里面多条记录
2、JdbcTemplate 实现批量添加操作
有两个参数:
* 第一个参数:sql 语句;
*第二个参数:List 集合,添加多条记录数据;
//批量添加 public void batchAdd(List<Object[]> batchArgs){ bookDao.batchAddBook(batchArgs); }
@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)); }
//批量添加 void batchAddBook(List<Object[]> batchArgs);
//批量添加 List<Object[]> batchArgs = new ArrayList<>(); Object[] o1 = {"3","java","a"}; Object[] o2 = {"4","c++","b"}; Object[] o3 = {"5","MySql","c"}; batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3); //调用批量添加 bookService.batchAdd(batchArgs);
3、JdbcTemplate 实现批量修改操作
//批量修改 public void batchUpdate(List<Object[]> batchArgs){ bookDao.batchUpdateBook(batchArgs); }
@Override public void batchUpdateBook(List<Object[]> batchArgs) { String sql = "update t_book set username=?,ustatus=? where userid=?"; int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs); System.out.println(Arrays.toString(ints)); }
//批量修改 void batchUpdateBook(List<Object[]> batchArgs);
//批量修改 List<Object[]> batchArgs = new ArrayList<>(); Object[] o1 = {"java0909","a3","3"}; Object[] o2 = {"c++1010","b4","4"}; Object[] o3 = {"Mysql1111","c5","5"}; batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3); //调用批量添加 bookService.batchUpdate(batchArgs);
4、JdbcTemplate 实现批量删除操作
//批量删除 public void batchDelete(List<Object[]> batchArgs){ bookDao.batchDeleteBook(batchArgs); }
@Override public void batchDeleteBook(List<Object[]> batchArgs) { String sql= "delete from t_book where userid=?"; int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs); System.out.println(Arrays.toString(ints)); }
//批量删除 void batchDeleteBook(List<Object[]> batchArgs);
//批量删除 List<Object[]> batchArgs = new ArrayList<>(); Object[] o1 = {"3"}; Object[] o2 = {"4"}; batchArgs.add(o1); batchArgs.add(o2); //调用方法实现批量删除 bookService.batchDelete(batchArgs);