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 | 執行過程 |
int update(String var1); //執行一條更新語句 不帶參數 int update(String var1,Object... args); //執行一條更新語句 帶參數 int[] batchUpdate(String... sql); //批量執行多條更新語句 不帶參數 int[] batchUpdate(String sql, List<Object[]> batchArgs); //重複執行相同更新語句 帶參數
query方法分爲三種mysql
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個方法本質是同樣的,僅僅是參數位置不一樣,由於可變參數只能位於最後
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) //查詢多條數據帶參數
<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是字段映射器接口,用來完成字段和實體屬性的映射,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 + '\'' + '}'; } }
其他方法請自行嘗試sql