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);
}
}