Java的ORM框架和DAO框架如何进行Fast-Dao
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇文章给大家分享的是有关Java的ORM框架和DAO框架如何进行Fast-Dao ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。极·简
千家信息网最后更新 2025年12月03日Java的ORM框架和DAO框架如何进行Fast-Dao
本篇文章给大家分享的是有关Java的ORM框架和DAO框架如何进行Fast-Dao ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
极·简化DAO操作,面向对象的数据库操作方式, 大幅度提高编码效率
支持自定义SQL
支持Spring事务管理和手动事务
支持分布式缓存和本地缓存,支持数据在增删改后主动刷新缓存
示例
User user = UserFastDao.create().dao().insert(user); //增,新增成功后主键会在对象中设置Integer delCount = UserFastDao.create().id(1).dao().delete(); //删,可以选择逻辑删除和物理删除Integer updateCount = UserFastDao.create().id(1).dao().update(user); //改,操作简单,条件丰富PageInfopage = UserFastDao.create().dao().findPage(1, 10); //查,分页查询
1. 框架安装
1.1 Maven地址
com.fast-dao fast-dao LATEST
1.2 框架配置
/** * 字段驼峰转换 例 user_name = userName 默认开启 */FastDaoConfig.openToCamelCase();/** * 设置SQL日志打印,默认关闭 * 参数1: 日志打印级别 DEBUG,INFO,OFF * 参数2: 是否打印详细SQL日志 * 参数3: 是否打印SQL执行结果 */FastDaoConfig.openSqlPrint(SqlLogLevel.INFO,true, true);/** * 开启自动对数据 新增操作 进行创建时间设置 * 参数1: 需要设置创建时间的字段名 */FastDaoConfig.openAutoSetCreateTime("create_time");/** * 开启自动对数据 更新操作/逻辑删除操作 进行更新时间设置 * 参数1: 需要设置更新时间的字段名 */FastDaoConfig.openAutoSetUpdateTime("update_time");/** * 开启逻辑删除功能,开启后会对逻辑删除标记的数据在 更新|删除|查询 时进行保护,可通过模板进行单次操作逻辑删除保护的关闭 * 参数1: 逻辑删除字段名 * 参数2: 逻辑删除标记默认值 */FastDaoConfig.openLogicDelete("deleted", Boolean.TRUE);/** * 设置全局默认缓存时间,两种缓存模式(本地缓存,Redis缓存),支持缓存的自动刷新<更新,删除,新增>后会自动刷新缓存的数据 * Reids缓存需要进行配置 * 参数1: 默认缓存时间 * 参数2: 默认缓存时间类型 */FastDaoConfig.openCache(10L, TimeUnit.SECONDS);/** * 数据源配置,Spring环境可无需设置可自动识别 */FastDaoConfig.dataSource(dataSource);/** * redis缓存配置,Spring环境可无需设置可自动识别 */FastDaoConfig.redisConnectionFactory(redisConnectionFactory);1.3 文件生成
FileCreateConfig config = new FileCreateConfig();/** * 设置数据库连接信息 * @param url 数据库连接 * @param user 用户名 * @param password 密码 * @param driverClass 数据库驱动 */config.setDBInfo("jdbc:mysql://IP:端口/数据库?useUnicode=true&characterEncoding=utf-8&useInformationSchema=true","账号","密码","驱动(例:com.mysql.cj.jdbc.Driver)");/** * 生成模板的包路径 * @param basePackage 包路径地址 xxx.xxx.xxx */config.setBasePackage("xxx.xxx.xxx");/** * 需要生成的模板文件类型,使用FileCreateConfig.CodeCreateModule枚举,多个用逗号隔开 * @param modules 模板文件类型 */config.setNeedModules(FileCreateConfig.CodeCreateModule.Base);/** * 是否过滤表前缀信息 * @param prefix 生成文件时候是否过滤表前缀信息,ord_orders = orders * @param prefixFileDir 是否通过前缀信息生成不同的文件目录,ord_orders 会为将orders生成的模板存储在ord目录下 * @param prefixName 过滤指定前缀,如果不指定传 null */config.setPrefix(false,false,null);/** * 是否使用Lombok插件注解 * @param useLombok 默认false */config.setUseLombok(false);/** * 是否在DTO上生成Swagger2注解 * @param useDTOSwagger2 默认false */config.setUseDTOSwagger2(false);/** * 是否对字段和生成的对象进行下划线转换,如 product_sku = ProductSku * @param underline2CamelStr 默认true */config.setUnderline2CamelStr(true);/** * 是否覆盖旧文件 * @param replaceFile 默认true */config.setReplaceFile(true);/** * 需要生成的表名称 * @param tables 多个表用逗号隔开,如果需要生成数据库中所有的表,参数为all */config.setCreateTables("all");/** * 如果是多模块项目,需要使用此项 * @param childModuleName 指定在哪个模块下创建模板文件 *///config.setChildModuleName("模块名称");//生成代码TableFileCreateUtils.create(config);2. 使用说明
//使用示例FastUserTestFastDAO query = new FastUserTestFastDAO();query.userName().likeRight("张");query.age().less(30);query.createTime().orderByDesc();List userList = query.dao().findAll(); 2.1 条件设置
//文件生成对象UserFastDao fastDao = new UserFastDao();
| 功能 | 方法 | 示例 |
|---|---|---|
| 相等条件设置 | fastDao.fieldName(参数...) fastDao.fieldName().notValEqual(参数) | fastDao.userName(张三,李四)fastDao.userName().notValEqual("张三") |
| 模糊匹配条件设置 | fastDao.fieldName().like(参数) fastDao.fieldName().likeLeft(参数) fastDao.fieldName().likeRight(参数) fastDao.fieldName().notLike(参数) fastDao.fieldName().notLikeLeft(参数) fastDao.fieldName().notLikeRight(参数) | fastDao.userName().like("张")fastDao.userName().likeLeft("张")fastDao.userName().likeRight("三")fastDao.userName().notLike("张")fastDao.userName().notLikeLeft("张")fastDao.userName().notLikeRight("三") |
| IN条件设置 | fastDao.fieldName().in("参数1"...) fastDao.fieldName().notIn("参数1"...) | fastDao.userName().in("张三","李四")fastDao.userName().notIn("张三","李四") |
| 范围条件设置 | fastDao.fieldName().between(min, max) fastDao.fieldName().notBetween(min, max) | fastDao.age().between(20, 30)fastDao.age().notBetween(20, 30) |
| 大于条件设置 | fastDao.fieldName().greater(参数) | fastDao.age().greater(30) |
| 大于等于条件设置 | fastDao.fieldName().greaterOrEqual(参数) | fastDao.age().greaterOrEqual(30) |
| 小于条件设置 | fastDao.fieldName().less(参数) | fastDao.age().less(10) |
| 小于等于条件设置 | fastDao.fieldName().lessOrEqual(参数) | fastDao.age().lessOrEqual(10) |
| IsNull条件设置 | fastDao.fieldName().isNull() | fastDao.userName().isNull() |
| NotNull条件设置 | fastDao.fieldName().notNull() | fastDao.userName().notNull() |
| 排序设置-升序 | fastDao.fieldName().orderByAsc() | fastDao.age().orderByAsc() |
| 排序设置-降序 | fastDao.fieldName().orderByDesc() | fastDao.age().orderByDesc() |
| 对象条件设置 | fastDao.equalObject(对象) | User user = new User;user.setName("张三");fastDao.equalObject(user ) |
| 查询指定字段设置 | fastDao.fieldName().showField() | 执行查询操作时只查询指定字段,可设置多个fastDao.id().showField();fastDao.userName().showField(); |
| 过滤字段设置 | fastDao.fieldName().hideField() | 查询操作时不查询指定字段,可设置多个fastDao.password().hideField();fastDao.mail().hideField(); |
| 字段去重复设置 | fastDao.fieldName().distinctField() | fastDao.userName().distinctField() |
| 字段去求和设置 | fastDao.fieldName().sumField() | fastDao.age().sumField() |
| 字段去求平均值设置 | fastDao.fieldName().avgField() | fastDao.age().avgField() |
| 字段去求最小值设置 | fastDao.fieldName().minField() | fastDao.age().minField() |
| 字段去求最大值设置 | fastDao.fieldName().maxField() | fastDao.age().maxField() |
| 字段自定义更新设置 | fastDao.fieldName().customizeUpdateValue() | 等同 age=age+5 同时可设置其他更新条件或更新参数 fastDao.age().customizeUpdateValue().thisAdd("#{age}",Collections.singletonMap("age",5)).dao().update(null) |
| 自定义SQL条件设置 | fastDao.andSql(SQL语句,参数) fastDao.orSql(SQL语句,参数) fastDao.sql(SQL语句,参数) | 会在WHERE后拼接自定义SQL语句 如果有占位参数需要使用 #{参数名} 声明 传递参数MAP集合put(参数名,参数值) Mapparams.put("userName", "张三");fastDao.andSql("userName = #{userName}",params) |
| 关闭逻辑删除保护 | fastDao.closeLogicDeleteProtect() | 会对本次执行进行逻辑删除保护关闭 关闭后所有操作会影响到被逻辑删除标记的数据 |
| OR条件设置 | fastDao.fieldName().or() | 指定字段OR条件设置 例: 条件为姓名等于张三或为null fastDao.userName().valEqual("张三").or().isNull() |
2.2 Dao执行器
Dao执行器调用:
//文件生成对象FastDaodao = UserFastDao.create().dao();
执行器方法:
| 说明 | 方法名 | 示例 |
|---|---|---|
| 新增 | Pojo insert(Pojo pojo) | 新增一个用户,新增成功后会进行对象主键字段赋值User user = UserFastDao.create().dao().insert(user) |
| 查询单条数据 | Pojo findOne() | 查询用户名为张三的信息User user = UserFastDao.create().userName("张三").dao().findOne() |
| 查询多条数据 | List | 查询年龄在20-30间的所有用户List |
| 查询数量 | Integer findCount() | 查询一共有多少用户Integer count = UserFastDao.create().dao().findCount() |
| 分页查询 | PageInfo | 分页查询用户,并对年龄进行排序PageInfo |
| 更新数据,对象中参数为空的属性不进行更新 | Integer update(Pojo pojo) | 更新姓名为张三和李四的用户Integer count = UserFastDao.create().userName().in("张三","李四").dao().update(user) |
| 更新数据,对象中参数为空的属性也进行更新 | Integer updateOverwrite(Pojo pojo) | 更新年龄小于30,并且姓张的用户UserFastDao fastDao = UserFastDao.create();fastDao.age().less(30);fastDao.userName().like("张");Integer count = fastDao.updateOverwrite(user) |
| 通过条件物理删除 如果启动了逻辑删除功能 本操作会自动将数据删除标记修改,不会进行物理删除 除非关闭逻辑删除保护 逻辑删除配置 FastDaoConfig.openLogicDelete("deleted",true); 关闭逻辑删除保护方式请参考条件设置 重要!!!如果不进行设置将使用物理删除方式 | Integer delete() | 删除年龄大于80或为null的用户Integer count = UserFastDao.create().age().greater(80).or().isNull().delete() |
2.3 自定义SQL
多表等复杂SQL操作,可以使用自定义SQL执行器实现,框架会自动进行对象和表进行映射
如果有参数需要使用 #{参数名} 声明,传递参数MAP集合中put(参数名,参数值)
FastCustomSqlDao.create(Class, SQL语句, 参数)
//例:String sql = "SELECT * FROM user WHERE `user_name` LIKE #{userName}";HashMap params = new HashMap<>();params.put("userName","%张亚伟%");List all = FastCustomSqlDao.create(User.class, sql, params).findAll(); 2.4 缓存使用
开启缓存功能后,可以Bean添加注解的方式启用缓存
/** * Redis缓存 * 当进行使用此框架模板进行操作新增,更新,删除操作时,会自动刷新Redis缓存中的数据 * 默认参数为框架设置的缓存时间和类型 * 缓存可选参数 * FastRedisCache(Long 秒) 如@FastRedisCache(60L) 缓存60秒 * FastRedisCache(cacheTime = 时间,cacheTimeType = TimeUnit) 如@FastRedisCache(cacheTime =1L,cacheTimeType = TimeUnit.HOURS) 缓存1小时 */@FastRedisCache/** 1. 内存缓存 2. 当开启缓存并操作对象配置此注解时,会将查询到的数据缓存到本地中 3. 当进行使用此框架模板进行操作新增,更新,删除操作时,会自动刷新内存中缓存的数据 4. 默认参数为框架设置的缓存时间和类型 5. 缓存可选参数 6. FastStatisCache(Long 秒) 如@FastStatisCache(60L) 缓存60秒 7. FastStatisCache(cacheTime = 时间,cacheTimeType = TimeUnit) 如@FastStatisCache(cacheTime =1L,cacheTimeType = TimeUnit.HOURS) 缓存1小时 */@FastStatisCache
2.5 数据源切换
可以在任意一次执行时进行数据源更换,更换数据源只对当前线程影响
//例FastDaoConfig.dataSource(getDataSource());//更换全局数据源FastDaoConfig.dataSourceThreadLocal(getDataSource());//更换本线程数据源private static DataSource getDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC"); dataSource.setUsername("root"); dataSource.setPassword("123456"); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); return dataSource;}2.6 切面
使用切面可以进行很多自定义操作,比如读写分离,CRUD时候添加参数,权限验证等
2.6.1 实现FastDaoExpander接口
public class DemoExpander implements FastDaoExpander { /** * @param param 封装了DAO所有的执行参数 * @return 是否执行 */ @Override public boolean before(FastDaoParam param) { System.out.println("DAO执行前"); return true; } /** * @param param 封装了DAO所有的执行参数 */ @Override public void after(FastDaoParam param) { System.out.println("DAO执行后"); } @Override public List occasion() { //配置DAO切面执行时机 List list = new ArrayList<>(); list.add(ExpanderOccasion.SELECT); list.add(ExpanderOccasion.UPDATE); return list; }} 2.6.2 配置切面实现,可以添加多个切面
FastDaoConfig.addFastDaoExpander(DemoExpander.class);
2.7 手动事务管理
FastTransaction.open(); //开启事务FastTransaction.commit(); //提交FastTransaction.rollback(); //回滚//示例FastTransaction.open(); //开启事务FastUserTestFastDao.create().dao().insert(user); //新增数据FastTransaction.commit(); //提交
以上就是Java的ORM框架和DAO框架如何进行Fast-Dao ,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
参数
缓存
数据
条件
字段
查询
更新
逻辑
对象
张三
生成
框架
时间
文件
用户
模板
配置
数据库
数据源
保护
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
mysql服务器的搭建
网络安全的苦处
龙湖地产软件开发岗怎么样
数据库技术的产生
参加网络安全软件培训简报
校园网络安全目标责任书
联想服务器卡在启动管理器界面
软件开发学习ios好还是安卓好
公共数据库建设
上海交通银行软件开发中心外包人员
点绘拆单软件服务器连接异常
双插槽服务器
数据库中去掉重复的数据库
建党100周年期间网络安全
服务器采购招标
服务器管理员密码怎么设置
我国网络安全法于哪年发布
用典故诗句来说网络安全
网络安全法的实施出台背景
c语言软件开发选题
软件开发的盈利模式
考生管理平台服务器
wcf可否分页读取数据库
ip网络技术 pdf
tbc怀旧服狂野之刃服务器
搭建中小型网络首选的网络技术
软件开发创新建议
国资委收购华为服务器
软件开发自我介绍求职
十堰有没有游戏软件开发电话