Spring学习笔记——JDBCTemplate
参考:【狂神说Java】Spring5最新完整教程IDEA版通俗易懂
尚硅谷-Spring5框架2020最新版教程
1. 说明
- 为了使JDBC 更加易于使用,Spring 在JDBC API 上定义了一个抽象层,以此建立一个JDBC
存取框架。 - 作为Spring JDBC 框架的核心,JDBC 模板的设计目的是为不同类型的JDBC 操作提供模
板方法,通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最
低。 - 可以将Spring 的JdbcTemplate 看作是一个小型的轻量级持久化层框架,相当于spring帮我们写好的DBUtils。
2. 环境配置
-
导入jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.7.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.5</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.7.0</version> </dependency>
-
编写数据库配置文件db.properties
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbctemplate?serverTimezone=Asia/Shanghai&useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=root
-
引入配置文件
<context:property-placeholder location="classpath:db.properties"/>
-
配置c3p0数据源
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${user}"/> <property name="password" value="${password}"/> <property name="jdbcUrl" value="${jdbcUrl}"/> <property name="driverClass" value="${driverClass}"/> </bean>
-
配置dbcp数据源
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <property name="username" value="${user}"/> <property name="password" value="${password}"/> <property name="url" value="${jdbcUrl}"/> <property name="driverClassName" value="${driverClass}"/> </bean>
-
创建JdbcTemplate 对象
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
-
获取JdbcTemplate 对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); JdbcTemplate template = (JdbcTemplate) context.getBean("jdbcTemplate");
-
创建数据库,并创建表
create database jdbctemplate; create table user( id int, name varchar(30) )
-
编写数据库映射对象
public class User { int id; String name; }
3. 操作数据库
-
执行操作
JdbcTemplate.update(String, Object...)
- 参数:(sql语句)
template.execute("insert INTO user VALUES (1,'NaClO')");
-
更新操作
JdbcTemplate.update(String, Object...)
- (sql语句,参数列表)
template.update("insert INTO test VALUES (?,?)",1,"NaClO"); template.update("delete from user where id=?",1); template.update("update user set name=? where id=?","666",1);
-
查询操作
-
查询单行
-
JdbcTemplate.queryForObject(String, RowMapper<Department>, Object...)
-
参数:(sql语句,自己编写的RowMapper,参数列表)
UserRowMapper
public class UserRowMapper implements RowMapper<User> { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); return user; } }
User user = template.queryForObject("select * from user", new UserRowMapper());
-
-
查询多行
-
JdbcTemplate.query(String, RowMapper<Department>, Object...)
-
参数:(sql语句,自己编写的RowMapper,参数列表)
List<User> userList = template.query("select * from user", new UserRowMapper());
-
-
查询单一值
-
JdbcTemplate.queryForObject(String, Class, Object...)
-
参数:(sql语句,返回值的类,参数列表)
Integer id = template.queryForObject("select id from user", Integer.class);
-
-