Jdao v2.0.1 发布:革新持久层编程,提升开发效率
简介:Jdao是一种创新的持久层解决方案。主要目的在于 减少编程量,提高生产力,提高性能,支持多数据源整合操作,支持数据读写分离,制定持久层编程规范。 灵活运用Jdao,可以在持久层设计上,减少30%甚至50%以上的编程量,同时形成持久层的统一编程规范,减少持久层错误,同时易于维护和扩展。
核心价值:
- 显著提升生产力: 减少30%-50%的编程工作量。
- 统一编程规范: 降低出错率,简化维护流程。
- 高性能: 支持高效序列化,速度提升近10倍,数据体积减小至20%。
- 多数据源整合: 支持数据读写分离及灵活的数据源管理。
- 高效安全的缓存机制: 查询效率提高400倍以上。
- 易于理解和使用: 即使初次接触也能迅速上手。
关键特性:
- 自动化表映射: 自动生成标准化实体类,类似Thrift/Protocol Buffers。
- 高效序列化: 实体类内置高速序列化机制。
- 数据读写分离: 支持多数据源配置,灵活管理读写负载。
- 智能缓存管理: 细致控制缓存策略,包括缓存时效,数据回收机制。
- 广泛兼容: 兼容所有遵循JDBC标准的数据库。
- 高级功能: 包括事务管理、存储过程和批处理等数据库高级功能
- SQL文件映射: 类似MyBatis,支持SQL与业务逻辑分离。
解决Hibernate与MyBatis痛点的新方案
- Hibernate普遍认为存在的问题
- 过度封装:hibernate提供了一层高级的抽象(包括HQL),这有助于开发者专注于业务逻辑而不是底层的SQL,这是一种更高级的编程模型 但它高度自动化虽然减少了对SQL的理解需求,同时却也掩盖底层数据库的具体行为,这可能导致性能瓶颈难以定位和优化
- 复杂性:配置和学习曲线陡峭,对于大型项目可能引入不必要的复杂度,尤其是当需要进行细粒度控制时。
- 性能问题:反射和代理机制在高并发场景下可能影响性能,尤其是在大规模数据处理时。
- MyBatis 普遍认为存在的问题
- SQL的维护:MyBatis 提供了通过 XML 配置文件将 SQL 与 Java 代码分离的功能,这种方式提高了灵活性,使开发者可以直接编写和优化 SQL。然而,将所有 SQL 都与代码分离,可能会导致大量的SQL配置。这无疑增加了配置的复杂度和维护的工作量。特别是在团队协作环境中, 过多的SQL或Xml文件还可能引发版本管理和合并冲突的问题。
- 重复工作:在 MyBatis 中,每个 DAO 都需要编写相似的 SQL 语句和结果映射逻辑。这种重复性工作不仅增加了开发时间,还容易引入错误,导致代码维护的复杂性增加。尤其是在处理常见的 CRUD 操作时,重复编写相似的 SQL 语句显得非常低效。
JDAO 的创新解决方案
融合优势 JDAO框架结合了Hibernate的抽象层次和MyBatis的灵活性,旨在提供一个既强大又直观的持久层解决方案。
-
- 标准化映射实体类,处理单表CRUD操作:90%以上的数据库单表操作,可用通过实体类操作完成。这些对单表的增删改查操作,一般不涉及复杂的SQL优化,由实体类封装生成,可以减少错误率,更易于维护。 利用缓存,读写分离等机制,在优化持久层上,更为高效和方便 标准化实体类的数据操作格式并非简单的java对象函数的拼接,而是更类似SQL操作的对象化,使得操作上更加易于理解。
- 复杂SQL的执行:在实践中发现,复杂SQL,特别是多表关联的SQL,通常需要优化,这需要对表结构,表索引性质等数据库属性有所了解。 而将复杂SQL使用 java对象进行拼接,通常会增加理解上的难度。甚至,开发者都不知道对象拼接后的最终执行SQL是什么,这无疑增加了风险和维护难度。 因此Jdao在复杂SQL问题上,建议调用Jdao的CURD接口执行,Jdao提供了灵活的数据转换和高效的javaBean映射实现,可以避免过渡使用反射等耗时的操作。
- 兼容myBatis映射文件: 对于复杂的sql操作,jdao提供了相应的crud接口。同时也支持通过xml配置sql进行接口映射调用,这点与mybatis特性相似,区别在于mybatis需要映射所有SQL操作。 而Jdao虽然提供了完整的sql映射接口,但是建议只映射复杂SQL,或操作部分标准实体类无法完成的CURD操作。 jdao的SQL配置文件参考mybatis配置文件格式,并实现新的解析器,使得配置参数在类型上的容忍度上更高,更灵活。(具体可以参考文档)
快速入门:
程序简单介绍
使用Jdao,所有功能只需要4个入口,分别为:
1. Jdao
主要核心入口,提供以下功能:
- 设置数据源
- SQL CRUD 函数
2. JdaoCache
缓存入口,支持以下功能:
- 绑定或移除包、类等属性,开启或移除它们的查询缓存
3. JdaoSlave
读写分离操作入口,支持以下功能:
- 绑定或移除包、类等属性,开启或移除它们的读写分离操作
4. JdaoMapper
映射 SQL 与接口,支持以下功能:
- 直接调用 Jdao 接口操作 SQL
- 通过 XML 文件进行 SQL 映射
快速入门
1. 安装 jdao依赖包
# 使用 Maven 安装 <dependency> <groupId>io.github.donnie4w</groupId> <artifactId>jdao</artifactId> <version>2.0.1</version> <scope>compile</scope> </dependency>
2. 配置数据源
Jdao.init(dataSource,Jdao.MYSQL); // dataSource 为数据源 // Jdao.MYSQL 为数据库类型
3. 生成表标准化实体类
使用 Jdao 代码生成工具生成数据库表的标准化实体类。
4. 实体类增删改查等操作
// 数据源设置 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"]
5. Jdao
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);
6. JdaoCache
配置缓存
//绑定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);
7. JdaoSlave
读写分离
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);
8. JdaoMapper
使用 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); }
更多详细信息和实践示例,请查阅 Jdao使用文档

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Electron v31.3.1 发布,跨平台桌面应用开发工具
Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台的桌面应用程序。它基于 Node.js 和 Chromium,被 Atom 编辑器和许多其他应用程序使用。Electron 兼容 Mac、Windows 和 Linux,可以构建出三个平台的应用程序。 Electron v31.3.1更新内容如下: Fixes 修复了在运行 14.4 或更高版本的 macOS 上调用desktopCapturer.getSources会导致不可调整大小的窗口可调整大小的问题。#43044 修复了使用 Node.js eadable streams作为自定义协议处理程序的响应主体时发生的资源泄漏问题。#43071 Other Changes 修复了在 Windows 上删除通知时可能发生的崩溃问题。#43061 将 Chromium 更新至 126.0.6478.185。#43027 更新说明:https://github.com/electron/electron/releases/tag/v31.3.1
- 下一篇
图床管理和上传工具 PicList 2.9.2 发布,新增自定义图床
PicList是一款高效的云存储和图床平台管理工具,在PicGo的基础上经过深度的二次开发,不仅完整保留了PicGo的所有功能,还增添了许多新的feature。例如相册支持同步云端删除文件,内置图床额外添加了WebDav、本地图床和SFTP等。PicList同时增加了完整的云存储管理功能,包括云端目录查看、文件搜索、批量上传下载和删除文件,复制多种格式文件链接和图片/markdown/文本/视频预览等,另外还有更加强大的相册和多项功能新增或优化。 开源地址和软件官网 Github: https://github.com/Kuingsmile/PicList Gitee: https://gitee.com/kuingsmile/PicList 软件官网:https://piclist.cn 下载地址 MacOS PicList-2.9.2-arm64.dmg PicList-2.9.2-x64.dmg PicList-2.9.2-universal.dmg Windows PicList-Setup-2.9.2-ia32.exe PicList-Setup-2.9.2-x64.exe ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19