# easy-jdbc **Repository Path**: andy521/easy-jdbc ## Basic Information - **Project Name**: easy-jdbc - **Description**: 一个简单、快速,支持高并发的jdbc,内含连接池,最新版本1.0.7beta,目前只支持MySQL数据库。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 18 - **Created**: 2017-08-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # easy-fast-jdbc 一个支持高并发的jdbc链接池,体积小、速度快,目前只支持mysql
### 特色 * user_id会自动映射成userId,无需as别名 * 执行查询后会根据sql和对象自动记录映射的字段,无需重新解析字段,查询更快 * 根据project.entities配置,自动装载Entity对象 * 可多个不同数据库jdbc同时使用,互不影响 * 访问高峰时自动增加连接数,低频时再自动释放 * 当有连接release时,如果存在已失效的连接,框架会自动补充到初始化连接数 * 日志详细记录返回的行数,列数及返回的时间和部分执行结果 ### 运行环境 * JDK(1.7+) * mysql-connector-java(5.1.25+) ### ChangeLog 点击查看更新日志 ### Discussing * 提交issue * 交流群616698275 答案easy * email:441430565@qq.com ### MySql配置 请将mysql的wait_timeout设置尽可能小,如wait_timeout=32
max_connections=1000
### jdbc.properties初始化 datasource.maxActive=16 为连接不够时,最大允许上限
easy-fast-jdbc会根据调用频率,自动增加连接
datasource.maxIdle=2 为初始化连接数
project.entities=com.test.entity.* 为包下所有类
project.entities=com.test.entity.a,com.test.entity.b 为a和b两个类
请将jdbc.properties放在src目录下,不然无法读取配置
JDBCDataSource dataSource = JDBCDataSource.getInstance();
FastSession session = FastSession.getInstence(dataSource);
### Spring初始化 ```xml ```
//Dao层
	private FastSession session;
	
	@Resource
	private JDBCDataSource dataSource;

	public void setDataSource(JDBCDataSource ds)
	{
		this.dataSource = ds;
	}

	public FastSession getSession()
	{
		if (session == null)
			session = FastSession.getInstence(dataSource);
		return session;
	}	
### 使用session
//查询列表
session.Query(GnqBrowseRecord.class, "select * from gnq_browse_record");
//查询单条
session.Single(GnqBrowseRecord.class, "select * from gnq_browse_record where browse_id=?", 1);
//查询单列
session.QueryList("select browse_id from gnq_browse_record");
//查询单值
session.getSingle("select browse_id from gnq_browse_record where browse_id=?", 1);
//查询键值对
session.QueryMap("select browse_id,browse_num from gnq_browse_record");
//增、删、改
GnqBrowseRecord gbr = new GnqBrowseRecord();
gbr.setUserId(1);
gbr.setTargetId(2);
gbr.setBrowseNum(1);
gbr.setBrowseTime(new Date());
gbr.setTargetType(0);
session.save(gbr); //保存对象
System.out.println("browse_id =========" + gbr.getBrowseId());
gbr.setBrowseId(gbr.getBrowseId());
session.update(gbr, false); //通过主键更新所有字段
session.updateNotNull(gbr); //通过主键更新不为NULL字段
session.delete(gbr); //通过所有不为NULL字段删除记录
//执行SQL
session.Execute("delete from gnq_browse_record where browse_id=?", 1);
//批量执行SQL
List sqls = new ArrayList<>();
sqls.add(Sql.parse("delete from gnq_browse_record where browse_id=?", 1));
sqls.add(Sql.parse("delete from gnq_browse_record where browse_id=?", 2));
session.execute(sqls, true); //在同一事务中执行
### 事务处理
// 批量事务处理
Connection conn = null;
try
{
	//获取事务连接
	conn = session.getConnection();
	Object obj = session.getSingle(conn, "select browse_id from gnq_browse_record where browse_id=18");
	session.Execute(conn, "delete from gnq_browse_record where browse_id=?", obj);
	conn.commit();//最后事务必须提交,否则会产生未知错误
}
catch (SQLException e)
{
	//回滚
	JDBCDataSource.rollback(conn);
	logger.error("执行事务失败", e);
}
finally
{
	// 必须关闭连接
	JDBCDataSource.close(conn);
}
### 存储过程调用方式
Map map = new HashMap();
List paramaters = new ArrayList();
paramaters.add(new ProcdureParamater(1, name));
paramaters.add(new ProcdureParamater(2, password));
paramaters.add(new ProcdureParamater(3, ip));
paramaters.add(new ProcdureParamater(4));
paramaters.add(new ProcdureParamater(5));
paramaters.add(new ProcdureParamater(6));
paramaters.add(new ProcdureParamater(7));
if (getJDBCUtils().RunProcdure("{call procManagerLogin(?,?,?,?,?,?,?)}", paramaters))
{
	int errId = paramaters.get(3).getInt();
	if(errId == 0)
	{
		map.put("userId", paramaters.get(4).getInt());
		map.put("roleId", paramaters.get(5).getInt());
		map.put("roleName", paramaters.get(6).getValue());
	}
	map.put("errId", errId);
	return map;
}
map.put("errId", 999001);
return map;
### DEMO * 直接使用的demo在test包下 * https://gitee.com/yydf/easystruts-xjcy/blob/master/demo.zip [Dao层] ### 工具生成对象 下载生成工具,打开exe文件,连接-点击数据表-保存(ctrl+s)或保存全部
### 多数据库 多个数据库,配置两个datasource即可,例如jdbc.properties,jdbc2.properties
然后分别初始化,可同时使用
JDBCDataSource dataSource = JDBCDataSource.getInstance();
JDBCDataSource dataSource2 = JDBCDataSource.getInstance("jdbc2.properties");
FastSession session = FastSession.getInstence(dataSource);
FastSession session2 = FastSession.getInstence(dataSource2);