JDBCTemplate

JDBCTemplate

JDBCTemplate是Spring提供的持久化工具類,是對JDBC的封裝,簡單靈活可是功能較少,不夠強大;java

依賴

<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方法分爲三種mysql

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

案例:

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

其他方法請自行嘗試sql

相關文章
相關標籤/搜索