Druid简介
Druid为监控而生的数据库连接池,它是阿里巴巴开源平台上的一个项目。Druid是Java语言中最好的数据库连接池
Druid使用步骤
- 导入jar包 druid-1.0.9.jar和 mysql-connector-java-5.1.37-bin.jar
- 定义配置文件:
2.1 是properties形式的
2.2 可以叫任意名称,可以放在任意目录下 - 加载配置文件。Properties
- 获取数据库连接池对象:通过工厂来来获取
4.1 DruidDataSourceFactory - 获取连接:getConnection
- 获取执行sql语句的对象 Statement
代码示例
druid.properties配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mysql
username=root
password=root
initialSize=5
maxActive=10
maxWait=300
package com.company;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.mysql.jdbc.util.PropertiesDocGenerator;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
import java.util.logging.ConsoleHandler;
public class Main {
public static void main(String[] args) throws Exception {
//加载配置文件
Properties propertiesObj=new Properties();
InputStream inputStreamObj=Main.class.getClassLoader().getResourceAsStream("druid.properties");
propertiesObj.load(inputStreamObj);//从输入字节流中读取属性列表(键和元素对
//获取连接池对象
DataSource dataSourceObj=DruidDataSourceFactory.createDataSource(propertiesObj);
//获取连接
Connection connectionObj=dataSourceObj.getConnection();
//获取执行sql语句的对象 Statement
PreparedStatement preparedStatementObj=connectionObj.prepareStatement("select * from t_class where class_id=? and class_name=?");
preparedStatementObj.setString(1,"1");
preparedStatementObj.setString(2,"高一");
ResultSet resObj=preparedStatementObj.executeQuery();
//5 处理结果
while (resObj.next()){
String strId=resObj.getString("class_id");
String strName=resObj.getString("class_name");
System.out.println(strId + "---" + strName);
}
preparedStatementObj.close();
connectionObj.close();
}
}
Spring JDBC
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
Spring JDBC使用步骤
1. 导入jar包
2. 创建JdbcTemplate对象。依赖于数据源DataSource
* JdbcTemplate template = new JdbcTemplate(ds);
3. 调用JdbcTemplate的方法来完成CRUD的操作
* update():执行DML语句。增、删、改语句
* queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
* 注意:这个方法查询的结果集长度只能是1,否则会报错
* queryForList():查询结果将结果集封装为list集合
* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
* query():查询结果,将结果封装为JavaBean对象
* query的参数:RowMapper
* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
* new BeanPropertyRowMapper<类型>(类型.class)
*注意:如果返回值为null有两种情况
1类中没有setter方法
2类中的字段与数据库中表的字段没有对应
* queryForObject:查询结果,将结果封装为对象
* 一般用于聚合函数的查询
代码示例
druid.properties配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mysql
username=root
password=root
initialSize=5
maxActive=10
maxWait=300
School .class
package com.company;
public class School {
private String class_id;
private String class_name;
@Override
public String toString() {
return "School{" +
"class_id='" + class_id + '\'' +
", class_name='" + class_name + '\'' +
'}';
}
public void setClass_id(String class_id) {
this.class_id = class_id;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
}
JDBCUtils .java
package cn.itcast.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* JDBC工具类 使用Durid连接池
*/
public class JDBCUtils {
private static DataSource ds ;
static {
try {
//1.加载配置文件
Properties pro = new Properties();
//使用ClassLoader加载配置文件,获取字节输入流
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//2.初始化连接池对象
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
*/
public static DataSource getDataSource(){
return ds;
}
/**
* 获取连接Connection对象
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
}
JdbcTemplateDemo .class
package com.company;
import com.company.JDBCUtils
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class JdbcTemplateDemo {
//1. 获取JDBCTemplate对象
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
/**
* 添加一条记录
*/
public void testUpdate(){
String sql = "insert into t_class(class_id,class_name) values(?,?)";
int count = template.update(sql, 3, "高三");
System.out.println(count);
}
/**
*查询id为2的记录,将其封装为Map集合
* 注意:这个方法查询的结果集长度只能是1,否则报错
*/
public void testQueryForMap(){
String sql = "select * from t_class where class_id = ?";
Map<String, Object> mapObj=template.queryForMap(sql,1);
System.out.println(mapObj);
}
/**
* 查询所有记录,将其封装为List
*/
public void testQueryForList(){
String sql = "select * from t_class";
List<Map<String, Object>> listObj=template.queryForList(sql);
for (Map<String, Object> mapObj:listObj){
System.out.println(mapObj);
}
}
/**
* 查询所有记录,将其封装为school对象的List集合
*/
public void testQuery(){
String sql = "select * from t_class";
List<School> listObj=template.query(sql, new RowMapper<School>(){
public School mapRow(ResultSet rs, int i) throws SQLException {
School schoolObj = new School();
String class_id = rs.getString("class_id");
String class_name = rs.getString("class_name");
schoolObj.setClass_id(class_id);
schoolObj.setClass_name(class_name);
return schoolObj;
}
});
for (School schoolObj:listObj){
System.out.println(schoolObj);
}
}
/**
* 查询所有记录,将其封装为school对象的List集合
*/
public void testQuery2(){
String sql = "select * from t_class";
/*
* *注意:如果返回值为null有两种情况
1类中没有setter方法
2类中的字段与数据库中表的字段没有对应
*/
List<School> listObj=template.query(sql, new BeanPropertyRowMapper<School>(School.class));
for (School schoolObj:listObj){
System.out.println(schoolObj);
}
}
/**
* 查询总记录数
*/
public void testQueryForObject(){
String sql = "select count(class_id) from t_class";
Long total=template.queryForObject(sql, Long.class);
System.out.println(total);
}
}
Main .class
package com.company;
public class Main {
public static void main(String[] args) throws Exception {
JdbcTemplateDemo jdbcTemplateDemoObj=new JdbcTemplateDemo();
//jdbcTemplateDemoObj.testQueryForMap();
//jdbcTemplateDemoObj.testQueryForList();
//jdbcTemplateDemoObj.testQuery();
//jdbcTemplateDemoObj.testQuery2();
jdbcTemplateDemoObj.testQueryForObject();
}
}