本篇文章給大家分享的是有關(guān)Java的ORM框架和DAO框架如何進(jìn)行Fast-Dao ,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
成都創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括網(wǎng)站設(shè)計制作、成都做網(wǎng)站、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。
極·簡化DAO操作,面向?qū)ο蟮臄?shù)據(jù)庫操作方式, 大幅度提高編碼效率
支持自定義SQL
支持Spring事務(wù)管理和手動事務(wù)
支持分布式緩存和本地緩存,支持?jǐn)?shù)據(jù)在增刪改后主動刷新緩存
示例
User user = UserFastDao.create().dao().insert(user); //增,新增成功后主鍵會在對象中設(shè)置 Integer delCount = UserFastDao.create().id(1).dao().delete(); //刪,可以選擇邏輯刪除和物理刪除 Integer updateCount = UserFastDao.create().id(1).dao().update(user); //改,操作簡單,條件豐富 PageInfopage = UserFastDao.create().dao().findPage(1, 10); //查,分頁查詢
com.fast-dao fast-dao LATEST
/** * 字段駝峰轉(zhuǎn)換 例 user_name = userName 默認(rèn)開啟 */ FastDaoConfig.openToCamelCase(); /** * 設(shè)置SQL日志打印,默認(rèn)關(guān)閉 * 參數(shù)1: 日志打印級別 DEBUG,INFO,OFF * 參數(shù)2: 是否打印詳細(xì)SQL日志 * 參數(shù)3: 是否打印SQL執(zhí)行結(jié)果 */ FastDaoConfig.openSqlPrint(SqlLogLevel.INFO,true, true); /** * 開啟自動對數(shù)據(jù) 新增操作 進(jìn)行創(chuàng)建時間設(shè)置 * 參數(shù)1: 需要設(shè)置創(chuàng)建時間的字段名 */ FastDaoConfig.openAutoSetCreateTime("create_time"); /** * 開啟自動對數(shù)據(jù) 更新操作/邏輯刪除操作 進(jìn)行更新時間設(shè)置 * 參數(shù)1: 需要設(shè)置更新時間的字段名 */ FastDaoConfig.openAutoSetUpdateTime("update_time"); /** * 開啟邏輯刪除功能,開啟后會對邏輯刪除標(biāo)記的數(shù)據(jù)在 更新|刪除|查詢 時進(jìn)行保護(hù),可通過模板進(jìn)行單次操作邏輯刪除保護(hù)的關(guān)閉 * 參數(shù)1: 邏輯刪除字段名 * 參數(shù)2: 邏輯刪除標(biāo)記默認(rèn)值 */ FastDaoConfig.openLogicDelete("deleted", Boolean.TRUE); /** * 設(shè)置全局默認(rèn)緩存時間,兩種緩存模式(本地緩存,redis緩存),支持緩存的自動刷新<更新,刪除,新增>后會自動刷新緩存的數(shù)據(jù) * Reids緩存需要進(jìn)行配置 * 參數(shù)1: 默認(rèn)緩存時間 * 參數(shù)2: 默認(rèn)緩存時間類型 */ FastDaoConfig.openCache(10L, TimeUnit.SECONDS); /** * 數(shù)據(jù)源配置,Spring環(huán)境可無需設(shè)置可自動識別 */ FastDaoConfig.dataSource(dataSource); /** * redis緩存配置,Spring環(huán)境可無需設(shè)置可自動識別 */ FastDaoConfig.redisConnectionFactory(redisConnectionFactory);
FileCreateConfig config = new FileCreateConfig(); /** * 設(shè)置數(shù)據(jù)庫連接信息 * @param url 數(shù)據(jù)庫連接 * @param user 用戶名 * @param password 密碼 * @param driverClass 數(shù)據(jù)庫驅(qū)動 */ config.setDBInfo("jdbc:MySQL://IP:端口/數(shù)據(jù)庫?useUnicode=true&characterEncoding=utf-8&useInformationSchema=true","賬號","密碼","驅(qū)動(例: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 默認(rèn)false */ config.setUseLombok(false); /** * 是否在DTO上生成Swagger2注解 * @param useDTOSwagger2 默認(rèn)false */ config.setUseDTOSwagger2(false); /** * 是否對字段和生成的對象進(jìn)行下劃線轉(zhuǎn)換,如 product_sku = ProductSku * @param underline2CamelStr 默認(rèn)true */ config.setUnderline2CamelStr(true); /** * 是否覆蓋舊文件 * @param replaceFile 默認(rèn)true */ config.setReplaceFile(true); /** * 需要生成的表名稱 * @param tables 多個表用逗號隔開,如果需要生成數(shù)據(jù)庫中所有的表,參數(shù)為all */ config.setCreateTables("all"); /** * 如果是多模塊項目,需要使用此項 * @param childModuleName 指定在哪個模塊下創(chuàng)建模板文件 */ //config.setChildModuleName("模塊名稱"); //生成代碼 TableFileCreateUtils.create(config);
//使用示例 FastUserTestFastDAO query = new FastUserTestFastDAO(); query.userName().likeRight("張"); query.age().less(30); query.createTime().orderByDesc(); ListuserList = query.dao().findAll();
//文件生成對象 UserFastDao fastDao = new UserFastDao();
功能 | 方法 | 示例 |
---|---|---|
相等條件設(shè)置 | fastDao.fieldName(參數(shù)...) fastDao.fieldName().notValEqual(參數(shù)) | fastDao.userName(張三,李四) fastDao.userName().notValEqual("張三") |
模糊匹配條件設(shè)置 | fastDao.fieldName().like(參數(shù)) fastDao.fieldName().likeLeft(參數(shù)) fastDao.fieldName().likeRight(參數(shù)) fastDao.fieldName().notLike(參數(shù)) fastDao.fieldName().notLikeLeft(參數(shù)) fastDao.fieldName().notLikeRight(參數(shù)) | fastDao.userName().like("張") fastDao.userName().likeLeft("張") fastDao.userName().likeRight("三") fastDao.userName().notLike("張") fastDao.userName().notLikeLeft("張") fastDao.userName().notLikeRight("三") |
IN條件設(shè)置 | fastDao.fieldName().in("參數(shù)1"...) fastDao.fieldName().notIn("參數(shù)1"...) | fastDao.userName().in("張三","李四") fastDao.userName().notIn("張三","李四") |
范圍條件設(shè)置 | fastDao.fieldName().between(min, max) fastDao.fieldName().notBetween(min, max) | fastDao.age().between(20, 30) fastDao.age().notBetween(20, 30) |
大于條件設(shè)置 | fastDao.fieldName().greater(參數(shù)) | fastDao.age().greater(30) |
大于等于條件設(shè)置 | fastDao.fieldName().greaterOrEqual(參數(shù)) | fastDao.age().greaterOrEqual(30) |
小于條件設(shè)置 | fastDao.fieldName().less(參數(shù)) | fastDao.age().less(10) |
小于等于條件設(shè)置 | fastDao.fieldName().lessOrEqual(參數(shù)) | fastDao.age().lessOrEqual(10) |
IsNull條件設(shè)置 | fastDao.fieldName().isNull() | fastDao.userName().isNull() |
NotNull條件設(shè)置 | fastDao.fieldName().notNull() | fastDao.userName().notNull() |
排序設(shè)置-升序 | fastDao.fieldName().orderByAsc() | fastDao.age().orderByAsc() |
排序設(shè)置-降序 | fastDao.fieldName().orderByDesc() | fastDao.age().orderByDesc() |
對象條件設(shè)置 | fastDao.equalObject(對象) | User user = new User; user.setName("張三"); fastDao.equalObject(user ) |
查詢指定字段設(shè)置 | fastDao.fieldName().showField() | 執(zhí)行查詢操作時只查詢指定字段,可設(shè)置多個fastDao.id().showField(); fastDao.userName().showField(); |
過濾字段設(shè)置 | fastDao.fieldName().hideField() | 查詢操作時不查詢指定字段,可設(shè)置多個fastDao.password().hideField(); fastDao.mail().hideField(); |
字段去重復(fù)設(shè)置 | fastDao.fieldName().distinctField() | fastDao.userName().distinctField() |
字段去求和設(shè)置 | fastDao.fieldName().sumField() | fastDao.age().sumField() |
字段去求平均值設(shè)置 | fastDao.fieldName().avgField() | fastDao.age().avgField() |
字段去求最小值設(shè)置 | fastDao.fieldName().minField() | fastDao.age().minField() |
字段去求最大值設(shè)置 | fastDao.fieldName().maxField() | fastDao.age().maxField() |
字段自定義更新設(shè)置 | fastDao.fieldName().customizeUpdateValue() | 等同 age=age+5 同時可設(shè)置其他更新條件或更新參數(shù) fastDao.age().customizeUpdateValue().thisAdd("#{age}",Collections.singletonMap("age",5)).dao().update(null) |
自定義SQL條件設(shè)置 | fastDao.andSql(SQL語句,參數(shù)) fastDao.orSql(SQL語句,參數(shù)) fastDao.sql(SQL語句,參數(shù)) | 會在WHERE后拼接自定義SQL語句 如果有占位參數(shù)需要使用 #{參數(shù)名} 聲明 傳遞參數(shù)MAP集合put(參數(shù)名,參數(shù)值) Map params.put("userName", "張三"); fastDao.andSql("userName = #{userName}",params) |
關(guān)閉邏輯刪除保護(hù) | fastDao.closeLogicDeleteProtect() | 會對本次執(zhí)行進(jìn)行邏輯刪除保護(hù)關(guān)閉 關(guān)閉后所有操作會影響到被邏輯刪除標(biāo)記的數(shù)據(jù) |
OR條件設(shè)置 | fastDao.fieldName().or() | 指定字段OR條件設(shè)置 例: 條件為姓名等于張三或為null fastDao.userName().valEqual("張三").or().isNull() |
Dao執(zhí)行器調(diào)用:
//文件生成對象 FastDaodao = UserFastDao.create().dao();
執(zhí)行器方法:
說明 | 方法名 | 示例 |
---|---|---|
新增 | Pojo insert(Pojo pojo) | 新增一個用戶,新增成功后會進(jìn)行對象主鍵字段賦值User user = UserFastDao.create().dao().insert(user) |
查詢單條數(shù)據(jù) | Pojo findOne() | 查詢用戶名為張三的信息User user = UserFastDao.create().userName("張三").dao().findOne() |
查詢多條數(shù)據(jù) | List | 查詢年齡在20-30間的所有用戶List |
查詢數(shù)量 | Integer findCount() | 查詢一共有多少用戶Integer count = UserFastDao.create().dao().findCount() |
分頁查詢 | PageInfo | 分頁查詢用戶,并對年齡進(jìn)行排序PageInfo |
更新數(shù)據(jù),對象中參數(shù)為空的屬性不進(jìn)行更新 | Integer update(Pojo pojo) | 更新姓名為張三和李四的用戶Integer count = UserFastDao.create().userName().in("張三","李四").dao().update(user) |
更新數(shù)據(jù),對象中參數(shù)為空的屬性也進(jìn)行更新 | Integer updateOverwrite(Pojo pojo) | 更新年齡小于30,并且姓張的用戶UserFastDao fastDao = UserFastDao.create(); fastDao.age().less(30); fastDao.userName().like("張"); Integer count = fastDao.updateOverwrite(user) |
通過條件物理刪除 如果啟動了邏輯刪除功能 本操作會自動將數(shù)據(jù)刪除標(biāo)記修改,不會進(jìn)行物理刪除 除非關(guān)閉邏輯刪除保護(hù) 邏輯刪除配置 FastDaoConfig.openLogicDelete("deleted",true); 關(guān)閉邏輯刪除保護(hù)方式請參考條件設(shè)置 重要!!!如果不進(jìn)行設(shè)置將使用物理刪除方式 | Integer delete() | 刪除年齡大于80或為null的用戶Integer count = UserFastDao.create().age().greater(80).or().isNull().delete() |
多表等復(fù)雜SQL操作,可以使用自定義SQL執(zhí)行器實現(xiàn),框架會自動進(jìn)行對象和表進(jìn)行映射
如果有參數(shù)需要使用 #{參數(shù)名} 聲明,傳遞參數(shù)MAP集合中put(參數(shù)名,參數(shù)值)
FastCustomSqlDao.create(Class, SQL語句, 參數(shù))
//例: String sql = "SELECT * FROM user WHERE `user_name` LIKE #{userName}"; HashMapparams = new HashMap<>(); params.put("userName","%張亞偉%"); List all = FastCustomSqlDao.create(User.class, sql, params).findAll();
開啟緩存功能后,可以Bean添加注解的方式啟用緩存
/** * Redis緩存 * 當(dāng)進(jìn)行使用此框架模板進(jìn)行操作新增,更新,刪除操作時,會自動刷新Redis緩存中的數(shù)據(jù) * 默認(rèn)參數(shù)為框架設(shè)置的緩存時間和類型 * 緩存可選參數(shù) * FastRedisCache(Long 秒) 如@FastRedisCache(60L) 緩存60秒 * FastRedisCache(cacheTime = 時間,cacheTimeType = TimeUnit) 如@FastRedisCache(cacheTime =1L,cacheTimeType = TimeUnit.HOURS) 緩存1小時 */ @FastRedisCache /** 1. 內(nèi)存緩存 2. 當(dāng)開啟緩存并操作對象配置此注解時,會將查詢到的數(shù)據(jù)緩存到本地中 3. 當(dāng)進(jìn)行使用此框架模板進(jìn)行操作新增,更新,刪除操作時,會自動刷新內(nèi)存中緩存的數(shù)據(jù) 4. 默認(rèn)參數(shù)為框架設(shè)置的緩存時間和類型 5. 緩存可選參數(shù) 6. FastStatisCache(Long 秒) 如@FastStatisCache(60L) 緩存60秒 7. FastStatisCache(cacheTime = 時間,cacheTimeType = TimeUnit) 如@FastStatisCache(cacheTime =1L,cacheTimeType = TimeUnit.HOURS) 緩存1小時 */ @FastStatisCache
可以在任意一次執(zhí)行時進(jìn)行數(shù)據(jù)源更換,更換數(shù)據(jù)源只對當(dāng)前線程影響
//例 FastDaoConfig.dataSource(getDataSource());//更換全局?jǐn)?shù)據(jù)源 FastDaoConfig.dataSourceThreadLocal(getDataSource());//更換本線程數(shù)據(jù)源 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; }
使用切面可以進(jìn)行很多自定義操作,比如讀寫分離,CRUD時候添加參數(shù),權(quán)限驗證等
public class DemoExpander implements FastDaoExpander { /** * @param param 封裝了DAO所有的執(zhí)行參數(shù) * @return 是否執(zhí)行 */ @Override public boolean before(FastDaoParam param) { System.out.println("DAO執(zhí)行前"); return true; } /** * @param param 封裝了DAO所有的執(zhí)行參數(shù) */ @Override public void after(FastDaoParam param) { System.out.println("DAO執(zhí)行后"); } @Override public Listoccasion() { //配置DAO切面執(zhí)行時機(jī) List list = new ArrayList<>(); list.add(ExpanderOccasion.SELECT); list.add(ExpanderOccasion.UPDATE); return list; } }
FastDaoConfig.addFastDaoExpander(DemoExpander.class);
FastTransaction.open(); //開啟事務(wù) FastTransaction.commit(); //提交 FastTransaction.rollback(); //回滾 //示例 FastTransaction.open(); //開啟事務(wù) FastUserTestFastDao.create().dao().insert(user); //新增數(shù)據(jù) FastTransaction.commit(); //提交
以上就是Java的ORM框架和DAO框架如何進(jìn)行Fast-Dao ,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。