JDBCUtils
package com.zjx.utils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
* 数据库工具类
* @author zjx
* @date 2020/5/26 23:08
*/
public class JdbcUtils {
private static DruidDataSource dataSource;
static {
try {
Properties properties = new Properties();
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
properties.load(in);
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 从数据库连接池中获取链接
* @return
*/
public static Connection getConnection(){
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 把连接放回连接池中
* @param conn
*/
public static void close(Connection conn){
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
BaseDao
package com.zjx.dao.impl;
import com.zjx.utils.JdbcUtils;
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;
/**
* BaseDao
* @author zjx
* @date 2020/5/26 23:50
*/
public abstract class BaseDao {
//用于执行sql语句
private QueryRunner queryRunner = new QueryRunner();
/**
* 用于执行insert update delete的sql语句
* @return
*/
public int update(String sql,Object...args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.update(conn,sql,args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn);
}
return -1;
}
/**
* 查询一个用户
* @param <T> 返回一个用户
* @return
*/
public <T> T queryForOne(Class<T> type,String sql,Object...args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new BeanHandler<T>(type),args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn);
}
return null;
}
/**
* 查询全部数据
* @param <T> 返回全部用户
* @return
*/
public <T> List<T> queryForList(Class<T> type, String sql, Object...args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new BeanListHandler<T>(type),args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn);
}
return null;
}
/**
* 用于执行查询结果是但行单列的情况
* @param sql sql语句
* @param args 对应的参数值
* @return 返回结果
*/
public Object queryForSingleValue(String sql,Object...args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new ScalarHandler(),args);
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.close(conn);
}
return null;
}
}
例如具体实现类
package com.zjx.dao.impl;
import com.zjx.dao.UserDao;
import com.zjx.pojo.User;
/**
* UserDao具体实现类
* @author zjx
* @date 2020/5/27 0:01
*/
public class UserDaoImpl extends BaseDao implements UserDao {
/**
* 保存用户
* @param user 需要保存的用户
* @return 返回影响行数
*/
public int saveUser(User user) {
String sql = "insert into t_user(username,password,email) VALUES(?,?,?) ";
return update(sql,user.getUsername(),user.getPassword(),user.getEmail());
}
/**
* 根据用户名和密码查询用户
* @param username 用户名
* @param password 密码
* @return 返回用户
*/
public User queryUserByUserNameAndPassword(String username, String password) {
String sql = "select * from t_user where `username` = ? and `password` = ? ";
return queryForOne(User.class,sql,username,password);
}
/**
* 根据用户名查询用户
* @param username 用户名
* @return 返回用户
*/
public User queryUserByUserName(String username) {
String sql = "select * from t_user where `username` = ? ";
return queryForOne(User.class,sql,username);
}
}