JdbcTemplate介绍
- JdbcTemplate概念
- 使用JdbcTemplate的准备工作
- 操作数据库(增)
- 操作数据库 (修改和删除)
- 操作数据库 (查询)
- 查询返回某个值
- 查询返回对象
- 查询返回集合
- 操作数据库 (批量添加)
- 操作数据库 (批量修改和删除)
Spring配置JdbcTemplate
1、配置数据库连接池
<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="123456" /><property name="driverClassName" value="com.mysql.jdbc.Driver" /></bean>
2、配置 JdbcTemplate 对象,注入 DataSource
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>
3、开启注解扫描
<context:component-scan base-package="com.study.spring5"></context:component-scan>
4、service注入dao,dao注入JdbcTemplate
@Servicepublic class BookService {//注入dao@Autowiredprivate BookDao bookDao;}
@Repositorypublic class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;}
操作数据库
增
//创建sql语句String sql = "insert into t_book values(?,?,?)";Object[] args = {book.getUserid(), book.getUsername(), book.getUstatus()};int rows = jdbcTemplate.update(sql, args);
删
String sql = "delete from t_book where userid = ?";int rows = jdbcTemplate.update(sql, userid);
改
String sql = "update t_book set username = ?,ustatus = ? where userid = ?";Object[] args = {book.getUsername(), book.getUstatus(), book.getUserid()};int rows = jdbcTemplate.update(sql, args);
查
查询结果:单个记录
queryForObject(String sql,Class)
- 第一个参数:sql 语句
- 第二个参数:返回类型 Class
String sql = "select count(*) from t_book";Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
查询结果:对象
queryForObject (String sql, RowMapperrowMapper, rowMapper)
- 第一个参数:sql 语句
- 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
- 第三个参数:sql 语句值
String sql = "select * from t_book where userid = ?";Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
查询结果:集合
String sql = "select * from t_book";List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
JdbcTemplate概念
Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作
使用JdbcTemplate的准备工作
(1)引入相关 jar 包
(2)在 spring 配置文件配置数据库连接池
<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="123456" /><property name="driverClassName" value="com.mysql.jdbc.Driver" /></bean>
(3)配置 JdbcTemplate 对象,注入 DataSource
<bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>
(4)开启注解扫描
<context:component-scan base-package="com.study.spring5"></context:component-scan>
(5)创建 service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象
BookDaoImpl
@Repositorypublic class BookDaoImpl implements BookDao{//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;}
BookService
@Servicepublic class BookService {//注入dao@Autowiredprivate BookDao bookDao;}
操作数据库(增)
1、对应数据库创建实体类
提供对应的 get 和 set 方法
2、编写 service 和 dao
BookService
@Servicepublic class UserService {//注入dao@Autowiredprivate BookDao bookDao;//添加方法public void add(Book book) {bookDao.add(book);}}
BookDaolmpl
@Repositorypublic class BookDaoImpl implements BookDao {//注入JdbcTemplate@Autowiredprivate JdbcTemplate jdbcTemplate;//添加的方法,在接口中规范方法,由实现类来完成具体功能@Overridepublic void add(Book book) {//创建sql语句String sql = "insert into t_book values(?,?,?)";//调用方法实现Object[] args = {book.getUserid(), book.getUsername(), book.getUstatus()};int rows = jdbcTemplate.update(sql, args);System.out.println(rows);}}
3 测试
@Testpublic void testJdbcTemplate() {ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");UserService userService = context.getBean("userService", UserService.class);Book book = new Book();book.setUserid(100);book.setUsername("Java");book.setUstatus("perfect");userService.add(book);}
操作数据库 (修改和删除)
修改
@Overridepublic void update(Book book) {String sql = "update t_book set username = " />;Object[] args = {book.getUsername(), book.getUstatus(), book.getUserid()};int rows = jdbcTemplate.update(sql, args);System.out.println("更新受影响的行数: " + rows);}
删除
@Overridepublic void delete(Integer userid) {String sql = "delete from t_book where userid = ?";int rows = jdbcTemplate.update(sql, userid);System.out.println("删除受影响的行数: " + rows);}
操作数据库 (查询)
查询返回某个值
UserService
//查询表中记录数public int findCount() {return bookDao.selectCount();}
queryForObject(String sql,Class)
第一个参数:sql 语句
第二个参数:返回类型 Class
//查询表中记录数@Overridepublic int selectCount() {String sql = "select count(*) from t_book";Integer count = jdbcTemplate.queryForObject(sql, Integer.class);return count;}
测试
int count = userService.findCount();System.out.println("查询表中记录数: " + count);
查询返回对象
1、第一个参数:sql 语句
2、第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
3、第三个参数:sql 语句值
@Overridepublic Book findBookInfo(Integer id) {String sql = "select * from t_book where userid = " />;Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);return book;}
查询返回集合
@Overridepublic List<Book> findAllBook() {String sql = "select * from t_book";List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));return bookList;}
操作数据库 (批量添加)
//批量添加@Overridepublic void batchAddBook(List<Object[]> batchArgs) {//创建sql语句String sql = "insert into t_book values(?,?,?)";int[] rows = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("受影响的行数: " + Arrays.toString(rows));}
测试
//批量添加List<Object[]> list = new ArrayList<>();Object[] o1 = {"3", "tjava","a"};Object[] o2 = {"4","c++","b"};Object[] o3 = {"5","MySQL","c"};list.add(o1);list.add(o2);list.add(o3);userService.batchAdd(list);
操作数据库 (批量修改和删除)
修改
@Overridepublic void batchUpdateBook(List<Object[]> batchArgs) {//创建sqlString sql = "update t_book set username = ?,ustatus = ? where userid = ?";int[] rows = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("受影响的行数: " + Arrays.toString(rows));}
测试
List<Object[]> list = new ArrayList<>();//数组的顺序要和 sql 的 中的 ? 匹配Object[] o1 = {"java0000","a6","3"};Object[] o2 = {"c++1111","b7","4"};Object[] o3 = {"MySQL0101","c8","5"};list.add(o1);list.add(o2);list.add(o3);userService.batchUpdate(list);
删除
@Overridepublic void batchDeleteBook(List<Object[]> batchArgs) {String sql = "delete from t_book where userid = ?";int[] rows = jdbcTemplate.batchUpdate(sql, batchArgs);System.out.println("受影响的行数: " + Arrays.toString(rows));}
测试
List<Object[]> list = new ArrayList<>();Object[] o1 = {"3"};Object[] o2 = {"4"};Object[] o3 = {"5"};list.add(o1);list.add(o2);list.add(o3);userService.batchDelete(list);