1 Star 0 Fork 19

质量过关 / easy-jdbc

forked from yydf / easy-jdbc 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 5.82 KB
一键复制 编辑 原始数据 按行查看 历史
yydf 提交于 2017-08-21 09:16 . update README.md

easy-fast-jdbc

一个支持高并发的jdbc链接池,体积小、速度快,目前只支持mysql

特色

  • user_id会自动映射成userId,无需as别名
  • 执行查询后会根据sql和对象自动记录映射的字段,无需重新解析字段,查询更快
  • 根据project.entities配置,自动装载Entity对象
  • 可多个不同数据库jdbc同时使用,互不影响
  • 访问高峰时自动增加连接数,低频时再自动释放
  • 当有连接release时,如果存在已失效的连接,框架会自动补充到初始化连接数
  • 日志详细记录返回的行数,列数及返回的时间和部分执行结果

运行环境

  • tomcat(7.0.69+)
  • JDK(1.7+)
  • mysql-connector-java(5.1.25+)

ChangeLog

点击查看更新日志

Discussing

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初始化

<bean id="dataSource" class="com.geneqiao.jdbc.pool.JDBCDataSource"	destroy-method="close">
	<property name="driverClassName" value="com.mysql.jdbc.Driver" />
	<property name="url" value="jdbc:mysql://localhost:3306/fastadmin" />
	<property name="username" value="test" />
	<property name="password" value="123456" />
	<property name="maxIdle" value="1" />
	<property name="maxActive" value="8" />
</bean>
//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

工具生成对象

下载生成工具,打开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);
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/ismartyx/easy-jdbc.git
git@gitee.com:ismartyx/easy-jdbc.git
ismartyx
easy-jdbc
easy-jdbc
master

搜索帮助