JDBCTemplate
JDBCTemplate是Spring提供的持久化工具类,是对JDBC的封装,简单灵活但是功能较少,不够强大;
依赖
<dependencies> <!--jdbc驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency> <!--JDBCTemplate依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.2.RELEASE</version> </dependency> <!--spring核心--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.2.RELEASE</version> </dependency> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
方法分类:
方法 | 作用 |
---|---|
execute | 执行DDL语句(程序中不常用) |
update/batchUpdate | 执行更新 |
query/queryXXX | 执行查询 |
call | 执行过程 |
update常用方法:
int update(String var1); //执行一条更新语句 不带参数 int update(String var1,Object... args); //执行一条更新语句 带参数 int[] batchUpdate(String... sql); //批量执行多条更新语句 不带参数 int[] batchUpdate(String sql, List<Object[]> batchArgs); //重复执行相同更新语句 带参数
query常用方法:
query方法分为三种
1.返回基础数据类型
T queryForObject(String sql, Class<T> var1); //查询一条数据没有参数 var1表示返回值类型 T queryForObject(String sql,Object[] var1, Class<T> var2); //查询一条数据带参数 var1 表示参数数组 var2表示返回值类型 T queryForObject(String sql,Class<T> var1,Object....arg2); //查询一条数据带参数 var1表示返回元素类型,var2表示参数数组 List<T> queryForList(String sql, Class<T> var1); //查询多条数据没有参数 var1表示返回元素类型 List<T> queryForList(String sql, Object[] var1, Class<T> var2) //查询多条数据带参数 var1 表示参数数组 var2表示返回元素类型 List<T> queryForList(String sql, Class<T> var1,Object... var2) //查询多条数据带参数 var1表示返回元素类型,var2表示参数数组 //无论是查询一条还是多条,第2和第3个方法本质是一样的,仅仅是参数位置不同,因为可变参数只能位于最后
2.返回Map类型
Map<String, Object> queryForMap(String sql) //查询一条数据没有参数 Map<String, Object> queryForMap(String sql,Object... var1) //查询一条数据带参数 List<Map<String, Object>> queryForList(String sql); //查询多条数据没有参数 List<Map<String, Object>> queryForList(String sql,Object... var1) //查询多条数据带参数
3.返回自定义类型
<T> T queryForObject(String var1, RowMapper<T> var2) //查询一条数据没有参数 <T> T queryForObject(String var1, Object[] var2, RowMapper<T> var3) //查询一条数据带参数 <T> T queryForObject(String var1, RowMapper<T> var2,Object... var3) //查询一条数据带参数 <T> List<T> query(String var1, RowMapper<T> var2) //查询多条数据没有参数 <T> List<T> query(String var1, Object[] var2, RowMapper<T> var3) //查询多条数据带参数 <T> List<T> query(String var1, RowMapper<T> var2,Object... var3) //查询多条数据带参数
RowMapper:
RowMapper是字段映射器接口,用来完成字段和实体属性的映射,JDBCTemplate会将ResultSet传入接口中,我们需要手动完成字段数据到实体属性的赋值,详见下例:
案例:
Spring配置
<?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 https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 加载jdbc属性--> <context:property-placeholder location="classpath:jdbc.properties" system-properties-mode="NEVER"/> <!-- 数据源--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="username" value="${user}"/> <property name="password" value="${password}"/> <property name="url" value="${url}"/> <property name="driverClassName" value="${driver}"/> </bean> <!--JDBCTemplate--> <bean class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> </beans>
测试代码
import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; public class MyTest { @Test public void test(){ //获得容器 ApplicationContext context = new FileSystemXmlApplicationContext("classpath:applicationContext.xml"); //获取模板对象 JdbcTemplate template = context.getBean(JdbcTemplate.class); //查询单个 // UserEntity userEntity = template.queryForObject("select *from user where id != 1", new UserMapper()); // System.out.println(userEntity); //查询多个 List<UserEntity> query = template.query("select *from user", new UserMapper()); System.out.println(query); } } //字段映射器 class UserMapper implements RowMapper<UserEntity>{ @Override public UserEntity mapRow(ResultSet resultSet, int i) throws SQLException { UserEntity user = new UserEntity(); user.setId(resultSet.getInt("id")); user.setName(resultSet.getString("username")); user.setPassword(resultSet.getString("password")); return user; } } //实体类 class UserEntity{ private Integer id; private String name,password; public Integer getId() { return id; } set/get略...... @Override public String toString() { return "UserEntity{" + "id=" + id + ", name='" + name + '\'' + ", password='" + password + '\'' + '}'; } }
其余方法请自行尝试
来源:https://www.cnblogs.com/yangyuanhu/p/12259612.html