JdbcTemplate(概念和准备)
2:(1)引入相关jar包
(2):在spring配置文件中配置数据库的连接池
<!-- 直接通过druidjar配置数据库链接 --><bean id="dataSource"class="com.alibaba.druid.pool.DruidDataSource"><!-- 直接配置 *********************************************************** --><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/test"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean>
(3):配置jdbctemplate对象,注入datasource
<!-- 创建JdbcTemplate对象 --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><!-- 用set注入dataSource数据源 --><property name="dataSource" ref="dataSource"></property></bean>

(4):创建service类,创建dao类,在dao注入jdbctemplate对象
配置文件
<!-- 开启组件扫描 --><context:component-scan base-package="com.junjay.spring5"></context:component-scan>
创建对象
package com.junjay.spring5.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.junjay.spring5.dao.BookDao;@Servicepublic class BookService {// 注入dao接口@Autowiredprivate BookDao bookDao;}
package com.junjay.spring5.dao;public interface BookDao {}
package com.junjay.spring5.dao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;@Repositorypublic class BookDaoImpl implements BookDao {// 注入jdbctemplate@Autowiredprivate JdbcTemplate jdbcTemplate;}
JdbcTemplate(操作数据库)
1:添加插入数据库
1:对应数据库表创建实体类
package com.junjay.spring5.entity;public class Book {private String userId;private String username;private String state;public String getUserId() {return userId;}public void setUserId(String userId) {this.userId = userId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getState() {return state;}public void setState(String state) {this.state = state;}}
2:编写service 和 dao
(1):在dao进行数据库添加操作
@Servicepublic class BookService {// 注入dao接口@Autowiredprivate BookDao bookDao;public void addBook(Book book) {bookDao.addBook(book);}}
public interface BookDao {void addBook(Book book);}
(2):调用jdbctemplate对象里面的update方法实现添加
有俩个参数:t1-sql语句,t2-可变参数,设置sql语句
@Overridepublic void addBook(Book book) {// 创建插入sql语句String sql=" INSERT INTO test.book (USER_ID, USERNAME, STATE) VALUES (?,?,?) ";// 调用实现方法Object [] obj = {book.getUserId(),book.getUsername(),book.getState()};int i = jdbcTemplate.update(sql, obj);//int i = jdbcTemplate.update(sql, book.getUserId(),book.getUsername(),book.getState());// 返回值i为影响执行了几行System.out.println(i);}
测试
@Testpublic void testJdabBook() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);Book book = new Book("1","java-JdbcTemplate","1");bookService.addBook(book);}
2:修改、删除数据库内容
1:修改
(1):在service和dao中添加修改方法
@Servicepublic class BookService {// 注入dao接口@Autowiredprivate BookDao bookDao;public void addBook(Book book) {bookDao.addBook(book);}public void updateBook(Book book) {bookDao.updateBook(book);}}
public interface BookDao {void addBook(Book book);void updateBook(Book book);}
package com.junjay.spring5.dao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import com.junjay.spring5.entity.Book;@Repositorypublic class BookDaoImpl implements BookDao {// 注入jdbctemplate@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic void addBook(Book book) {// 创建插入sql语句String sql = " INSERT INTO test.book (USER_ID, USERNAME, STATE) VALUES (?,?,?) ";// 调用实现方法Object[] obj = { book.getUserId(), book.getUsername(), book.getState() };int i = jdbcTemplate.update(sql, obj);// int i = jdbcTemplate.update(sql,// book.getUserId(),book.getUsername(),book.getState());// 返回值i为影响执行了几行System.out.println("影响行数:" + i);}@Overridepublic void updateBook(Book book) {// 创建插入sql语句String sql = " UPDATE test.book SET USERNAME=?, STATE=? WHERE (USER_ID=?) ";// 调用实现方法,根据id修改内容Object[] obj = { book.getUsername(), book.getState(), book.getUserId() };int i = jdbcTemplate.update(sql, obj);// int i = jdbcTemplate.update(sql,// book.getUserId(),book.getUsername(),book.getState());// 返回值i为影响执行了几行System.out.println("影响行数:" + i);}}
测试:
@Testpublic void testJdabUpdateBook() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);Book book = new Book("1","java-update","2");bookService.updateBook(book);}
<br /><br />2:删除
public class BookService {// 注入dao接口@Autowiredprivate BookDao bookDao;public void addBook(Book book) {bookDao.addBook(book);}public void updateBook(Book book) {bookDao.updateBook(book);}public void delBook(String id) {bookDao.delBook(id);}}
public interface BookDao {void addBook(Book book);void updateBook(Book book);void delBook(String id);}
@Overridepublic void delBook(String id) {// 创建插入sql语句String sql = " DELETE FROM test.book WHERE (USER_ID=?) ";// 调用实现方法Object[] obj = { id };int i = jdbcTemplate.update(sql, obj);// int i = jdbcTemplate.update(sql,// book.getUserId(),book.getUsername(),book.getState());// 返回值i为影响执行了几行System.out.println("影响行数:" + i);}
3:查询返回某个值,查询返回对象,查询返回List
(1):查询表中有多少条记录,返回某个值
@Servicepublic class BookService {// 注入dao接口@Autowiredprivate BookDao bookDao;public void addBook(Book book) {bookDao.addBook(book);}public void updateBook(Book book) {bookDao.updateBook(book);}public void delBook(String id) {bookDao.delBook(id);}public int findCount() {return bookDao.findCount();}}
@Repositorypublic class BookDaoImpl implements BookDao {// 注入jdbctemplate@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic void addBook(Book book) {// 创建插入sql语句String sql = " INSERT INTO test.book (USER_ID, USERNAME, STATE) VALUES (?,?,?) ";// 调用实现方法Object[] obj = { book.getUserId(), book.getUsername(), book.getState() };int i = jdbcTemplate.update(sql, obj);// int i = jdbcTemplate.update(sql,// book.getUserId(),book.getUsername(),book.getState());// 返回值i为影响执行了几行System.out.println("影响行数:" + i);}@Overridepublic void updateBook(Book book) {// 修改String sql = " UPDATE test.book SET USERNAME=?, STATE=? WHERE (USER_ID=?) ";// 调用实现方法Object[] obj = { book.getUsername(), book.getState(), book.getUserId() };int i = jdbcTemplate.update(sql, obj);// int i = jdbcTemplate.update(sql,// book.getUserId(),book.getUsername(),book.getState());// 返回值i为影响执行了几行System.out.println("影响行数:" + i);}@Overridepublic void delBook(String id) {// 删除String sql = " DELETE FROM test.book WHERE (USER_ID=?) ";// 调用实现方法Object[] obj = { id };int i = jdbcTemplate.update(sql, obj);// int i = jdbcTemplate.update(sql,// book.getUserId(),book.getUsername(),book.getState());// 返回值i为影响执行了几行System.out.println("影响行数:" + i);}@Overridepublic int findCount() {// 查询数据库表中有多少条数据String sql = " SELECT COUNT(1) FROM book ";// 调用实现方法int i = jdbcTemplate.queryForObject(sql, int.class);// 返回值i为 表中有几条数据System.out.println("book有:" + i + "条数据");return i;}}
4:查询返回对象
(1):场景:查询图书详情内容,详情内容就是单个对象

BeanPropertyRowMapper 笔记
在使用 Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper
// BookServicepublic Book findOne(String id) {return bookDao.findOne(id);}
//BookDaoImpl@Overridepublic Book findOne(String id) {String sql = " SELECT * FROM book where USERID = ? ";// 三个参数// 1:sql语句,// 2:rowmapper 是接口,返回不同类型数据,使用这个接口实现类完成对数据进行封装// 查询条件值Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);return book;}
5:查询返回List对象

//BookServicepublic List<Book> findAll() {return bookDao.findAll();}
// BookDaoImpl@Overridepublic List<Book> findAll() {String sql = " SELECT * FROM book ";// 三个参数// 1:sql语句,// 2:rowmapper 是接口,返回不同类型数据,使用这个接口实现类完成对数据进行封装// 查询条件值List<Book> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Book.class));return query;}
JDBCTemplate(批量操作)
1:实现批量添加数据操作

BookServicepublic void bathAdd(List<Object[]> bathargs) {bookDao.bathAdd(bathargs);}
BookDaoImpl@Overridepublic void bathAdd(List<Object[]> bathargs) {String sql = " INSERT INTO test.book (USERID, USERNAME, STATE) VALUES (?,?,?) ";int[] is = jdbcTemplate.batchUpdate(sql,bathargs);System.out.println(Arrays.toString(is));}
@Testpublic void testJdabBathAdd() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);List<Object[]> bathargs =new ArrayList<>();Object[] a1 = {"13","张三","3"};Object[] a2 = {"14","李四","4"};Object[] a3 = {"15","王五","5"};bathargs.add(a1);bathargs.add(a2);bathargs.add(a3);bookService.bathAdd(bathargs);}
2:批量修改数据操作
BookServicepublic void bathUpdate(List<Object[]> bathargs) {bookDao.bathUpdate(bathargs);}
BookDaoImpl@Overridepublic void bathUpdate(List<Object[]> bathargs) {String sql = " UPDATE test.book SET USERNAME=?, STATE=? WHERE (USERID=?) ";// 与多条添加方法是调用同一个int[] is = jdbcTemplate.batchUpdate(sql,bathargs);System.out.println("修改条目:"+Arrays.toString(is));}
@Testpublic void testJdabBathUpdate() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);List<Object[]> bathargs =new ArrayList<>();Object[] a1 = {"张三1","5","13"};Object[] a2 = {"李四2","5","14"};Object[] a3 = {"王五3","6","15"};bathargs.add(a1);bathargs.add(a2);bathargs.add(a3);bookService.bathUpdate(bathargs);}
3:批量删除数据
BookServicepublic void bathDel(List<Object[]> bathargs) {bookDao.bathDel(bathargs);}
BookDaoImpl@Overridepublic void bathDel(List<Object[]> bathargs) {String sql = " DELETE FROM test.book WHERE (USERID=?) ";int[] is = jdbcTemplate.batchUpdate(sql,bathargs);System.out.println("删除条目:"+Arrays.toString(is));}
@Testpublic void testJdabBathDel() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");BookService bookService = context.getBean("bookService",BookService.class);List<Object[]> bathargs =new ArrayList<>();Object[] a1 = {"13"};Object[] a2 = {"14"};bathargs.add(a1);bathargs.add(a2);bookService.bathDel(bathargs);}



