SpringBoot整合Jooq框架
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
66套java從入門到精通實(shí)戰(zhàn)課程分享
修改pom.xml文件
?
????????
????????????org.springframework.boot
????????????spring-boot-starter-jooq
????????
????????
????????????org.jooq
????????????jooq
????????
????????
????????????org.jooq
????????????jooq-meta
????????
????????
????????????org.jooq
????????????jooq-codegen
????????
代碼生成器插件配置
????
????
????????org.jooq
????????jooq-codegen-maven
????????
????????????
????????????????generate-sources
????????????????
????????????????????generate
????????????????
????????????
????????
????????
????????????
????????????????mysql
????????????????mysql-connector-java
????????????????5.1.42
????????????
????????
????????
????????????
????????????????com.mysql.jdbc.Driver
????????????????
????????????????jdbc:mysql://locahost:3306/
????????????????*
????????????????*
????????????
????????????
????????????????
????????????????????org.jooq.util.mysql.MySQLDatabase
????????????????????
????????????????????
????????????????????ide_user_test
????????????????????
????????????????????
????????????????????test
????????????????
????????????????
????????????????????
????????????????????true
????????????????????true
????????????????????
????????????????????true
????????????????????
????????????????????
????????????????????false
????????????????
????????????????
????????????????????
????????????????????ys.manufacture.generate
????????????????????src/main/java
????????????????
????????????
????????
????
生成代碼
?運(yùn)行 mvn clean install -Djooq 命令生成代碼,點(diǎn)擊maven里面的按鈕也能生成,如下圖:

執(zhí)行命令后會(huì)生成以下幾個(gè)類:

pojos下面的類是我們會(huì)用到的實(shí)體類,而tables文件夾下面的實(shí)體類是利用DSL查詢時(shí)拼接sql的表名、字段名
service層部分代碼示例
???ys.manufacture.generate.tables.IdeUserTest?USER?=?ys.manufacture.generate.tables.IdeUserTest.IDE_USER_TEST;
????/**
?????*?通過(guò)主鍵查詢
?????*
?????*?@param?user_number
?????*?@return
?????*/
????public?IdeUserTest?getByJooqFindId(String?user_number)?{
????????//用DSL
????????DSLContext?create?=?DSL.using(dataSource,SQLDialect.MYSQL);
????????List?ideUserTests?=?create.select(USER.USER_AGE,USER.USER_NAME)
????????????????.from(USER).where(USER.USER_NUMBER.eq(user_number)).fetchInto(IdeUserTest.class);
????}
????/**
?????*?通過(guò)jooq新增demo
?????*?@param?inputBean
?????*?@return
?????*/
????public?UserTestViewOutputBean?addByJooq(UserTestViewInputBean?inputBean)?{
????????String?meacon?=?genNoService.getNo("userId",?commonService.getCurrentDateTime().jaDateValue());
????????LocalDateTime?localDateTime?=?Instant.ofEpochMilli(JaDate.today().dateValue().getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
????????//DSL方法
????????DSLContext?create?=?DSL.using(dataSource,SQLDialect.MYSQL);
????????int?execute?=?create.insertInto(USER)
????????????????.columns(USER.USER_NUMBER,?USER.USER_NAME,?USER.USER_AGE,?USER.USER_DATE,?USER.USER_TEL)
????????????????.values(meacon,?inputBean.getUser_name(),?inputBean.getUser_age(),?localDateTime,?inputBean.getUser_tel())
????????????????.execute();
????????return?new?UserTestViewOutputBean();
????}
????/**
?????*?刪除
?????*?@param?inputBean
?????*?@return
?????*/
????public?UserTestViewOutputBean?delByJooq(UserTestViewInputBean?inputBean)?{
????????//dao?方法
????????dao.deleteById(inputBean.getUser_number());
????????return?new?UserTestViewOutputBean();
????}
????/**
?????*?修改
?????*?@param?inputBean
?????*?@return
?????*/
????public?UserTestViewOutputBean?editByJooq(UserTestViewInputBean?inputBean)?{
????????//DSL方法
????????DSLContext?create?=?DSL.using(dataSource,?SQLDialect.MYSQL);
????????int?execute?=?create.update(USER)
????????????????.set(USER.USER_NAME,?inputBean.getUser_name())
????????????????.where(USER.USER_NUMBER.eq(inputBean.getUser_number()))
????????????????.execute();
????????return?new?UserTestViewOutputBean();
????}
????@Autowired
????DSLContext?dslContext;
????/**
?????*
?????*?事務(wù)測(cè)試
?????*?@param?inputBean
?????*?@return
?????*?@throws?SqlParserException
?????*/
????public?UserTestViewOutputBean?transactionJooq(UserTestViewInputBean?inputBean)throws?SqlParserException?{
?????????DSL.using(dataSource,SQLDialect.MYSQL).transaction(new?TransactionalRunnable()?{
?????????????@Override
?????????????public?void?run(Configuration?configuration)?throws?Exception?{
?????????????????DSLContext?create?=?DSL.using(configuration);
?????????????????int?execute?=?create.update(USER)
?????????????????????????.set(USER.USER_AGE,?inputBean.getUser_age())
?????????????????????????.where(USER.USER_NUMBER.eq(inputBean.getUser_number()))
?????????????????????????.execute();
?????????????????int?execute1?=?dslContext.deleteFrom(USER).where(USER.USER_AGE.eq(inputBean.getUser_age())).execute();
?????????????}
????????});
????????return?new?UserTestViewOutputBean();
????}
?上面查詢語(yǔ)句代碼可讀性很強(qiáng),實(shí)現(xiàn)了java代碼代替了sql語(yǔ)句。除了用這種方式是查詢之外,還可以利用自動(dòng)生成的dao層,
?不過(guò)在使用dao時(shí),需先調(diào)用它的構(gòu)造方法注入,不能直接用@Autowired或@Resource注解注入,代碼如下圖:
??@Autowired
????DataSource?dataSource;
????private?IdeUserTestDao?dao;
????@PostConstruct//表示在UserServiceImpl構(gòu)造完成之后執(zhí)行
????private?void?createDao()?{
????????//?DSL上下文是所有數(shù)據(jù)庫(kù)操作的入口,意思就是要用jooq干任何事都要先實(shí)例化這個(gè)DSLContext
????????DSLContext?dsl?=?DSL.using(dataSource,?SQLDialect.MYSQL);
????????dao?=?new?IdeUserTestDao(dsl.configuration());
????}
????
??ys.manufacture.generate.tables.IdeUserTest?USER?=?ys.manufacture.generate.tables.IdeUserTest.IDE_USER_TEST;
???
????/**
?????*?通過(guò)主鍵查詢
?????*
?????*?@param?user_number
?????*?@return
?????*/
????public?IdeUserTest?getByJooqFindId(String?user_number)?{
????????//用dao方法
????????IdeUserTest?userTest?=?dao.findById(user_number);
????????return?userTest;
????}
????/**
?????*?通過(guò)jooq新增demo
?????*?@param?inputBean
?????*?@return
?????*/
????public?UserTestViewOutputBean?addByJooq(UserTestViewInputBean?inputBean)?{
????????String?meacon?=?genNoService.getNo("userId",?commonService.getCurrentDateTime().jaDateValue());
????????LocalDateTime?localDateTime?=?Instant.ofEpochMilli(JaDate.today().dateValue().getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
????????//dao方法
????????IdeUserTest?userTest?=?new?IdeUserTest();
????????userTest.setUserNumber(meacon);
????????userTest.setUserTel(inputBean.getUser_tel());
????????userTest.setUserName(inputBean.getUser_name());
????????userTest.setUserAge(inputBean.getUser_age());
????????userTest.setUserDate(localDateTime);
????????dao.insert(userTest);
????????return?new?UserTestViewOutputBean();
????}
????/**
?????*?刪除
?????*?@param?inputBean
?????*?@return
?????*/
????public?UserTestViewOutputBean?delByJooq(UserTestViewInputBean?inputBean)?{
????????//dao?方法
????????dao.deleteById(inputBean.getUser_number());
????????return?new?UserTestViewOutputBean();
????}
????/**
?????*?修改
?????*?@param?inputBean
?????*?@return
?????*/
????public?UserTestViewOutputBean?editByJooq(UserTestViewInputBean?inputBean)?{
????????//dao?方法
????????IdeUserTest?userTest?=?new?IdeUserTest();
????????userTest.setUserNumber(inputBean.getUser_number());
????????userTest.setUserTel(inputBean.getUser_tel());
????????userTest.setUserName(inputBean.getUser_name());
????????userTest.setUserAge(inputBean.getUser_age());
????????dao.update(userTest);
????????return?new?UserTestViewOutputBean();
????}
事務(wù)
可以直接在數(shù)據(jù)庫(kù)中發(fā)出特定于供應(yīng)商的COMMIT,ROLLBACK和其他語(yǔ)句;
可以在JDBC驅(qū)動(dòng)程序上調(diào)用JDBC的Connection.commit(),Connection.rollback()和其他方法;
可以使用第三方事務(wù)管理庫(kù),例如Spring TX(@Transactional);
可以從容器中使用符合JTA的Java EE事務(wù)管理器;
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/ZYLSKY111/article/details/109817716
粉絲福利:實(shí)戰(zhàn)springboot+CAS單點(diǎn)登錄系統(tǒng)視頻教程免費(fèi)領(lǐng)取
???
?長(zhǎng)按上方微信二維碼?2 秒 即可獲取資料
感謝點(diǎn)贊支持下哈?
評(píng)論
圖片
表情
