文件目录
DruidUtils
package dao.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DruidUtils {
private static DataSource ds;
//在静态代码块完成ds初始化
static{
Properties properties=new Properties();
try {
properties.load(new FileInputStream("src\\druid.properties"));
ds= DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//编写getConnection方法
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//"关闭"连接此处close是放回连接池不是与数据库断开
public static void close(ResultSet rs, Statement statement,Connection connection){
try {
if (rs!=null){
rs.close();
}
if (rs!=null){
rs.close();
}
if (rs!=null){
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
User
成员变量要和数据库一一对应并且要使用包装类
package dao.domain;
public class User {
private Integer id;
private String name;
private String pwd;
private String sex;
private String phone;
private String address;
public User() {
}
public User(Integer id, String name, String pwd, String sex, String phone, String address) {
this.id = id;
this.name = name;
this.pwd = pwd;
this.sex = sex;
this.phone = phone;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
", sex='" + sex + '\'' +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
'}';
}
}
数据库
BasicDao
package dao.dao_;
import dao.utils.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class BasicDap <T>{//泛型指定具体类型
private QueryRunner qr=new QueryRunner();//封装对象使用
//开发通用的dml方法,针对任意的表
public int update(String sql,Object... parameters){
Connection connection=null;
try {
connection= DruidUtils.getConnection();
int update = qr.update(connection, sql, parameters);
return update;
} catch (SQLException e) {
throw new RuntimeException(e);//编译异常转换为运行异常
}finally {
DruidUtils.close(null,null,connection);
}
}
//返回多个对象(查询结果是多行),针对任意表
public List<T> queryMulti(String sql,Class<T> cls,Object... parameters){
Connection connection=null;
try {
connection= DruidUtils.getConnection();
return qr.query(connection,sql,new BeanListHandler<T>(cls),parameters);
} catch (SQLException e) {
throw new RuntimeException(e);//编译异常转换为运行异常
}finally {
DruidUtils.close(null,null,connection);
}
}
//查询单行结果 通用方法
public T querySingle(String sql,Class<T> cls,Object... parameters){
Connection connection=null;
try {
connection= DruidUtils.getConnection();
return qr.query(connection,sql,new BeanHandler<T>(cls),parameters);
} catch (SQLException e) {
throw new RuntimeException(e);//编译异常转换为运行异常
}finally {
DruidUtils.close(null,null,connection);
}
}
//查询单行单列即单值
public Object queryScalar(String sql,Object... parameters){
Connection connection=null;
try {
connection= DruidUtils.getConnection();
return qr.query(connection,sql,new ScalarHandler<>(),parameters);
} catch (SQLException e) {
throw new RuntimeException(e);//编译异常转换为运行异常
}finally {
DruidUtils.close(null,null,connection);
}
}
}
UserDao
package dao.dao_;
import dao.domain.User;
public class UserDao extends BasicDap<User>{
//1.继承BasicDao
//2.根据业务编写特有方法
}
UserDaoTest
package dao.test;
import dao.dao_.UserDao;
import dao.domain.User;
import org.junit.jupiter.api.Test;
import java.util.List;
public class UserDaoTest {
@Test
//测试UserDao
public void testUserDao(){
UserDao userDao=new UserDao();
//1.查询
List<User> users=userDao.queryMulti("select *from user where id>?",User.class,3);
System.out.println("=====查询多结果====");
for (User user:users) {
System.out.println(user);
}
//2.查询单行
User user=userDao.querySingle("select *from user where id=?",User.class,3);
System.out.println("===查询结果====");
System.out.println(user);
//3.查询单行单列
Object o=userDao.queryScalar("select name from user where id=?",5);
System.out.println("===查询单行单列值===");
System.out.println(o);
//4.dml操作 insert
int row=userDao.update("insert into user values(null,?,?,?,?,?)","张无忌","456123","男","456465","华山");
System.out.println("===dml操作===");
System.out.println(row>0?"执行成功":"对数据库无影响");
//5.dml操作 update
int row1=userDao.update("update user set name=? where name=?","张无忌","张三");
System.out.println("===dml操作===");
System.out.println(row1>0?"执行成功":"对数据库无影响");
//6.dml操作 delete
int row2=userDao.update("delete from user where name=?","张无忌");
System.out.println("===dml操作===");
System.out.println(row2>0?"执行成功":"对数据库无影响");
}
}
druid.properties配置文件
#key=value
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true
username=root
password=root
#initial connection Size
initialSize=10
#min idle connection size
maxActive=50
#max wait time (5000 mil seconds)
maxWait=5000
用到的炸包