JdbcTemplate的使用

tech2023-11-14  98

文章目录

1、简介2、具体使用2.1、前提2.2、查询 2.3、删除2.4、更新2.5、增加

1、简介

JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤。

​ JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。JdbcTemplate是Spring的一部分。JdbcTemplate处理了资源的建立和释放。他帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果。

Spring源码地址:https://github.com/spring-projects/spring-framework

在JdbcTemplate中执行SQL语句的方法大致分为3类:

execute:可以执行所有SQL语句,一般用于执行DDL语句。update:用于执行INSERT、UPDATE、DELETE等DML语句。queryXxx:用于DQL数据查询语句。

2、具体使用

2.1、前提

添加依赖 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.6.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.10.RELEASE</version> </dependency> </dependencies> applicationContext.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="com.service"/> <context:component-scan base-package="com.dao"/> <!--引入配置文件--> <context:property-placeholder location="classpath*:db.properties"/> <!--c3p0数据源--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--JdbcTemplate--> <bean id="template" class="org.springframework.jdbc.core.JdbcTemplate"> <!--JdbcTemplate需要一个数据源--> <property name="dataSource" ref="dataSource"/> </bean> </beans>

在所有的的dao中注入JdbcTemplate

@Autowired JdbcTemplate jdbcTemplate;

在所有的的service中注入dao

@Autowired private BookDao bookDao;

在Test中注入service

public static BookService getBean(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); return context.getBean("bookServiceImpl", BookService.class); }

2.2、查询

1、queryForLong返回一个long整数

API介绍

public long queryForLong(String sql) 执行查询语句,返回一个long类型的数据。

2、queryForInt返回一个int整数

API介绍

public int queryForInt(String sql) 执行查询语句,返回一个int类型的值。

3、queryForObject返回指定的数据类型

API介绍

public <T> T queryForObject(String sql, Class<T> requiredType) 执行查询语句,返回一个指定类型的数据。

具体实现

BookDaoImpl.java public Integer selectCounts() { return jdbcTemplate.queryForObject("select count(*) from ssmbuild.books", Integer.class); } BookServiceImpl.java public Integer selectCounts() { return bookDao.selectCounts(); } Test @Test public void selectCounts(){ BookService bean = getBean(); Integer integer = bean.selectCounts(); System.out.println(integer); }

4、queryForMap返回一个Map集合

API介绍

public Map<String, Object> queryForMap(String sql,@Nullable Object... args) 执行查询语句,将一条记录放到一个Map中。

具体实现

BookDaoImpl.java public Map selectById(Integer id) { return jdbcTemplate.queryForMap("select * from ssmbuild.books where bookid = ?",id); } BookServiceImpl.java public Map selectById(Integer id) { return bookDao.selectById(id); } Test @Test public void selectBookByID(){ BookService bean = getBean(); Map map = bean.selectById(2); System.out.println(map); }

5、queryForList返回一个List集合

API介绍

public List<Map<String, Object>> queryForList(String sql) 执行查询语句,返回一个List集合,List中存放的是Map类型的数据。

具体实现

BookDaoImpl.java public List<Map<String, Object>> selectAll() { return jdbcTemplate.queryForList("select * from ssmbuild.books"); } BookServiceImpl.java public List<Map<String, Object>> selectAll() { return bookDao.selectAll(); } Test @Test public void selectAll(){ BookService bean = getBean(); List<Map<String, Object>> list= bean.selectAll(); for (Map<String, Object> map : list) { System.out.println(map); } }

6、RowMapper返回自定义对象

API介绍

public <T> List<T> query(String sql, RowMapper<T> rowMapper) 执行查询语句,返回一个List集合,List中存放的是RowMapper指定类型的数据。

具体实现

BookDaoImpl.java public List<Book> selectAllTwo() { return jdbcTemplate.query("select * from ssmbuild.books", new RowMapper<Book>() { public Book mapRow(ResultSet resultSet, int i) throws SQLException { Book book = new Book(); book.setBookId(resultSet.getInt("bookid")); book.setBookName(resultSet.getString("bookname")); book.setBookCounts(resultSet.getString("bookcounts")); book.setDetail(resultSet.getString("detail")); return book; } }); }

使用JdbcTemplate对象的query方法,并传入RowMapper匿名内部类

在匿名内部类中将结果集中的一行记录转成一个Product对象

BookServiceImpl.java public List<Book> selectAllTwo() { return bookDao.selectAllTwo(); } Test @Test public void selectAllTwo(){ BookService bean = getBean(); List<Book> books = bean.selectAllTwo(); for (Book book : books) { System.out.println(book); } }

7、BeanPropertyRowMapper返回自定义对象

API介绍

public <T> List<T> query(String sql, RowMapper<T> rowMapper) 执行查询语句,返回一个List集合,List中存放的是RowMapper指定类型的数据。 public class BeanPropertyRowMapper<T> implements RowMapper<T> BeanPropertyRowMapper类实现了RowMapper接口

具体实现

BookDaoImpl.java public List<Book> selectAllThree() { return jdbcTemplate.query("select * from ssmbuild.books",new BeanPropertyRowMapper<Book>(Book.class)); } BookServiceImpl.java public List<Book> selectAllThree() { return bookDao.selectAllThree(); } Test @Test public void selectAllThree(){ BookService bean = getBean(); List<Book> books = bean.selectAllThree(); for (Book book : books) { System.out.println(book); } }

2.3、删除

具体实现

BookDaoImpl.java public int deleteBookById(Integer id) { return jdbcTemplate.update("delete from ssmbuild.books where bookid = ?",id); } BookServiceImpl.java public int deleteBookById(Integer id) { return bookDao.deleteBookById(id); } Test @Test public void deleteBookById(){ BookService bean = getBean(); int i = bean.deleteBookById(4); String message = i > 0?"删除成功":"删除失败"; System.out.println(message); }

2.4、更新

具体实现

BookDaoImpl.java public int updateBookById(Book book) { return jdbcTemplate.update("update ssmbuild.books set bookname = ? where bookid = ?",book.getBookName(),book.getBookId()); } BookServiceImpl.java public int updateBookById(Book book) { return bookDao.updateBookById(book); } Test @Test public void updateBookById(){ BookService bean = getBean(); Map map = bean.selectById(1); System.out.println("=========改之前========="); System.out.println(map); Book book = new Book(); book.setBookName("嘿嘿嘿"); book.setBookId(1); bean.updateBookById(book); Map map2 = bean.selectById(1); System.out.println("=========改之前========="); System.out.println(map2); }

2.5、增加

具体实现

BookDaoImpl.java public int addBook(Book book) { return jdbcTemplate.update("insert into ssmbuild.books (bookname,bookcounts,detail) values (?,?,?)",book.getBookName(),book.getBookCounts(),book.getDetail()); } BookServiceImpl.java public int addBook(Book book) { return bookDao.addBook(book); } Test @Test public void addBook(){ Book book = new Book(); book.setBookName("html"); book.setBookCounts("10"); book.setDetail("很棒"); int i = getBean().addBook(book); String message = i>0?"添加成功":"添加失败"; System.out.println(message); }
最新回复(0)