使用commons-dbutils封裝jdbc和數據庫操作

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章