本篇文章給大家分享的是有關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); //改,操作簡單,條件豐富 PageInfo<User> page = UserFastDao.create().dao().findPage(1, 10); //查,分頁查詢
<dependency> <groupId>com.fast-dao</groupId> <artifactId>fast-dao</artifactId> <version>LATEST</version> </dependency>
/**
* 字段駝峰轉換 例 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);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);//使用示例
FastUserTestFastDAO query = new FastUserTestFastDAO();
query.userName().likeRight("張");
query.age().less(30);
query.createTime().orderByDesc();
List<FastUserTest> userList = query.dao().findAll();//文件生成對象 UserFastDao fastDao = new UserFastDao();
| 功能 | 方法 | 示例 |
|---|---|---|
| 相等條件設置 | fastDao.fieldName(參數...)<br>fastDao.fieldName().notValEqual(參數) | fastDao.userName(張三,李四)<br>fastDao.userName().notValEqual("張三") |
| 模糊匹配條件設置 | fastDao.fieldName().like(參數)<br>fastDao.fieldName().likeLeft(參數)<br>fastDao.fieldName().likeRight(參數)<br><br>fastDao.fieldName().notLike(參數)<br>fastDao.fieldName().notLikeLeft(參數)<br>fastDao.fieldName().notLikeRight(參數) | fastDao.userName().like("張")<br>fastDao.userName().likeLeft("張")<br>fastDao.userName().likeRight("三")<br><br>fastDao.userName().notLike("張")<br>fastDao.userName().notLikeLeft("張")<br>fastDao.userName().notLikeRight("三") |
| IN條件設置 | fastDao.fieldName().in("參數1"...) <br>fastDao.fieldName().notIn("參數1"...) | fastDao.userName().in("張三","李四")<br>fastDao.userName().notIn("張三","李四") |
| 范圍條件設置 | fastDao.fieldName().between(min, max)<br>fastDao.fieldName().notBetween(min, max) | fastDao.age().between(20, 30)<br>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;<br>user.setName("張三");<br>fastDao.equalObject(user )<br> |
| 查詢指定字段設置 | fastDao.fieldName().showField() | 執行查詢操作時只查詢指定字段,可設置多個<br>fastDao.id().showField();<br>fastDao.userName().showField(); |
| 過濾字段設置 | fastDao.fieldName().hideField() | 查詢操作時不查詢指定字段,可設置多個<br>fastDao.password().hideField();<br>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<br>同時可設置其他更新條件或更新參數<br>fastDao.age().customizeUpdateValue().thisAdd("#{age}",Collections.singletonMap("age",5)).dao().update(null) |
| 自定義SQL條件設置 | fastDao.andSql(SQL語句,參數)<br>fastDao.orSql(SQL語句,參數)<br>fastDao.sql(SQL語句,參數) | 會在WHERE后拼接自定義SQL語句<br>如果有占位參數需要使用 #{參數名} 聲明<br>傳遞參數MAP集合put(參數名,參數值)<br>Map<String, Object> params = new HashMap<>();<br>params.put("userName", "張三");<br>fastDao.andSql("userName = #{userName}",params) |
| 關閉邏輯刪除保護 | fastDao.closeLogicDeleteProtect() | 會對本次執行進行邏輯刪除保護關閉<br>關閉后所有操作會影響到被邏輯刪除標記的數據 |
| OR條件設置 | fastDao.fieldName().or() | 指定字段OR條件設置 <br>例: 條件為姓名等于張三或為null <br>fastDao.userName().valEqual("張三").or().isNull() |
Dao執行器調用:
//文件生成對象 FastDao<User> dao = UserFastDao.create().dao();
執行器方法:
| 說明 | 方法名 | 示例 |
|---|---|---|
| 新增 | Pojo insert(Pojo pojo) | 新增一個用戶,新增成功后會進行對象主鍵字段賦值<br>User user = UserFastDao.create().dao().insert(user) |
| 查詢單條數據 | Pojo findOne() | 查詢用戶名為張三的信息<br>User user = UserFastDao.create().userName("張三").dao().findOne() |
| 查詢多條數據 | List<Pojo> findAll() | 查詢年齡在20-30間的所有用戶<br>List<User> list = UserFastDao.create().age().between(20,30).dao().findAll() |
| 查詢數量 | Integer findCount() | 查詢一共有多少用戶<br>Integer count = UserFastDao.create().dao().findCount() |
| 分頁查詢 | PageInfo<Pojo> findPage(int pageNum, int pageSize) | 分頁查詢用戶,并對年齡進行排序<br>PageInfo<User> page = UserFastDao.create().age().orderByDesc().findPage(1, 10) |
| 更新數據,對象中參數為空的屬性不進行更新 | Integer update(Pojo pojo) | 更新姓名為張三和李四的用戶<br>Integer count = UserFastDao.create().userName().in("張三","李四").dao().update(user) |
| 更新數據,對象中參數為空的屬性也進行更新 | Integer updateOverwrite(Pojo pojo) | 更新年齡小于30,并且姓張的用戶<br>UserFastDao fastDao = UserFastDao.create();<br>fastDao.age().less(30);<br>fastDao.userName().like("張");<br>Integer count = fastDao.updateOverwrite(user) |
| 通過條件物理刪除<br>如果啟動了邏輯刪除功能<br>本操作會自動將數據刪除標記修改,不會進行物理刪除<br>除非關閉邏輯刪除保護<br>邏輯刪除配置<br>FastDaoConfig.openLogicDelete("deleted",true);<br>關閉邏輯刪除保護方式請參考條件設置<br>重要!!!如果不進行設置將使用物理刪除方式 | Integer delete() | 刪除年齡大于80或為null的用戶<br>Integer count = UserFastDao.create().age().greater(80).or().isNull().delete() |
多表等復雜SQL操作,可以使用自定義SQL執行器實現,框架會自動進行對象和表進行映射<br> 如果有參數需要使用 #{參數名} 聲明,傳遞參數MAP集合中put(參數名,參數值)<br> FastCustomSqlDao.create(Class, SQL語句, 參數)
//例:
String sql = "SELECT * FROM user WHERE `user_name` LIKE #{userName}";
HashMap<String, Object> params = new HashMap<>();
params.put("userName","%張亞偉%");
List<User> all = FastCustomSqlDao.create(User.class, sql, params).findAll();開啟緩存功能后,可以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
可以在任意一次執行時進行數據源更換,更換數據源只對當前線程影響
//例
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;
}使用切面可以進行很多自定義操作,比如讀寫分離,CRUD時候添加參數,權限驗證等
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<ExpanderOccasion> occasion() {
//配置DAO切面執行時機
List<ExpanderOccasion> list = new ArrayList<>();
list.add(ExpanderOccasion.SELECT);
list.add(ExpanderOccasion.UPDATE);
return list;
}
}FastDaoConfig.addFastDaoExpander(DemoExpander.class);
FastTransaction.open(); //開啟事務 FastTransaction.commit(); //提交 FastTransaction.rollback(); //回滾 //示例 FastTransaction.open(); //開啟事務 FastUserTestFastDao.create().dao().insert(user); //新增數據 FastTransaction.commit(); //提交
以上就是Java的ORM框架和DAO框架如何進行Fast-Dao ,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。