spring5 框架【第四节JdbcTemplate】
四、JdbcTemplate
1、JdbcTemplate概念及使用
1.1、什么是JdbcTemplate
Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作
1.2、准备工作
- (1)引入jar包
- (2)引入数据库连接池
<!-- 引入外部属性文件jdbc.properites-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 数据库连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<!-- <property name="url" value="jdbc:mysql://localhost:3306/jdbc?characterEncoding=utf-8&serverTimezone=UTC " />-->
<!-- <property name="username" value="root" />-->
<!-- <property name="password" value="root" />-->
<!-- <property name="driverClassName" value="com.mysql.jdbc.Driver" />-->
<property name="driverClassName" value="${driverClass}"/>
<property name="url" value="${url}"/>
<property name="username" value="${name}"/>
<property name="password" value="${password}"/>
</bean>
- (3)配置 JdbcTemplate 对象,注入 DataSource
<!--JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 注入dataSoiure属性set方法-->
<property name="dataSource" ref="dataSource">
</property>
</bean>
- (4)配置文件
- jdbc.properties资源文件
driverClass=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbc?characterEncoding=utf-8&serverTimezone=UTC name=root password=root
- xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" > <!-- 组件扫描 --> <context:component-scan base-package="Spring5_6"/> <!-- 引入外部属性文件jdbc.properites--> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 数据库连接池--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <!-- <property name="url" value="jdbc:mysql://localhost:3306/jdbc?characterEncoding=utf-8&serverTimezone=UTC " />--> <!-- <property name="username" value="root" />--> <!-- <property name="password" value="root" />--> <!-- <property name="driverClassName" value="com.mysql.jdbc.Driver" />--> <property name="driverClassName" value="${driverClass}"/> <property name="url" value="${url}"/> <property name="username" value="${name}"/> <property name="password" value="${password}"/> </bean> <!--JdbcTemplate对象--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 注入dataSoiure属性set方法--> <property name="dataSource" ref="dataSource"> </property> </bean> </beans>
2、JdbcTemplate操作数据库(添加、修改、删除)
2.1、添加操作
//添加的方法
@Override
public void add(Book book){
//1.创建sql语句
String sql=" insert into jdbc.book(id, name, password) VALUES(?,?,?)";
//2.调用方法实现
Object[] args={book.getId(),book.getName(),book.getPassword()};
int update=jdbcTemplate.update(sql,args);
System.out.println(update);
}
2.2、修改操作
//修改的方法
@Override
public void update(Book book){
//1.创建sql语句
String sql="update jdbc.book set name=?,password=? where id=?";
//2.调用方法实现
Object[] args={book.getName(),book.getPassword(),book.getId()};
int update=jdbcTemplate.update(sql,args);
System.out.println(update);
}
2.3、删除操作
//删除的方法
@Override
public void delete(int id){
//1.创建sql语句
String sql=" delete from jdbc.book where id=?";
//2.调用方法实现
Object[] args={id};
int update=jdbcTemplate.update(sql,args);
System.out.println(update);
}
2.4、实现案例
- (5)创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象
-
*配置文件
<!-- 组件扫描 --> <context:component-scan base-package="Spring5_6"/>
-
dao层接口
public interface BookDao { //添加方法 void add(Book book); //修改方法 void update(Book book); //删除方法 void delete(int id); }
- dao层实现接口
@Repository public class BookDaoImpl implements BookDao{ //注入JdbcTemlate @Autowired private JdbcTemplate jdbcTemplate; //添加的方法 @Override public void add(Book book){ //1.创建sql语句 String sql=" insert into jdbc.book(id, name, password) VALUES(?,?,?)"; //2.调用方法实现 Object[] args={book.getId(),book.getName(),book.getPassword()}; int update=jdbcTemplate.update(sql,args); System.out.println(update); } //修改的方法 @Override public void update(Book book){ //1.创建sql语句 String sql="update jdbc.book set name=?,password=? where id=?"; //2.调用方法实现 Object[] args={book.getName(),book.getPassword(),book.getId()}; int update=jdbcTemplate.update(sql,args); System.out.println(update); } //删除的方法 @Override public void delete(int id){ //1.创建sql语句 String sql=" delete from jdbc.book where id=?"; //2.调用方法实现 Object[] args={id}; int update=jdbcTemplate.update(sql,args); System.out.println(update); } }
- 实体类
//表数据属性实体类 public class Book { private int id; private String name; private String password; public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setPassword(String password) { this.password = password; } public int getId() { return id; } public String getName() { return name; } public String getPassword() { return password; } }
-
Service层
@Service public class BookService { //注入dao @Autowired private BookDao bookDao; //添加操作 public void addBook(Book book) { bookDao.add(book); } //修改操作 public void updateBook(Book book){ bookDao.update(book); } //删除操作 public void deleteBook(int id){ bookDao.delete(id); } }
- (6)测试
public class Test_demo1 {
@Test
public void test(){
ApplicationContext context=new ClassPathXmlApplicationContext("xml/Spring5_6/spring5_demo1.xml");
BookService bookService=context.getBean("bookService", BookService.class);
Book book=new Book();
// //添加
// book.setId(11);
// book.setName("ljf12");
// book.setPassword("ljf1112");
// bookService.addBook(book);
// //修改
// book.setId(11);
// book.setName("ljf123");
// book.setPassword("ljf11123");
// bookService.updateBook(book);
// //删除
bookService.deleteBook(11);
}
}
3、JdbcTemplate操作数据库(查询返回某个值)
- 1、查询表里面有多条记录,返回某个值
- 2、使用JdbcTemplate实现查询返回某个值的代码
queryForObject方法中:
jdbcTemplate.queryForObject(sql,Integer.class)
第一个参数:sql语句
第二个参数:第二个参数代表--返回类型class
第三个参数:sql 语句值
//查询表中的记录
@Override
public int select(){
//1.创建sql语句
String sql="select count(*) from jdbc.book";
//2.调用方法实现
int update=jdbcTemplate.queryForObject(sql,Integer.class);
return update;
}
4、JdbcTemplate操作数据库(查询返回对象)
-
1.场景:查询图书详情
-
2.JdbcTemplate实现查询返回对象
queryForObject方法中: jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class),id); 第一个参数:sql语句 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面 实现类 完成数据封装 new BeanPropertyRowMapper<Book>(Book.class) 第三个参数:sql 语句值
//查询返回对象
@Override
public Book findBookInfo(int id){
//1.创建sql语句
String sql="select * from jdbc.book where id=?";
//2.调用方法实现
Book bookList= (Book) jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
return bookList;
}
5、JdbcTemplate操作数据库(查询返回集合)
- 1.场景:查询图书详情
- 2.JdbcTemplate实现查询返回对象集合
queryForObject方法中:
jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class),{1,”12”})
第一个参数:sql语句
第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面 实现类 完成数据封装 new BeanPropertyRowMapper<Book>(Book.class)
第三个参数:sql 语句值
//查询返回集合
@Override
public List<Book> listAll(){
//1.创建sql语句
String sql="select * from jdbc.book ";
//2.调用方法实现
//List<Book> bookAll= (List<Book>) jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class));
List<Book> bookAll=jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(Book.class));
return bookAll;
}
6、查询案例
- 接口
public interface BookDao {
//添加方法
void add(Book book);
//修改方法
void update(Book book);
//删除方法
void delete(int id);
//查询表中记录
int select();
//查询返回对象
Book findBookInfo(int id);
//查询返回集合
List<Book> listAll();
}
-实现接口
//查询表中的记录
@Override
public int select(){
//1.创建sql语句
String sql="select count(*) from jdbc.book";
//2.调用方法实现
int update=jdbcTemplate.queryForObject(sql,Integer.class);
return update;
}
//查询返回对象
@Override
public Book findBookInfo(int id){
//1.创建sql语句
String sql="select * from jdbc.book where id=?";
//2.调用方法实现
Book bookList= (Book) jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class),id);
return bookList;
}
//查询返回集合
@Override
public List<Book> listAll(){
//1.创建sql语句
String sql="select * from jdbc.book ";
//2.调用方法实现
//List<Book> bookAll= (List<Book>) jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<Book>(Book.class));
List<Book> bookAll=jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(Book.class));
return bookAll;
}
- 测试
public class Test_demo1_select {
//查询表中数据记录
@Test
public void test1(){
ApplicationContext context=new ClassPathXmlApplicationContext("xml/Spring5_6/spring5_demo1.xml");
BookService bookService=context.getBean("bookService", BookService.class);
int count=bookService.selectBook();
System.out.println(count);
}
//查询返回对象
@Test
public void test2(){
ApplicationContext context=new ClassPathXmlApplicationContext("xml/Spring5_6/spring5_demo1.xml");
BookService bookService=context.getBean("bookService", BookService.class);
Book book =bookService.selectFindBook(2);
System.out.println(book.toString());
}
//查询返回集合
@Test
public void test3(){
ApplicationContext context=new ClassPathXmlApplicationContext("xml/Spring5_6/spring5_demo1.xml");
BookService bookService=context.getBean("bookService", BookService.class);
List<Book> bookList=bookService.selectListAllBook();
System.out.println(bookList);
}
}
7、JdbcTemplate操作数据库(批量操作)
批量操作:操作表中多条记录
7.1、JdbcTemplate------批量添加
queryForObject方法中:
int[] ints=jdbcTemplate.batchUpdate(sql,object);
第一个参数:sql语句
第二个参数:List集合,添加多条记录数据
//批量添加
public void batchAdd(List<Object[]> object){
//1.创建sql语句
String sql="insert into jdbc.book values (?,?,?)";
//2.调用方法实现
int[] ints=jdbcTemplate.batchUpdate(sql,object);
System.out.println(Arrays.toString(ints));
}
//批量添加
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("xml/Spring5_6/spring5_demo1.xml");
BookService bookService = context.getBean("bookService", BookService.class);
//批量添加
List<Object[]> objects=new ArrayList<>();
Object[] o1={21,"java","a"};
Object[] o2={22,"c","b"};
Object[] o3={23,"C++","c"};
objects.add(o1);
objects.add(o2);
objects.add(o3);
bookService.batchAddBook(objects);
}
7.2、JdbcTemplate------批量修改、删除
//批量修改
@Override
public void batchUpdata(List<Object[]> object) {
//1.创建sql语句
String sql="update jdbc.book set name=?,password=? where id=?";
//2.调用方法实现
int[] ints=jdbcTemplate.batchUpdate(sql,object);
System.out.println(Arrays.toString(ints));
}
//批量删除
@Override
public void batchDelet(List<Object[]> object) {
//1.创建sql语句
String sql="delete from jdbc.book where id=?";
//2.调用方法实现
int[] ints=jdbcTemplate.batchUpdate(sql,object);
System.out.println(Arrays.toString(ints));
}
//批量修改
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("xml/Spring5_6/spring5_demo1.xml");
BookService bookService = context.getBean("bookService", BookService.class);
//批量修改
List<Object[]> objects=new ArrayList<>();
Object[] o1={"java01","a01",21};
Object[] o2={"c01","b01",22};
Object[] o3={"C++01","c01",23};
objects.add(o1);
objects.add(o2) ;
objects.add(o3);
bookService.batchUpdatBook(objects);
}
//批量删除
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("xml/Spring5_6/spring5_demo1.xml");
BookService bookService = context.getBean("bookService", BookService.class);
//批量删除
List<Object[]> objects=new ArrayList<>();
Object[] o1={21};
Object[] o2={22};
objects.add(o1);
objects.add(o2) ;
bookService.batchDeletBook(objects);
}