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

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