使用到的Druid数据源和工具类
数据库连接池c3p0和Druid详解
1.概述
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
2.优势
不用手动获取链接和释放资源。只关心如何定义sql语句,执行和处理
3.步骤
- 导入开发jar包
-
获取数据源(借助druid获取数据源)
-
创建JdbcTemplate对象,传入数据源
-
编写sql语句
-
调用JdbcTemplate的方法来完成CRUD的操作
4.演示
druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db3
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
demo2
package template;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.util.Map;
import java.util.Properties;
/*
手动编写JDBC Tempalte
*/
public class demo2 {
public static void main(String[] args) throws Exception {
// 加载配置文件
Properties properties = new Properties();
properties.load(demo2.class.getClassLoader().getResourceAsStream("druid.properties"));
// 获取数据源(数据库连接池对象)
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
// newJdbcRTemplate对象
JdbcTemplate tem = new JdbcTemplate(dataSource);
// 编写sql语句
String sql = "select * from account where id=2";
Map<String, Object> map = tem.queryForMap(sql);
System.out.println(map);
}
}
执行结果
6.借助druid工具类演示
druid工具类JDBCUtiles
package druid.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtiles {
private static DataSource dataSource = null;
static {
try {
// 加载配置文件
Properties properties = new Properties();
properties.load(JDBCUtiles.class.getClassLoader().getResourceAsStream("druid.properties"));
// 获取数据库连接池对象
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
// 4.获取链接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
// 5获取连接池对象
public static DataSource getDataSource() {
return dataSource;
}
// 5.释放资源
public static void close(Statement stmt, Connection conn) {
close(null, stmt, conn);
}
// 重载
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
demo1
package template;
import druid.utils.JDBCUtiles;
import org.springframework.jdbc.core.JdbcTemplate;
/*Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
* 好处:不用手动获取链接和释放资源。只关心如何定义sql语句,执行和处理
其中数据库驱动是在druid的工具类的静态方法中执行
*/
public class demo1 {
public static void main(String[] args) {
//1.创建JdbcTemplate对象(使用到工具类里面的getDataSource()方法)
JdbcTemplate tem=new JdbcTemplate(JDBCUtiles.getDataSource());
//2.编写sql语句
String sql = "INSERT INTO account VALUE(1,'quan'); ";
//执行sql语句
int update = tem.update(sql);
System.out.println("执行成功");
}
}
执行结果
7.解释JdbcTemplate几个常用方法
-
update(参数1,参数2…):执行DML语句 增、删、改语句
- 参数1:要执行的sql语句
- 参数2:占位符赋值,按照顺序从头往后
- 作用:执行增删改功能
演示
package template; import druid.utils.JDBCUtiles; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; /* 演示update方法 */ public class demo3update { public static void main(String[] args) { // 借助druid胡哦去数据源 DataSource dataSource = JDBCUtiles.getDataSource(); // 获取JDBCTemplate对象传入数据源 JdbcTemplate template = new JdbcTemplate(dataSource); // 编写sql语句 String sql = "INSERT INTO account VALUE(?,?)"; // 执行sql语句 int i = template.update(sql, 1, "江"); if (i > 0) { System.out.println("执行成功!"); } else { System.out.println("执行失败!"); } } }
输出结果
-
queryForMap(参数1,参数2):查询结果将结果集封装为map集合
- 参数1:sql语句
- 参数2:?占位符
- 作用:将列名作为key,将值作为value 将这条记录封装为一个map集合
- 注意:这个方法查询的结果集长度只能是1,也就是说只能查询封装一条信息
演示
package template; import com.alibaba.druid.pool.DruidDataSourceFactory; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; import java.util.Map; import java.util.Properties; /* 手动编写JDBC Tempalte */ public class demo2 { public static void main(String[] args) throws Exception { // 加载配置文件 Properties properties = new Properties(); properties.load(demo2.class.getClassLoader().getResourceAsStream("druid.properties")); // 获取数据源(数据库连接池对象) DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); // newJdbcRTemplate对象 JdbcTemplate tem = new JdbcTemplate(dataSource); // 编写sql语句 String sql = "select * from account where id=?"; Map<String, Object> map = tem.queryForMap(sql,2); System.out.println(map); } }
结果
-
queryForList():查询结果将结果集封装为list集合
- 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中 --List<map<String,Object>>
演示:
package template; import druid.utils.JDBCUtiles; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; import java.util.Iterator; import java.util.List; import java.util.Map; public class demo4queryforlist { public static void main(String[] args) { //获取从数据源 DataSource dataSource = JDBCUtiles.getDataSource(); //创建JDBCTemplate对象,传入数据源 JdbcTemplate template=new JdbcTemplate(dataSource); //编写sql语句 String sql="select * from account where id=?"; //使用queryforlist查寻 List<Map<String, Object>> maps = template.queryForList(sql, 1); Iterator<Map<String, Object>> iterator = maps.iterator(); while (iterator.hasNext()){ Map<String, Object> map = iterator.next(); System.out.println(map); } } }
结果
-
query(String sql, RowMapper< T> ):查询结果,将结果封装为JavaBean对象
- 参数1:sql语句
- 参数2:RowMapper new BeanPropertyRowMapper<类对象>(类对象.class)
- 一 般我们使用BeanPropertyRowMapper实现类。 可以完成数据到JavaBean的自动封装
演示:
创建account类
package dao; public class Account { int id; String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
demo4querybean.java
package template; import dao.Account; import druid.utils.JDBCUtiles; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; import java.util.Iterator; import java.util.List; public class demo4querybean { public static void main(String[] args) { //借助druid和工具列=类获取数据源 DataSource dataSource = JDBCUtiles.getDataSource(); //创建JDBCTemplate传入数据源 JdbcTemplate template=new JdbcTemplate(dataSource); //编写sql语句 String sql="select * from account where id=?"; //执行sql语句 List<Account> accounts = template.query(sql, new BeanPropertyRowMapper<Account>(Account.class), 1); Iterator<Account> iterator = accounts.iterator(); while(iterator.hasNext()){ Account accout = iterator.next(); System.out.println(accout); } } }
输出
-
queryForObject(String sql,Class class):查询结果,将结果封装为对象 --用于聚合函数查询
package template;
import druid.utils.JDBCUtiles;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
public class demo5queryForObject {
public static void main(String[] args) {
// 获取从数据源
DataSource dataSource = JDBCUtiles.getDataSource();
// 创建JDBCTemplate对象,传入数据源
JdbcTemplate template = new JdbcTemplate(dataSource);
// 查询总记录数
String sql = "select count(id) from account";
template.queryForObject(sql, Long.class);
Long total = template.queryForObject(sql, Long.class);
System.out.println(total);
}
}