JDBCTemplate
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 + '\'' +
'}';
}
}
其余方法请自行尝试