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 + '\'' +
                '}';
    }
}

其余方法请自行尝试

posted @ 2020-02-04 15:26  CoderJerry  阅读(584)  评论(0编辑  收藏  举报