1、Jdbc Template概述

Spring框架对JDBC进行封装,使用Jdbc Template方便实现对数据库操作

2、案例演示

2.1 准备工作

(1)向lib引入相关jar包(Maven搞定)

(2)创建相关相关类

Step1 在工程创建立一个com.atguigu.spring5.service文件夹(包),写一个BookService类

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{
}

再创建一个com.atguigu.spring5.dao文件夹(包)

在该文件夹下写一个BookDao接口,和BookDao接口的实现类BookDaoImpl

package com.atguigu.spring5.dao;public interface BookDao{}

创建BookDaoImpl对象 bookDaoImpl

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{
}

(3)Spring配置文件配置数据库连接池,开启组件扫描等,创建JdbcTemplate类对象jdbcTemplate,将dateSource属性注入jdbcTemplate

<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="jdbc:mysql:///user_db" /> <property name="username" value="root" /> <property name="password" value="root" /> <property name="driverClassName" value="com.mysql.jdbc.Driver" />
</bean><!-- 配置JdbcTemplate对象,注入DataSource -->
<!-- JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!--注入dataSource--> <property name="dataSource" ref="dataSource"></property>
</bean><!-- 开启组件扫描 -->
<context:component-scan base-package="com.atguigu"></context:component-scan>

(4)将dao作为属性注入BookService对象

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao;
}

将JdbcTemplate作为属性注入BookDaoImpl

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;
}

2.2 JdbcTemplate操作数据库(添加)

对应数据库创建实体类

在com.atguigu.spring5下创建entity文件夹,包com.atguigu.spring5.entity 下创建Book类(代表Book数据表)

BookService类作为最外层来操作数据库的增删改查,BookDao类是BookService的属性,底层再封装jdbcTemplate实际操作数据库。Book是被操作的数据表

(1)为数据表创建实体类Book 

package com.atguigu.spring5.entity;public class Book{private String userId;private String username;private String ustatus;//空参构造器,有参构造器,get,set方法public void setUserId(String userId){this.userId=userId;}public void setUsername(String username){this.username=username;}
}

(2)对dao进行数据库添加操作,先在接口写一个抽象方法add(),表示向数据库添加数据

package com.atguigu.spring5.dao;public interface BookDao{//添加方法void add(Book book);
}

实现类具体实现该方法

JdbcTemplate对象里面有一个update方法实现添加操作

语法:update(String sql,Object...args)

第一个参数:sql语句
第二个参数:可变参数,设置sql语句值

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic 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);}
}

BookService类里面写添加方法。

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao; //添加方法public void addBook(Book book){bookDao.add(book);}
}

(3)编写测试类

在com.atguigu.spring5文件夹下编写test文件夹(包com.atguigu.spring5)

package com.atguigu.spring5.test;public class TestBook{@Testpublic void testJdbcTemplate(){ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);Book book=new Book();//创建数据表//设置好要添加的内容book.setUserId("1");book.setUsername("java");book.setUstatus("a");bookService.addBook(book);//向book数据表,添加1,java,a}
}

2.3 jdbcTemplate数据库操作——修改

在BookService类添加后面,可直接写修改,和删除的方法。然后在Dao里面完成操作细节

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao; //添加方法public void addBook(Book book){bookDao.add(book);}//修改方法public void updateBook(Book book){bookDao.updateBook(book);}//删除方法public void deleteBook(String id){bookDao delete(id);}
}

在接口中补上修改和删除的方法,同时实现类里面具体实现

package com.atguigu.spring5.dao;public interface BookDao{//添加方法void add(Book book);//修改方法void updateBook(Book book);//删除方法void delete(String id);//根据id进行删除
}

实现类中

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic 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);}//修改方法@Overridepublic void updateBook(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);}//删除方法@Overridepublic void delete(String id){String sql = "delete from t_book where user_id=?"; int update = jdbcTemplate.update(sql, id); System.out.println(update); }
}

编写测试类

package com.atguigu.spring5.test;public class TestBook{@Testpublic void testJdbcTemplate(){ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);Book book=new Book();//创建数据表//设置好要添加的内容book.setUserId("1");book.setUsername("javaup");book.setUstatus("atguigu");bookService.updateBook(book);//修改第一行bookService.deleteBook("1");//再删除第一行}
}

即可完成修改操作,修改后如上图所示,然后又会被bookService.deleteBook("1") 秒删除。

2.4 JdbcTemplate数据库操作——查询

2.4.1 查询的是某个返回值

exp1:使用JdbcTemplate实现查询表里有多少条记录

语法:public int queryForObject(String sql,Class<T> requiredType)

第一个参数:sql语句
第二个参数:返回类型的Class(类型指integer,string)

BookService里面继续添加查询数据表记录数的方法findCount

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao; //添加方法public void addBook(Book book){bookDao.add(book);}//修改方法public void updateBook(Book book){bookDao.updateBook(book);}//删除方法public void deleteBook(String id){bookDao delete(id);}//查询表记录数public int findCount(){bookDao.selectCount();}
}

在接口中补充该方法,并在实现类中实现方法

package com.atguigu.spring5.dao;public interface BookDao{//添加方法void add(Book book);//修改方法void updateBook(Book book);//删除方法void delete(String id);//根据id进行删除//查询表记录数int selectCount();
}

实现类,完成该方法

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic 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);}//修改方法@Overridepublic void updateBook(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);}//删除方法@Overridepublic void delete(String id){String sql = "delete from t_book where user_id=?"; int update = jdbcTemplate.update(sql, id); System.out.println(update); }//查询方法@Overridepublic int selectCount() {String sql = "select count(*) from t_book"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; }
}

编写测试类,获取数据表的条目数

package com.atguigu.spring5.test;public class TestBook{@Testpublic void testJdbcTemplate(){ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);//获取数据表的条目数int count=bookService.findCount();System.out.println(count);}
}

2.4.2 JdbcTemplate实现查询返回对象

exp2:用JdbcTemplate查询图书馆图书详情(根据id查询)

语法:public Object queryForObject(String sql,RowMapper<T> rowMapper, Object...args)

第一个参数:sql语句

第二个参数:RowMapper是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装,框架已经帮我们写好了实现类BeanPropertyRowMapper<数据表类名>(数据表类对象,id),我们只管调用。就会返回对应id的book对象(id对应的行)

第三个参数:sql语句中?的值

在BookService里面创建根据id查询返回对象的方法 public Book findOne(String id)

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao; //添加方法public void addBook(Book book){bookDao.add(book);}//修改方法public void updateBook(Book book){bookDao.updateBook(book);}//删除方法public void deleteBook(String id){bookDao delete(id);}//查询表记录数public int findCount(){bookDao.selectCount();}//根据id值查询返回对象public Book findOne(String id){return bookDao.findBookInfo(id);}
}

在接口里面写继续写查询方法

package com.atguigu.spring5.dao;public interface BookDao{//添加方法void add(Book book);//修改方法void updateBook(Book book);//删除方法void delete(String id);//根据id进行删除//查询表记录数int selectCount();//根据id查询返回对象Book findBookInfo(String id);
}

在实现类中,完成该方法的具体实现(重点)

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic 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);}//修改方法@Overridepublic void updateBook(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);}//删除方法@Overridepublic void delete(String id){String sql = "delete from t_book where user_id=?"; int update = jdbcTemplate.update(sql, id); System.out.println(update); }//查询方法@Overridepublic int selectCount() {String sql = "select count(*) from t_book"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; }//根据查询返回对象@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; }
}

做测试

package com.atguigu.spring5.test;public class TestBook{@Testpublic void testJdbcTemplate(){ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);//查询返回对象Book book = bookService.findOne("1");}
}

2.4.3 用JdbcTemplate方法实现查询返回集合

exp3:查询图书列表分页…

语法:public List<Object> query(String sql,RowMapper<T> rowMapper, Object...args)

第一个参数:sql语句

第二个参数:RowMapper是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装,框架已经帮我们写好了实现类BeanPropertyRowMapper<数据表类名>(数据表类对象,id),我们只管调用。就会返回对应id的book对象(id对应的行)

第三个参数:sql语句中?的值

说明:形参和上面的返回对象一样,但是方法名和返回值不一样

BookService里面继续添加查询返回集合的方法

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao; //添加方法public void addBook(Book book){bookDao.add(book);}//修改方法public void updateBook(Book book){bookDao.updateBook(book);}//删除方法public void deleteBook(String id){bookDao delete(id);}//查询表记录数public int findCount(){bookDao.selectCount();}//根据id值查询返回对象public Book findOne(String id){return bookDao.findBookInfo(id);}//查询返回的集合public List<Book> findAll(){return bookDao.findAllBook();}
}

在BookDao接口中,写下抽象方法

package com.atguigu.spring5.dao;public interface BookDao{//添加方法void add(Book book);//修改方法void updateBook(Book book);//删除方法void delete(String id);//根据id进行删除//查询表记录数int selectCount();//根据id查询返回对象Book findBookInfo(String id);//查询返回集合List<Book> findAllBook();
}

在实现类中,完成方法具体实现

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic 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);}//修改方法@Overridepublic void updateBook(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);}//删除方法@Overridepublic void delete(String id){String sql = "delete from t_book where user_id=?"; int update = jdbcTemplate.update(sql, id); System.out.println(update); }//查询方法@Overridepublic int selectCount() {String sql = "select count(*) from t_book"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; }//根据查询返回对象@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; }@Override public List<Book> findAllBook() { String sql = "select * from t_book"; //调用方法 List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));  //可以没有第三个参数return bookList; }
}

做测试

package com.atguigu.spring5.test;public class TestBook{@Testpublic void testJdbcTemplate(){ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);//查询返回集合List<Book> all=bookService.findAll();System.out.println(all);}
}

2.5  JdbcTemplate实现批量添加操作(批量操作就是操作多条记录)

2.5.1 批量添加

exp4 操作数据表里的多条记录

batchUpdate(String sql,List<Object[]> batchArgs)
 第一个参数:sql语句
 第二个参数:List集合,添加多条记录数据。每个List元素代表数据表的每一行(Object[]),每个Object[]元素又代表数据表的每一列

BookService里面继续添加查询返回集合的方法

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao; //添加方法public void addBook(Book book){bookDao.add(book);}//修改方法public void updateBook(Book book){bookDao.updateBook(book);}//删除方法public void deleteBook(String id){bookDao delete(id);}//查询表记录数public int findCount(){bookDao.selectCount();}//根据id值查询返回对象public Book findOne(String id){return bookDao.findBookInfo(id);}//查询返回的集合public List<Book> findAll(){return bookDao.findAllBook();}//批量添加public void batchAdd(){return bookDao.batchAddBook(batchArgs);}
}

BookDao接口中添加抽象方法

package com.atguigu.spring5.dao;public interface BookDao{//添加方法void add(Book book);//修改方法void updateBook(Book book);//删除方法void delete(String id);//根据id进行删除//查询表记录数int selectCount();//根据id查询返回对象Book findBookInfo(String id);//查询返回集合List<Book> findAllBook();//批量添加void batchAddBook(List<Object[]> batchArgs);
}

实现类中,完成方法具体实现

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic 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);}//修改方法@Overridepublic void updateBook(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);}//删除方法@Overridepublic void delete(String id){String sql = "delete from t_book where user_id=?"; int update = jdbcTemplate.update(sql, id); System.out.println(update); }//查询方法@Overridepublic int selectCount() {String sql = "select count(*) from t_book"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; }//根据查询返回对象@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; }@Override public List<Book> findAllBook() { String sql = "select * from t_book"; //调用方法 List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));  //可以没有第三个参数return bookList; }//批量添加@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)); }
}

做测试

package com.atguigu.spring5.test;public class TestBook{@Testpublic void testJdbcTemplate(){ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);//批量添加//创建一个List集合,元素是Object[]List<Object[]> batchArgs = new ArrayList<>(); //创建3个 Object[]数组,添加好对象Object[] o1 = {"3","java","a"}; Object[] o2 = {"4","c++","b"}; Object[] o3 = {"5","MySQL","c"}; //将3个数组添加入集合batchArgs.add(o1); batchArgs.add(o2); batchArgs.add(o3);//调用批量添加 bookService.batchAdd(batchArgs);}
}

2.5.2 批量修改

语法:同批量增加

BookService里面继续添加查询返回集合的方法

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao; //添加方法public void addBook(Book book){bookDao.add(book);}//修改方法public void updateBook(Book book){bookDao.updateBook(book);}//删除方法public void deleteBook(String id){bookDao delete(id);}//查询表记录数public int findCount(){bookDao.selectCount();}//根据id值查询返回对象public Book findOne(String id){return bookDao.findBookInfo(id);}//查询返回的集合public List<Book> findAll(){return bookDao.findAllBook();}//批量添加public void batchAdd(){return bookDao.batchAddBook(batchArgs);}//批量修改public void batchUpdate(List<Object[]> batchArgs){bookDao batchUpdateBook(batchArgs);  }
}

进入BookDao接口,添加抽象方法

package com.atguigu.spring5.dao;public interface BookDao{//添加方法void add(Book book);//修改方法void updateBook(Book book);//删除方法void delete(String id);//根据id进行删除//查询表记录数int selectCount();//根据id查询返回对象Book findBookInfo(String id);//查询返回集合List<Book> findAllBook();//批量添加void batchAddBook(List<Object[]> batchArgs);//批量修改void batchUpdateBook(List<Object> batchArgs);
}

实现类中完成具体方法

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic 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);}//修改方法@Overridepublic void updateBook(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);}//删除方法@Overridepublic void delete(String id){String sql = "delete from t_book where user_id=?"; int update = jdbcTemplate.update(sql, id); System.out.println(update); }//查询方法@Overridepublic int selectCount() {String sql = "select count(*) from t_book"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; }//根据查询返回对象@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; }@Override public List<Book> findAllBook() { String sql = "select * from t_book"; //调用方法 List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));  //可以没有第三个参数return bookList; }//批量添加@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)); }//批量修改 @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(Arrays.toString(ints)); }
}

做测试

2.5.3 批量删除

BookService中添加批量删除的方法

pacakage com.atguigu.spring5.service;@Service //通过注解创建对象
public class BookService{//注入dao@Autowiredprivate BookDao bookDao; //添加方法public void addBook(Book book){bookDao.add(book);}//修改方法public void updateBook(Book book){bookDao.updateBook(book);}//删除方法public void deleteBook(String id){bookDao delete(id);}//查询表记录数public int findCount(){bookDao.selectCount();}//根据id值查询返回对象public Book findOne(String id){return bookDao.findBookInfo(id);}//查询返回的集合public List<Book> findAll(){return bookDao.findAllBook();}//批量添加public void batchAdd(){return bookDao.batchAddBook(batchArgs);}//批量修改public void batchUpdate(List<Object[]> batchArgs){bookDao batchUpdateBook(batchArgs);  }//批量删除public void batchDelete(List<Objedct[]> batchArgs){bookDao.batchDeleteBook(batchArgs);}
}

BookDao接口中添加方法

package com.atguigu.spring5.dao;public interface BookDao{//添加方法void add(Book book);//修改方法void updateBook(Book book);//删除方法void delete(String id);//根据id进行删除//查询表记录数int selectCount();//根据id查询返回对象Book findBookInfo(String id);//查询返回集合List<Book> findAllBook();//批量添加void batchAddBook(List<Object[]> batchArgs);//批量修改void batchUpdateBook(List<Object> batchArgs);//批量删除void batchDeleteBook(List<Object> batchArgs);
}

实现类中完成具体实现

package com.atguigu.spring5.dao;@Repository
public class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法@Overridepublic 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);}//修改方法@Overridepublic void updateBook(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);}//删除方法@Overridepublic void delete(String id){String sql = "delete from t_book where user_id=?"; int update = jdbcTemplate.update(sql, id); System.out.println(update); }//查询方法@Overridepublic int selectCount() {String sql = "select count(*) from t_book"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); return count; }//根据查询返回对象@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; }@Override public List<Book> findAllBook() { String sql = "select * from t_book"; //调用方法 List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));  //可以没有第三个参数return bookList; }//批量添加@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)); }//批量修改 @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(Arrays.toString(ints)); }//批量删除 @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)); }
}

做测试

spring5 jdbcTemplate相关推荐

  1. Java之Spring5:JDBCTemplate

    JDBCTemplate 什么是JDBCTemplate 准备工作 添加操作 修改和删除操作 查询操作 返回某个值 返回对象 返回集合 批量添加 批量修改和删除 完整代码 什么是JDBCTemplat ...

  2. Spring5——JdbcTemplate

    一.什么是JdbcTemplate Spring对Jdbc进行封装,可以方便实现对数据库的操作. 二.操作数据库 2.1 添加 利用sevice调用,sevice中通过@Autowired注入dao, ...

  3. java day60【 Spring 中的 JdbcTemplate[会用] 、Spring 中的事务控制 、Spring5 的新特性[了解] 】...

    第1章 Spring 中的 JdbcTemplate[会用] 1.1JdbcTemplate 概述 1.2JdbcTemplate 对象的创建 1.3spring 中配置数据源 1.3.1 环境搭建 ...

  4. Spring5使用JDBCTemplate批处理添加数据时提示SQL语法有错

    目录 问题描述 解决方案 问题描述 今天在使用Spring5框架时,用JDBCTemplate技术来操作数据库,一开始增删改查都好好的,后来使用jdbcTemplate.batchUpdate()进行 ...

  5. 001 spring5框架:java类工程,IOC:实体类表示表关系,AOP,JdbcTemplate模板,事务操作,Spring5 框架新功能:日志,为空注解,函数式风格,juint,Webflux

    1. Spring5 框架(Spring5 Framework)介绍 1.1 概念 1.Spring 是轻量级的开源的 JavaEE 框架 2.Spring 可以解决企业应用开发的复杂性 3.Spri ...

  6. Spring5学习笔记------4、JdbcTemplate

    JdbcTemplate(概念) 1.Spring框架对JDBC进行了封装,使用JdbcTemplate方便实现对数据库的操作 2.JdbcTemplate操作实现 (1)引入jar包 (2)在Spr ...

  7. Spring5框架基础详解(五)(JdbcTemplate概念和准备、jdbcTemplate操作数据库添加功能、修改和删除功能、查询功能)

    文章目录 一.JdbcTemplate是什么和准备工作 1.1.引入相关maven依赖 1.2在spring配置文件配置数据库连接 1.3配置JdbcTemplate对象,注入DateSource 1 ...

  8. Spring5 学习总结—JdbcTemplate,事务管理

    JdbcTemplate(概念和准备)         1.什么是JdbcTemplate                 1.1 Spring框架对JDBC进行封装,使用 JdbcTemplate ...

  9. Spring5框架day03之JdbcTemplate

    一.JdbcTemplate准备工作 1.要使用JdbcTemplate就要先引入所需jar包 2.在xml文件中配置数据库资源,JdbcTemplate模板 <?xml version=&qu ...

最新文章

  1. java逐行读取文件数组_快速高效地在Java中逐行读取大型JSON文件的方法
  2. python|selenium的API说明文档查看的2种方法
  3. 2018年下半年软件设计师考试上午真题(参考答案)
  4. 单片机流星灯_51单片机拖尾灯实现
  5. IOS基础之绘图函数的使用
  6. 前端学习(3213):setstate的一个使用
  7. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--参数自动映射篇(6/8)...
  8. 知乎热点:数学专业的学霸们毕业后都在做什么
  9. python网络-计算机网络基础(23)
  10. 【声源定位】基于matlab单声源双麦克风房间冲激响应【含Matlab源码 547期】
  11. redhat7 linux修改语言,RedHatLinux7.1中语言化完全攻略(二)
  12. UE4--地形篇——风吹草动的草
  13. 执行npm install报错:npm ERR! code EINTEGRITY
  14. 火狐浏览器设置深色主题
  15. Java导出带有单选款(radio)和复选框(checkbox)选中效果的word doc文档-Freemarker实现方式
  16. Promise的理解
  17. 2G金士顿U盘修复工具迈科微MW6208E/8208_v1.2.0.8
  18. UWB+ZigBee定位技术开创井下空间里的“GPS”导航
  19. Neptune海王星系统资源加载问题
  20. python系统设计与实现_毕业设计5:基于MicroPython的智能火灾报警器系统的设计与实现...

热门文章

  1. 麻将胡牌算法lua 不支持癞子
  2. java开发多国语言互译
  3. 【MATLAB HDF5】Matlab将复数保存到hdf5文件
  4. 浏览器工作原理及相关内核、技术介绍
  5. VC++实现U盘开机锁
  6. PHP实现点击a标签的href做链接时,直接保存文件(任何类型),而不是通过浏览器直接打开下载的文件
  7. Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
  8. 搭建外卖服务器系统,本地外卖系统如何更好的搭建
  9. 【国内火车运行路线计算与展示】
  10. fis3 php cgi,FIS3 : FIS3 内置插件及配置