码迷,mamicode.com
首页 > 数据库 > 详细

Myjdbc反向代理简易框架

时间:2016-04-16 07:03:04      阅读:839      评论:0      收藏:0      [点我收藏+]

标签:

  源码地址:https://github.com/beijing-penguin/Myjdbc

  我为什么要写这个Myjdbc?

  毕业后的一段时间一直在用hibernate,和mybatis框架,后来感觉这种框架太繁琐,比如,现在要用java读取客户给的一个excel表格,读取里面的数据后插入到数据库,这样一个小的需求,我都需要配置hibernate文件、配置mybatis的文件,对我来说,太麻烦了,因为我是懒人,不喜欢太多的东西,只喜欢简单易用就可以。

  我记得有一次用hibernate框架管理多数据源的时候,出现一个问题(人为问题),当第一个连接提交后,第二个提交就会报错,那个时候怎么办,项目紧,人手不够,苦苦百度寻找不到答案,那么只能干坐着了吗?或者去找他人帮忙?这得花费多少人力和财力?我当年学hibernate又花了多少时间?等等。总之第三方框架一旦出错,就意味着找不到根本原因,很难调试。在我的Myjdbc中,调试将变得非常简单。

  聊聊我的Myjdbc

  我很高兴,我昨天在群里告知各位群友后,能够得到某些群友的反馈,说想研究一下(或者看看)我的框架。其实,如果说我的框架是需要"研究"后才能用的话,那么说明,我设计失败了。jdbc的框架,有那么多的人封装多,为什么我还要造轮子,我是个懒人,我更加不想造轮子,我只想创新一个开发思想,或者说我只想快速开发,完成项目,然后喝着饮料,玩着手机坐在公司潇潇洒洒,即便出现bug,我也能秒秒钟定位问题的根本原因,并解决。那么为此MyJdbc诞生了,一个只属于自己框架,也是属于每个人自己的框架。。框架功能:数据库连接与数据库操作(增删改查),提供多数据源管理和多数据源下的弱事务操作(提交和回滚)。框架优点:高度灵活可扩展,可复用的组件,简单易用,可自行定义其他功能,非常方便的调试。框架缺点:1,不支持动态sql,2,暂时不支持分表分库,正在开发中......3,

  Myjdbc如何使用及有哪些特点

  建议,开发时,尽量拷贝源码到项目中使用。上线后稳定下来,可以考虑打包成Myjdbc.jar

  要了解清楚怎么去调试和如何使用,首先请看我设计的目录结构

  技术分享

anno里是注解类,

config是全局的jdbc的配置,任何配置都可以在这里定义,比如是否在执行sql前打印sql日志?

core包,就是封装了原始的jdbc操作,且任何操作类的方法都只有3个参数,比如下面这段DeleteOper.java的源码,

/**
 * 删除操作
 * @author dc
 * @time 2015-8-17
 */
public class DeleteOper extends OperSuper{
    private static DeleteOper deleteOper = new DeleteOper();
    public static DeleteOper getInstance(){
        return deleteOper;
    }
	public  int delete(Connection conn,String sql,Object[] params) throws Exception{
		return super.preparedAndExcuteSQL(conn, sql, params);
	}
}

如果我封装的这段代码还不满足你的公司的项目需求,请自行写个方法,但是有且只有3个参数,如果3个参数不够,请及时给我反馈,并说明原因。

entity包,是作为sql元素相关信息的临时媒介。比如可以用来保存sql字符串和这个字符串所对象参数数组。

因为java语法并不支持执行一个方法,返回两个参数,就像这样的形式Object sql,param = getUser()这样的形式(lua语言支持)。

hepler包,就相当于最表面的应用级的工具,可以理解为view层。作为将底层方法透明可见的一种方式

init包。则为jdbc在前可以选择性执行init初始化的操作工具类在这个包下,比如需要加载xml文件中定义好的sql文件

utils包下面,目前主要定义的有反射获取方法名,java类型匹配及转化等工具。

 

使用案例如下面这段代码

package test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dc.jdbc.core.ConnectionManager;
import org.dc.jdbc.helper.DBHelper;
import org.junit.Test;

public class JDBCTest {
    private static DBHelper accDBHelper = new DBHelper(Configure.accSource);
    private static DBHelper testDBHelper = new DBHelper(Configure.testSource);
    @Test
    public void select(){
        try {
            ConnectionManager.isTransaction.set(false);
            /*start*/
            Map<String,Object> map = testDBHelper.selectOne("select * from user limit 1");
            List<Map<String,Object>> mapList = testDBHelper.selectList("select * from user");
            /*end*/
            Map<String,Object> map_WithParam1 = testDBHelper.selectOne("select * from user where name=? age=? limit 1","dc",20);
            User user = testDBHelper.selectOne("select name,age from user where name=? age=? limit 1",User.class,"dc",20);
            //只返回年龄
            int age = testDBHelper.selectOne("select age from user where name=? age=? limit 1",Integer.class,"dc",20);
            String name = testDBHelper.selectOne("select name from user where name=? age=? limit 1",String.class,"dc",20);
            Map<String,Object> map_WithParam1_1 = testDBHelper.selectOne("select * from user where name=? age=? limit 1",new Object[]{"dc",20});
            
            //传入Map
            Map<String,Object> mapParams = new HashMap<String, Object>();
            mapParams.put("name", "dc");
            mapParams.put("age", 12);
            Map<String,Object> map_WithParam1_2 = testDBHelper.selectOne("select * from user where name=#{name} age=#{age} limit 1",mapParams);
            Map<String,Object> map_WithParam1_2_1 = testDBHelper.selectOne("$user.getOneUser",mapParams);
            
            //传入对象,也可以对象和Map一起作为参数传入方法
            User userObj = new User();
            userObj.setName("dc");
            userObj.setAge(12);
            Map<String,Object> map_WithParam1_3 = testDBHelper.selectOne("select * from user where name=#{name} age=#{age} limit 1",userObj);
            List<Map<String,Object>> mapList_withParam1 = testDBHelper.selectList("select * from user");
            List<User> mapList_withParam1_1 = testDBHelper.selectList("select name,age from user",User.class);
            List<String> mapList_withParam1_2 = testDBHelper.selectList("select name from user",String.class);
            List<Integer> mapList_withParam1_3 = testDBHelper.selectList("select name from user",Integer.class);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            ConnectionManager.closeConnection();
        }
    }
    @Test
    public void insert(){
        ConnectionManager.isTransaction.set(true);
        try {
            testDBHelper.insert("insert into user(name,age) values(?,?)", "dc",12);
            ConnectionManager.commit();
        } catch (Exception e) {
            e.printStackTrace();
            ConnectionManager.rollback();
        }finally{
            ConnectionManager.closeConnection();
        }
    }
}
class User{
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

 

Myjdbc反向代理简易框架

标签:

原文地址:http://www.cnblogs.com/momo-note/p/5397485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!