<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot整合Jooq框架

          共 7325字,需瀏覽 15分鐘

           ·

          2020-11-22 14:49

          點(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ù)

          1. 可以直接在數(shù)據(jù)庫(kù)中發(fā)出特定于供應(yīng)商的COMMIT,ROLLBACK和其他語(yǔ)句;

          2. 可以在JDBC驅(qū)動(dòng)程序上調(diào)用JDBC的Connection.commit(),Connection.rollback()和其他方法;

          3. 可以使用第三方事務(wù)管理庫(kù),例如Spring TX(@Transactional);

          4. 可以從容器中使用符合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)贊支持下哈?

          瀏覽 47
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费淫色网站 | а 中文在线天堂精品 | 久久久久久黄色片 | 美女操逼国产欧美亚洲色 | 操操操视频 |