使用说明
Spring-jdbc
能帮助开发者在进行数据库数据交互的时候将注意力转移到SQL语句上来,关心核心业务;
Spring-jdbc
将DML及DQL进行再次封装,使得数据库的交互变得更加简单高效,还能自动释放资源;
Spring-jdbc
解决的是数据库交互问题,连接池不在其能力范围之内,需要从外面传入DataSource;
1、导包
2、准备一个DataSource
package com.yusian.pools;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class Utils {
// DataSource
private static DataSource ds;
static {
ClassLoader classLoader = Utils.class.getClassLoader();
try {
Properties pro = new Properties();
pro.load(classLoader.getResourceAsStream("druid.properties"));
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取DataSource
* @return DataSrouce
*/
public static DataSource getDataSource() {
return ds;
}
/**
* 从连接池获取连接对象
* @return 连接对象
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
if (ds == null) throw new SQLException("创建连接池失败!");
return ds.getConnection();
}
/**
* 释放查询类操作的所有资源
* @param conn 连接对象,归还到连接池
* @param stmt 查询对象
* @param retSet 结果对象
*/
public static void close(Connection conn, Statement stmt, ResultSet retSet) {
releaseCloseableObject(retSet);
releaseCloseableObject(stmt);
releaseCloseableObject(conn);
}
/**
* 释放更新类操作的所有资源
* @param conn 连接对象
* @param stmt 查询对象
*/
public static void close(Connection conn, Statement stmt) {
close(conn, stmt, null);
}
/**
* 释放AutoCloseable对象资源
* @param object 需要释放的对象
*/
public static void releaseCloseableObject(AutoCloseable object) {
if (object == null) return;
try {
object.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、基本使用
- 获取
JdbcTemplate
对象:
JdbcTemplate template = new JdbcTemplate(Utils.getDataSource());
- 获取数据,支持各种数据结构类型
// List
List<Map<String, Object>> list = template.queryForList("select * from account");
System.out.println(list);
// Map
Map<String, Object> map = template.queryForMap("select * from account where id = 1");
System.out.println(map);
// ResultSet
SqlRowSet set = template.queryForRowSet("select * from account");
System.out.println(set);
// 自定义类型,实现RowMapper接口
List<Account> accList = template.query("select * from account", (resultSet, i) -> {
Account acc = new Account(resultSet);
return acc;
});
System.out.println(accList);
// Bean,BeanPropertyRowMapper是对RowMapper的一个实现,他能根据对象的属性及set方法自动将数据库中相同的字段赋值给对象属性
List<Account> beanList = template.query("select * from account", new BeanPropertyRowMapper<>(Account.class));
System.out.println(beanList);