简介:Jdao是一种创新的持久层解决方案。主要目的在于 减少编程量,提高生产力,提高性能,支持多数据源整合操作,支持数据读写分离,制定持久层编程规范。 灵活运用Jdao,可以在持久层设计上,减少30%甚至50%以上的编程量,同时形成持久层的统一编程规范,减少持久层错误,同时易于维护和扩展。
融合优势 JDAO框架结合了Hibernate的抽象层次和MyBatis的灵活性,旨在提供一个既强大又直观的持久层解决方案。
主要核心入口,提供以下功能:
缓存入口,支持以下功能:
读写分离操作入口,支持以下功能:
映射 SQL 与接口,支持以下功能:
# 使用 Maven 安装
<dependency>
<groupId>io.github.donnie4w</groupId>
<artifactId>jdao</artifactId>
<version>2.0.1</version>
<scope>compile</scope>
</dependency>
Jdao.init(dataSource,Jdao.MYSQL);
// dataSource 为数据源
// Jdao.MYSQL 为数据库类型
使用 Jdao 代码生成工具生成数据库表的标准化实体类。
// 数据源设置
Jdao.init(dataSource,Jdao.MYSQL);
// 读取
Hstest t = new Hstest();
t.where(Hstest.ID.GT(1));
t.limit(20,10);
List<Hstest> list = t.selects(Hstest.Id);
for (Hstest hstest : list) {
System.out.println(hstest);
}
// [SELECT SQL] select id from hstest where id> ? limit ?,? [1,10,10]
// 更新
Hstest t = new Hstest();
t.SetValue("hello world")
t.where(Hstest.ID.EQ(1));
t.update()
//[UPDATE SQL] update hstest set value=? where id=? ["hello world",1]
// 删除
Hstest t = new Hstest();
t.where(Hstest.ID.EQ(1));
t.delete()
//[DELETE SQL]delete from hstest where id = ? [1]
// 新增
Hstest hs = new Hstest();
hs.setRowname("hello world");
hs.setValue("123456789");
hs.insert();
//[INSERT SQL] insert to hstest (rowname,value) values(?,?) ["hello world","123456789"]
CRUD操作
//查询,返回单条
Hstest hs = Jdao.executeQuery(Hstest.class,"select * from Hstest order by id desc limit 1");
System.out.println(hs);
//insert
int i = Jdao.executeUpdate("insert into hstest2(rowname,value) values(?,?)", "helloWorld", "123456789");
//update
int i = Jdao.executeUpdate("update hstest set value=? where id=1", "hello");
//delete
int i = Jdao.executeUpdate("delete from hstest where id = ?", 1);
配置缓存
//绑定Hstest.class 启用缓存, 缓存时效为 100毫秒
JdaoCache.bindClass(Hstest.class,new CacheHandle(100));
Hstest t = new Hstest();
t.where(Hstest.ID.EQ(3));
Hstest hs = t.select();
System.out.println(hs);
//返回缓存数据结果
Hstest t2 = new Hstest();
t2.where(Hstest.ID.EQ(3));
Hstest hs2 = t2.select();
System.out.println(hs2);
读写分离
JdaoSlave.bindClass(Hstest.class, DataSourceFactory.getDataSourceByPostgreSql(), DBType.POSTGRESQL);
//这里主数据库为mysql,备数据库为postgreSql,Hstest读取数据源为postgreSql
Hstest t = new Hstest();
t.where(Hstest.ID.EQ(3));
Hstest hs = t.select();
System.out.println(hs);
使用 XML 映射 SQL
<!-- MyBatis 风格的 XML 配置文件 -->
<mapper namespace="io.github.donnie4w.jdao.action.Mapperface">
<select id="selectHstestById" parameterType="int" resultType="io.github.donnie4w.jdao.dao.Hstest">
SELECT * FROM hstest WHERE id < #{id} and age < #{age}
</select>
</mapper>
//初始化数据源
Jdao.init(DataSourceFactory.getDataSourceBySqlite(), DBType.SQLITE);
//读取解析xml配置
JdaoMapper.build("mapper.xml");
JdaoMapper jdaoMapper = JdaoMapper.newInstance()
Hstest hs = jdaoMapper.selectOne("io.github.donnie4w.jdao.action.Mapperface.selectHstestById", 2, 26);
System.out.println(hs);
mapper 映射为java接口
public interface Mapperface {
List<Hstest> selectAllHstest();
List<Hstest> selectHstest(int id, int age);
Hstest selectHstestByMap(Map map);
List<Hstest> selectHstestByList(int id, int age);
Hstest[] selectHstestByList(List list);
Hstest selectHstestById(int id, int age);
List<Hstest> selectHstestById(Integer id, Integer age);
Hstest1 selectHstest1(int limit);
List<Hstest1> selectHstest1(long limit);
int insertHstest1(Hstest1 hs);
int updateHstest1(Hstest1 hs);
int deleteHstest1(Hstest1 hs);
}
@Test
public void selectMapperFace() throws JdaoException, JdaoClassException, SQLException {
JdaoMapper jdaoMapper = JdaoMapper.newInstance();
Mapperface mapper = jdaoMapper.getMapper(Mapperface.class);
List<Hstest> list = mapper.selectHstestById(Integer.valueOf(5), Integer.valueOf(20));
for (Hstest hs : list) {
System.out.println(hs);
}
Hstest hstest = mapper.selectHstestById(5, 20);
System.out.println(hstest);
}