1. 程式人生 > >利用jdbc簡單封裝一個小框架(類似DBUtils)

利用jdbc簡單封裝一個小框架(類似DBUtils)

add string url lar conn () 列名 lang con

利用jdbc寫的一個類似DBUtils的框架

package com.jdbc.orm.dbutils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import com.jdbc.orm.handler.ResultsetHand;

/** * * 功能描述:基於jdbc自己封裝的orm小框架 * */ public class DBUtils { public static String username; public static String password; public static String driverClass; public static String url; public static Connection connection; public static PreparedStatement statement; public
static ResultSet rs; static { Properties properties = new Properties(); InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("db.properties"); try { properties.load(in);// 加載數據庫的配置文件 driverClass = properties.get("jdbc.driverclass").toString(); username
= properties.get("jdbc.username").toString(); password = properties.get("jdbc.password").toString(); url = properties.get("jdbc.url").toString(); } catch (IOException e) { e.printStackTrace(); try { Class.forName(driverClass);// 加載數據庫的驅動程序 } catch (ClassNotFoundException e1) { e1.printStackTrace(); } } } /** * * 功能 :為SQL語句設置參數 * * @param sql * 輸入的sql語句 * @param params * 需要的參數 * @throws SQLException */ public static void setParams(String sql, Object... params) throws SQLException { connection = DriverManager.getConnection(url, username, password); statement = connection.prepareStatement(sql); if ( params != null && params.length > 0) { for (int i = 0; i < params.length; i++) { statement.setObject(i + 1, params[i]); } } } /** * * @功能 :根據ID查詢實體 * @param sql * @param id * @return 返回結果集 * @throws Exception */ public static ResultSet queryBeanById(String sql, int id) throws Exception { setParams(sql, id); return statement.executeQuery(); } /** * * @功能 :查詢功能 * @param sql * @param params * @return 將查詢到的結果映射到一個實體中返回 * @throws SQLException */ public static Object query(String sql, ResultsetHand rsh, Object... params) throws SQLException { setParams(sql, params); ResultSet rs = statement.executeQuery(); return rsh.handler(rs); } /** * * @功能 :增刪改功能 * @param sql * @param params * @throws SQLException */ public static int update(String sql, Object... params) throws SQLException { setParams(sql, params); return statement.executeUpdate(); } }
package com.jdbc.orm.handler;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

/**
 * @描述 : 將查詢到的結果映射到集合中
 * @author 作者 jjkang
 * @version 創建時間:2017年10月6日 下午8:04:46
 */
@SuppressWarnings("rawtypes")
public class BeanListHandler implements ResultsetHand {
    private Class clazz;

    public BeanListHandler(Class clazz) {
    this.clazz = clazz;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Object handler(ResultSet rs) {
    List list = new ArrayList();
    try {

        ResultSetMetaData metaData = rs.getMetaData();
        int columnCount = metaData.getColumnCount();
        while (rs.next()) {
        Object bean = clazz.newInstance();
        for (int i = 0; i < columnCount; i++) {
            Object object = rs.getObject(i + 1);
            String name = metaData.getColumnName(i + 1);
            Field field = clazz.getDeclaredField(name);
            field.setAccessible(true);
            field.set(bean, object);
        }
        list.add(bean);
        }
        return list;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    }

}
package com.jdbc.orm.handler;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

/**
 * @描述 :將查詢的結果映射到實體中
 * @author 作者 E-mail: [email protected]
 * @version 創建時間:2017年10月6日 下午5:45:04
 */
public class BeanHandler implements ResultsetHand {

    private Class clazz;// 將結果映射到的實體

    public BeanHandler(Class clazz) {
    this.clazz = clazz;
    }

    @Override
    public Object handler(ResultSet rs) {
    try {
        if (!rs.next()) {
        return null;
        }
        Object bean = clazz.newInstance();
        ResultSetMetaData metaData = rs.getMetaData();
        int columnCount = metaData.getColumnCount();
        for (int i = 0; i < columnCount; i++) {
        String name = metaData.getColumnName(i + 1);// 得出每一列的列名
        Object value = rs.getObject(i + 1);// 得到每一列的值
        Field field = clazz.getDeclaredField(name);// 利用反射,根據列名得到屬性對象
        field.setAccessible(true);
        field.set(bean, value);
        }
        return bean;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
    }
}
package com.jdbc.orm.junit;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.jdbc.orm.bean.Student;
import com.jdbc.orm.dbutils.DBUtils;
import com.jdbc.orm.handler.BeanHandler;
import com.jdbc.orm.handler.BeanListHandler;

/** 
* 描述 : 測試DBUtils
* @version 創建時間:2017年10月6日 下午2:40:45 
*/
public class TestDBUtils {
    DBUtils dbUtils = new DBUtils();
    @Test
    public void test(){
    System.out.println(dbUtils.driverClass);
    System.out.println(dbUtils.password);
    System.out.println(dbUtils.url);
    System.out.println(dbUtils.username);
    }
    
    @Test
    public void testSetParams() throws SQLException{
    String sql = "select name from student where id = ?";
    Object params[] = {1};
    DBUtils.setParams(sql, params);
    }
    @Test
    public void testQueryBeanById() throws Exception{
    String sql = "select id,name,chinese,english,math from student where id = ?";
    ResultSet rs=dbUtils.queryBeanById(sql, 1);
    Student student = new Student();
    
    while(rs.next()){
        student.setId(rs.getInt(1));
        student.setName(rs.getString(2));
        student.setChinese(rs.getDouble(3));
        student.setEnglish(rs.getDouble(4));
        student.setMath(rs.getDouble(5));
    }
    System.out.println(student);
    }
    
    @Test
    public void testUpdate() throws SQLException{
    String sql = "update student set name=? where id =?";
    Object[] params = {"李曉明",1};
    int rows = dbUtils.update(sql, params);
    System.out.println(rows);
    }
    
    @Test
    public void testQuery() throws Exception{
    String sql = "select id,name,chinese,english,math from student where id = ?";
    Student student = new Student();
    student = (Student) dbUtils.query(sql,new BeanHandler(Student.class), 1);
    System.out.println(student);
    }
    @Test
    public void testQuery1() throws Exception{
    String sql = "select id,name,chinese,english,math from student";
    List<Student> list = new ArrayList<>();
    list = (List<Student>) dbUtils.query(sql,new BeanListHandler(Student.class), null);
    System.out.println(list.size());
    System.out.println(list);
    }
}

利用jdbc簡單封裝一個小框架(類似DBUtils)