From c6e6a1df9f8c87afbbd69124787bb4d67dd146ee Mon Sep 17 00:00:00 2001 From: xiongxiaoyang Date: Thu, 28 May 2020 02:12:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=9E=84=E5=BB=BA=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assert/QQ20200528-020224.png | Bin 0 -> 132881 bytes assert/QQ20200528-020357.png | Bin 0 -> 138389 bytes assert/QQ20200528-020445.png | Bin 0 -> 128981 bytes assert/QQ20200528-020543.png | Bin 0 -> 116722 bytes doc/yml/author-service/author-service.yml | 24 ++ doc/yml/book-service/book-service.yml | 24 ++ doc/yml/news-service/news-service.yml | 22 ++ doc/yml/novel-common/novel-jwt.yml | 3 + doc/yml/novel-gateway/novel-gateway.yml | 34 ++ doc/yml/novel-home/novel-home.yml | 42 ++ doc/yml/novel-monitor/novel-monitor.yml | 19 + doc/yml/novel-search/novel-search.yml | 53 +++ doc/yml/pay-service/pay-service.yml | 22 ++ doc/yml/user-service/user-service.yml | 52 +++ novel-author/author-api/pom.xml | 34 ++ .../java2nb/novel/author/entity/Author.java | 148 ++++++++ .../novel/author/entity/AuthorCode.java | 92 +++++ novel-author/author-service/pom.xml | 43 +++ .../com/java2nb/novel/AuthorApplication.java | 20 + .../mapper/AuthorCodeDynamicSqlSupport.java | 50 +++ .../novel/author/mapper/AuthorCodeMapper.java | 177 +++++++++ .../mapper/AuthorDynamicSqlSupport.java | 70 ++++ .../novel/author/mapper/AuthorMapper.java | 205 ++++++++++ .../src/main/resources/application.yml | 4 + .../src/main/resources/bootstrap.yml | 13 + .../src/main/resources/logback-boot.xml | 64 ++++ novel-author/pom.xml | 22 ++ novel-book/book-api/pom.xml | 32 ++ .../com/java2nb/novel/book/entity/Book.java | 358 ++++++++++++++++++ .../novel/book/entity/BookCategory.java | 116 ++++++ .../novel/book/entity/BookComment.java | 106 ++++++ .../novel/book/entity/BookCommentReply.java | 92 +++++ .../novel/book/entity/BookContent.java | 49 +++ .../java2nb/novel/book/entity/BookIndex.java | 118 ++++++ novel-book/book-service/pom.xml | 44 +++ .../com/java2nb/novel/BookApplication.java | 20 + .../mapper/BookCategoryDynamicSqlSupport.java | 60 +++ .../novel/book/mapper/BookCategoryMapper.java | 191 ++++++++++ .../mapper/BookCommentDynamicSqlSupport.java | 55 +++ .../novel/book/mapper/BookCommentMapper.java | 184 +++++++++ .../BookCommentReplyDynamicSqlSupport.java | 50 +++ .../book/mapper/BookCommentReplyMapper.java | 177 +++++++++ .../mapper/BookContentDynamicSqlSupport.java | 34 ++ .../novel/book/mapper/BookContentMapper.java | 156 ++++++++ .../book/mapper/BookDynamicSqlSupport.java | 145 +++++++ .../mapper/BookIndexDynamicSqlSupport.java | 60 +++ .../novel/book/mapper/BookIndexMapper.java | 191 ++++++++++ .../java2nb/novel/book/mapper/BookMapper.java | 310 +++++++++++++++ .../src/main/resources/application.yml | 4 + .../src/main/resources/bootstrap.yml | 5 + .../src/main/resources/logback-boot.xml | 64 ++++ novel-book/pom.xml | 20 + .../src/main/resources/application-common.yml | 5 + .../src/main/resources/bootstrap-dev.yml | 9 + .../src/main/resources/bootstrap.yml | 4 +- .../java2nb/novel/author/entity/Author.java | 147 +++++++ .../novel/author/entity/AuthorCode.java | 91 +++++ .../mapper/AuthorCodeDynamicSqlSupport.java | 49 +++ .../novel/author/mapper/AuthorCodeMapper.java | 183 +++++++++ .../mapper/AuthorDynamicSqlSupport.java | 69 ++++ .../novel/author/mapper/AuthorMapper.java | 211 +++++++++++ .../com/java2nb/novel/book/entity/Book.java | 357 +++++++++++++++++ .../novel/book/entity/BookCategory.java | 115 ++++++ .../novel/book/entity/BookComment.java | 105 +++++ .../novel/book/entity/BookCommentReply.java | 91 +++++ .../novel/book/entity/BookContent.java | 48 +++ .../java2nb/novel/book/entity/BookIndex.java | 117 ++++++ .../mapper/BookCategoryDynamicSqlSupport.java | 59 +++ .../novel/book/mapper/BookCategoryMapper.java | 197 ++++++++++ .../mapper/BookCommentDynamicSqlSupport.java | 54 +++ .../novel/book/mapper/BookCommentMapper.java | 190 ++++++++++ .../BookCommentReplyDynamicSqlSupport.java | 49 +++ .../book/mapper/BookCommentReplyMapper.java | 183 +++++++++ .../mapper/BookContentDynamicSqlSupport.java | 33 ++ .../novel/book/mapper/BookContentMapper.java | 162 ++++++++ .../book/mapper/BookDynamicSqlSupport.java | 144 +++++++ .../mapper/BookIndexDynamicSqlSupport.java | 59 +++ .../novel/book/mapper/BookIndexMapper.java | 197 ++++++++++ .../java2nb/novel/book/mapper/BookMapper.java | 316 ++++++++++++++++ .../java2nb/novel/home/entity/HomeBook.java | 118 ++++++ .../novel/home/entity/HomeFriendLink.java | 133 +++++++ .../mapper/HomeBookDynamicSqlSupport.java | 59 +++ .../novel/home/mapper/HomeBookMapper.java | 197 ++++++++++ .../HomeFriendLinkDynamicSqlSupport.java | 64 ++++ .../home/mapper/HomeFriendLinkMapper.java | 204 ++++++++++ .../com/java2nb/novel/news/entity/News.java | 147 +++++++ .../novel/news/entity/NewsCategory.java | 101 +++++ .../mapper/NewsCategoryDynamicSqlSupport.java | 54 +++ .../novel/news/mapper/NewsCategoryMapper.java | 190 ++++++++++ .../news/mapper/NewsDynamicSqlSupport.java | 69 ++++ .../java2nb/novel/news/mapper/NewsMapper.java | 211 +++++++++++ .../User.java => pay/entity/PayLog.java} | 88 ++--- .../pay/mapper/PayLogDynamicSqlSupport.java | 69 ++++ .../novel/pay/mapper/PayLogMapper.java | 211 +++++++++++ .../novel/user/entity/UserBookshelf.java | 89 +++++ .../novel/user/entity/UserBuyRecord.java | 119 ++++++ .../novel/user/entity/UserFeedback.java | 63 +++ .../novel/user/entity/UserPayRecord.java | 105 +++++ .../novel/user/entity/UserReadHistory.java | 89 +++++ .../UserBookshelfDynamicSqlSupport.java | 49 +++ ...erMapper.java => UserBookshelfMapper.java} | 134 +++---- .../UserBuyRecordDynamicSqlSupport.java | 59 +++ .../user/mapper/UserBuyRecordMapper.java | 197 ++++++++++ .../user/mapper/UserDynamicSqlSupport.java | 69 ---- .../mapper/UserFeedbackDynamicSqlSupport.java | 39 ++ .../novel/user/mapper/UserFeedbackMapper.java | 169 +++++++++ .../UserPayRecordDynamicSqlSupport.java | 54 +++ .../user/mapper/UserPayRecordMapper.java | 190 ++++++++++ .../UserReadHistoryDynamicSqlSupport.java | 49 +++ .../user/mapper/UserReadHistoryMapper.java | 183 +++++++++ .../resources/mybatis/generatorConfig.xml | 4 +- novel-home/pom.xml | 42 ++ .../com/java2nb/novel/HomeApplication.java | 20 + .../java2nb/novel/home/entity/HomeBook.java | 119 ++++++ .../novel/home/entity/HomeFriendLink.java | 134 +++++++ .../mapper/HomeBookDynamicSqlSupport.java | 60 +++ .../novel/home/mapper/HomeBookMapper.java | 192 ++++++++++ .../HomeFriendLinkDynamicSqlSupport.java | 65 ++++ .../home/mapper/HomeFriendLinkMapper.java | 199 ++++++++++ novel-home/src/main/resources/application.yml | 4 + novel-home/src/main/resources/bootstrap.yml | 5 + .../src/main/resources/logback-boot.xml | 64 ++++ .../src/main/resources/bootstrap.yml | 4 +- novel-news/news-api/pom.xml | 34 ++ .../com/java2nb/novel/news/entity/News.java | 148 ++++++++ .../novel/news/entity/NewsCategory.java | 102 +++++ novel-news/news-service/pom.xml | 44 +++ .../com/java2nb/novel/NewsApplication.java | 20 + .../mapper/NewsCategoryDynamicSqlSupport.java | 55 +++ .../novel/news/mapper/NewsCategoryMapper.java | 184 +++++++++ .../news/mapper/NewsDynamicSqlSupport.java | 70 ++++ .../java2nb/novel/news/mapper/NewsMapper.java | 205 ++++++++++ .../src/main/resources/application.yml | 4 + .../src/main/resources/bootstrap.yml | 5 + .../src/main/resources/logback-boot.xml | 64 ++++ novel-news/pom.xml | 20 + novel-pay/pay-api/pom.xml | 32 ++ .../com/java2nb/novel/pay/entity/PayLog.java | 147 +++++++ novel-pay/pay-service/pom.xml | 40 ++ .../com/java2nb/novel/PayApplication.java | 20 + .../pay/mapper/PayLogDynamicSqlSupport.java | 70 ++++ .../novel/pay/mapper/PayLogMapper.java | 211 +++++++++++ .../src/main/resources/application.yml | 4 + .../src/main/resources/bootstrap.yml | 5 + .../src/main/resources/logback-boot.xml | 64 ++++ novel-pay/pom.xml | 20 + novel-search/pom.xml | 53 +++ .../com/java2nb/novel/SearchApplication.java | 20 + .../src/main/resources/application.yml | 4 + novel-search/src/main/resources/bootstrap.yml | 5 + .../src/main/resources/logback-boot.xml | 64 ++++ novel-user/user-api/pom.xml | 4 - .../novel/user/entity/UserBookshelf.java | 90 +++++ .../novel/user/entity/UserBuyRecord.java | 120 ++++++ .../novel/user/entity/UserFeedback.java | 64 ++++ .../novel/user/entity/UserPayRecord.java | 106 ++++++ .../novel/user/entity/UserReadHistory.java | 90 +++++ .../UserBookshelfDynamicSqlSupport.java | 50 +++ .../user/mapper/UserBookshelfMapper.java | 177 +++++++++ .../UserBuyRecordDynamicSqlSupport.java | 60 +++ .../user/mapper/UserBuyRecordMapper.java | 191 ++++++++++ .../mapper/UserFeedbackDynamicSqlSupport.java | 40 ++ .../novel/user/mapper/UserFeedbackMapper.java | 163 ++++++++ .../UserPayRecordDynamicSqlSupport.java | 55 +++ .../user/mapper/UserPayRecordMapper.java | 184 +++++++++ .../UserReadHistoryDynamicSqlSupport.java | 50 +++ .../user/mapper/UserReadHistoryMapper.java | 177 +++++++++ .../src/main/resources/application.yml | 4 - .../src/main/resources/bootstrap.yml | 11 +- pom.xml | 33 ++ 170 files changed, 14777 insertions(+), 212 deletions(-) create mode 100644 assert/QQ20200528-020224.png create mode 100644 assert/QQ20200528-020357.png create mode 100644 assert/QQ20200528-020445.png create mode 100644 assert/QQ20200528-020543.png create mode 100644 doc/yml/author-service/author-service.yml create mode 100644 doc/yml/book-service/book-service.yml create mode 100644 doc/yml/news-service/news-service.yml create mode 100644 doc/yml/novel-common/novel-jwt.yml create mode 100644 doc/yml/novel-gateway/novel-gateway.yml create mode 100644 doc/yml/novel-home/novel-home.yml create mode 100644 doc/yml/novel-monitor/novel-monitor.yml create mode 100644 doc/yml/novel-search/novel-search.yml create mode 100644 doc/yml/pay-service/pay-service.yml create mode 100644 doc/yml/user-service/user-service.yml create mode 100644 novel-author/author-api/pom.xml create mode 100644 novel-author/author-api/src/main/java/com/java2nb/novel/author/entity/Author.java create mode 100644 novel-author/author-api/src/main/java/com/java2nb/novel/author/entity/AuthorCode.java create mode 100644 novel-author/author-service/pom.xml create mode 100644 novel-author/author-service/src/main/java/com/java2nb/novel/AuthorApplication.java create mode 100644 novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeDynamicSqlSupport.java create mode 100644 novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeMapper.java create mode 100644 novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorDynamicSqlSupport.java create mode 100644 novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorMapper.java create mode 100644 novel-author/author-service/src/main/resources/application.yml create mode 100644 novel-author/author-service/src/main/resources/bootstrap.yml create mode 100644 novel-author/author-service/src/main/resources/logback-boot.xml create mode 100644 novel-author/pom.xml create mode 100644 novel-book/book-api/pom.xml create mode 100644 novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/Book.java create mode 100644 novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookCategory.java create mode 100644 novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookComment.java create mode 100644 novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookCommentReply.java create mode 100644 novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookContent.java create mode 100644 novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookIndex.java create mode 100644 novel-book/book-service/pom.xml create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/BookApplication.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCategoryDynamicSqlSupport.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCategoryMapper.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentDynamicSqlSupport.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentMapper.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyDynamicSqlSupport.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyMapper.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookContentDynamicSqlSupport.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookContentMapper.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookDynamicSqlSupport.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookIndexDynamicSqlSupport.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookIndexMapper.java create mode 100644 novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookMapper.java create mode 100644 novel-book/book-service/src/main/resources/application.yml create mode 100644 novel-book/book-service/src/main/resources/bootstrap.yml create mode 100644 novel-book/book-service/src/main/resources/logback-boot.xml create mode 100644 novel-book/pom.xml create mode 100644 novel-common/src/main/resources/bootstrap-dev.yml create mode 100644 novel-gen/src/main/java/com/java2nb/novel/author/entity/Author.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/author/entity/AuthorCode.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/entity/Book.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/entity/BookCategory.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/entity/BookComment.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/entity/BookCommentReply.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/entity/BookContent.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/entity/BookIndex.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCategoryDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCategoryMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookContentDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookContentMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookIndexDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookIndexMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/home/entity/HomeBook.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/home/entity/HomeFriendLink.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeBookDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeBookMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/news/entity/News.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/news/entity/NewsCategory.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsMapper.java rename novel-gen/src/main/java/com/java2nb/novel/{user/entity/User.java => pay/entity/PayLog.java} (60%) create mode 100644 novel-gen/src/main/java/com/java2nb/novel/pay/mapper/PayLogDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/pay/mapper/PayLogMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/entity/UserBookshelf.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/entity/UserBuyRecord.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/entity/UserFeedback.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/entity/UserPayRecord.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/entity/UserReadHistory.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfDynamicSqlSupport.java rename novel-gen/src/main/java/com/java2nb/novel/user/mapper/{UserMapper.java => UserBookshelfMapper.java} (55%) create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordMapper.java delete mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordMapper.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryDynamicSqlSupport.java create mode 100644 novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryMapper.java create mode 100644 novel-home/pom.xml create mode 100644 novel-home/src/main/java/com/java2nb/novel/HomeApplication.java create mode 100644 novel-home/src/main/java/com/java2nb/novel/home/entity/HomeBook.java create mode 100644 novel-home/src/main/java/com/java2nb/novel/home/entity/HomeFriendLink.java create mode 100644 novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeBookDynamicSqlSupport.java create mode 100644 novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeBookMapper.java create mode 100644 novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkDynamicSqlSupport.java create mode 100644 novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkMapper.java create mode 100644 novel-home/src/main/resources/application.yml create mode 100644 novel-home/src/main/resources/bootstrap.yml create mode 100644 novel-home/src/main/resources/logback-boot.xml create mode 100644 novel-news/news-api/pom.xml create mode 100644 novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/News.java create mode 100644 novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/NewsCategory.java create mode 100644 novel-news/news-service/pom.xml create mode 100644 novel-news/news-service/src/main/java/com/java2nb/novel/NewsApplication.java create mode 100644 novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryDynamicSqlSupport.java create mode 100644 novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryMapper.java create mode 100644 novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsDynamicSqlSupport.java create mode 100644 novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsMapper.java create mode 100644 novel-news/news-service/src/main/resources/application.yml create mode 100644 novel-news/news-service/src/main/resources/bootstrap.yml create mode 100644 novel-news/news-service/src/main/resources/logback-boot.xml create mode 100644 novel-news/pom.xml create mode 100644 novel-pay/pay-api/pom.xml create mode 100644 novel-pay/pay-api/src/main/java/com/java2nb/novel/pay/entity/PayLog.java create mode 100644 novel-pay/pay-service/pom.xml create mode 100644 novel-pay/pay-service/src/main/java/com/java2nb/novel/PayApplication.java create mode 100644 novel-pay/pay-service/src/main/java/com/java2nb/novel/pay/mapper/PayLogDynamicSqlSupport.java create mode 100644 novel-pay/pay-service/src/main/java/com/java2nb/novel/pay/mapper/PayLogMapper.java create mode 100644 novel-pay/pay-service/src/main/resources/application.yml create mode 100644 novel-pay/pay-service/src/main/resources/bootstrap.yml create mode 100644 novel-pay/pay-service/src/main/resources/logback-boot.xml create mode 100644 novel-pay/pom.xml create mode 100644 novel-search/pom.xml create mode 100644 novel-search/src/main/java/com/java2nb/novel/SearchApplication.java create mode 100644 novel-search/src/main/resources/application.yml create mode 100644 novel-search/src/main/resources/bootstrap.yml create mode 100644 novel-search/src/main/resources/logback-boot.xml create mode 100644 novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserBookshelf.java create mode 100644 novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserBuyRecord.java create mode 100644 novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserFeedback.java create mode 100644 novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserPayRecord.java create mode 100644 novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserReadHistory.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfDynamicSqlSupport.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfMapper.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordDynamicSqlSupport.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordMapper.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackDynamicSqlSupport.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackMapper.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordDynamicSqlSupport.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordMapper.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryDynamicSqlSupport.java create mode 100644 novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryMapper.java diff --git a/assert/QQ20200528-020224.png b/assert/QQ20200528-020224.png new file mode 100644 index 0000000000000000000000000000000000000000..753e1263d947539d5b871c35bbd7d5f2efd20c23 GIT binary patch literal 132881 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
  • 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 P0De>yH04WV9|is|8Wg?N literal 0 HcmV?d00001 diff --git a/assert/QQ20200528-020357.png b/assert/QQ20200528-020357.png new file mode 100644 index 0000000000000000000000000000000000000000..9d6636ecb2597a6f4b795e7fdfe35cccb00d1a8a GIT binary patch literal 138389 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 literal 0 HcmV?d00001 diff --git a/assert/QQ20200528-020445.png b/assert/QQ20200528-020445.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5aefe325882946bdf2e08586c40ea423ca1e04 GIT binary patch literal 128981 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�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 z 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 literal 0 HcmV?d00001 diff --git a/assert/QQ20200528-020543.png b/assert/QQ20200528-020543.png new file mode 100644 index 0000000000000000000000000000000000000000..389dbbf4c6670277c4a4f6dcdbff8c34da23bbaa GIT binary patch literal 116722 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.*), /$\{segment} + - id: monitor-route + uri: lb://novel-monitor + predicates: + - Path=/monitor/** + filters: + - RewritePath=/monitor/(?.*), /$\{segment} + + + \ No newline at end of file diff --git a/doc/yml/novel-home/novel-home.yml b/doc/yml/novel-home/novel-home.yml new file mode 100644 index 0000000..dacf29a --- /dev/null +++ b/doc/yml/novel-home/novel-home.yml @@ -0,0 +1,42 @@ +management: #开启SpringBoot Admin的监控 + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +server: + port: 640 +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/novel_cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: test123456 + driver-class-name: com.mysql.cj.jdbc.Driver + cloud: + nacos: + discovery: + server-addr: 47.106.243.172:8848 + namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c + + #Redis服务器IP + redis: + host: 47.106.243.172 + #Redis服务器连接端口 + port: 6379 + #Redis服务器连接密码 + password: + jedis: + pool: + #连接池最大连接数(使用负值表示没有限制) + max-active: 8 + #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: 1 + #连接池最大阻塞等待时间(使用负值表示没有限制) + max-idle: 8 + #连接池中的最小空闲连接 + min-idle: 0 + #连接超时时间(毫秒) + timeout: 30000 \ No newline at end of file diff --git a/doc/yml/novel-monitor/novel-monitor.yml b/doc/yml/novel-monitor/novel-monitor.yml new file mode 100644 index 0000000..18f1612 --- /dev/null +++ b/doc/yml/novel-monitor/novel-monitor.yml @@ -0,0 +1,19 @@ +server: + port: 529 + +spring: + security: # 配置登录用户名和密码 + user: + name: novel-plus + password: 123456 + boot: # 不显示admin-server的监控信息 + admin: + discovery: + ignored-services: ${spring.application.name} + + + cloud: + nacos: + discovery: + server-addr: 47.106.243.172:8848 + namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c \ No newline at end of file diff --git a/doc/yml/novel-search/novel-search.yml b/doc/yml/novel-search/novel-search.yml new file mode 100644 index 0000000..feaeaac --- /dev/null +++ b/doc/yml/novel-search/novel-search.yml @@ -0,0 +1,53 @@ +management: #开启SpringBoot Admin的监控 + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +server: + port: 670 +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/novel_cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: test123456 + driver-class-name: com.mysql.cj.jdbc.Driver + cloud: + nacos: + discovery: + server-addr: 47.106.243.172:8848 + namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c + + elasticsearch: + #是否开启搜索引擎,1:开启,0:不开启 + enable: 0 + jest: + uris: http://198.245.61.51:9200 + + #Redis服务器IP + redis: + host: 47.106.243.172 + #Redis服务器连接端口 + port: 6379 + #Redis服务器连接密码 + password: + jedis: + pool: + #连接池最大连接数(使用负值表示没有限制) + max-active: 8 + #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: 1 + #连接池最大阻塞等待时间(使用负值表示没有限制) + max-idle: 8 + #连接池中的最小空闲连接 + min-idle: 0 + #连接超时时间(毫秒) + timeout: 30000 + + + + + \ No newline at end of file diff --git a/doc/yml/pay-service/pay-service.yml b/doc/yml/pay-service/pay-service.yml new file mode 100644 index 0000000..217f521 --- /dev/null +++ b/doc/yml/pay-service/pay-service.yml @@ -0,0 +1,22 @@ +management: #开启SpringBoot Admin的监控 + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +server: + port: 650 +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/novel_cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: test123456 + driver-class-name: com.mysql.cj.jdbc.Driver + cloud: + nacos: + discovery: + server-addr: 47.106.243.172:8848 + namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c \ No newline at end of file diff --git a/doc/yml/user-service/user-service.yml b/doc/yml/user-service/user-service.yml new file mode 100644 index 0000000..5fa97a7 --- /dev/null +++ b/doc/yml/user-service/user-service.yml @@ -0,0 +1,52 @@ +management: #开启SpringBoot Admin的监控 + endpoints: + web: + exposure: + include: '*' + endpoint: + health: + show-details: always + +server: + port: 610 +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/novel_cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai + username: root + password: test123456 + driver-class-name: com.mysql.cj.jdbc.Driver + cloud: + nacos: + discovery: + server-addr: 47.106.243.172:8848 + namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c + + #Redis服务器IP + redis: + host: 47.106.243.172 + #Redis服务器连接端口 + port: 6379 + #Redis服务器连接密码 + password: + jedis: + pool: + #连接池最大连接数(使用负值表示没有限制) + max-active: 8 + #连接池最大阻塞等待时间(使用负值表示没有限制) + max-wait: 1 + #连接池最大阻塞等待时间(使用负值表示没有限制) + max-idle: 8 + #连接池中的最小空闲连接 + min-idle: 0 + #连接超时时间(毫秒) + timeout: 30000 + + + + + + + + + + diff --git a/novel-author/author-api/pom.xml b/novel-author/author-api/pom.xml new file mode 100644 index 0000000..75733b1 --- /dev/null +++ b/novel-author/author-api/pom.xml @@ -0,0 +1,34 @@ + + + + novel-author + com.java2nb.novel + 1.0.0 + + 4.0.0 + + author-api + + + + com.java2nb.novel + novel-common + + + org.springframework.boot + spring-boot-starter-cache + + + org.springframework.boot + spring-boot-starter-redis + + + + + + + + + \ No newline at end of file diff --git a/novel-author/author-api/src/main/java/com/java2nb/novel/author/entity/Author.java b/novel-author/author-api/src/main/java/com/java2nb/novel/author/entity/Author.java new file mode 100644 index 0000000..783ee28 --- /dev/null +++ b/novel-author/author-api/src/main/java/com/java2nb/novel/author/entity/Author.java @@ -0,0 +1,148 @@ +package com.java2nb.novel.author.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class Author { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "邀请码") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String inviteCode; + + @ApiModelProperty(value = "笔名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String penName; + + @ApiModelProperty(value = "手机号码") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String telPhone; + + @ApiModelProperty(value = "QQ或微信账号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String chatAccount; + + @ApiModelProperty(value = "电子邮箱") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String email; + + @ApiModelProperty(value = "作品方向,0:男频,1:女频") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte workDirection; + + @ApiModelProperty(value = "0:正常,1:封禁") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte status; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getInviteCode() { + return inviteCode; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode == null ? null : inviteCode.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getPenName() { + return penName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPenName(String penName) { + this.penName = penName == null ? null : penName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getTelPhone() { + return telPhone; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTelPhone(String telPhone) { + this.telPhone = telPhone == null ? null : telPhone.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getChatAccount() { + return chatAccount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setChatAccount(String chatAccount) { + this.chatAccount = chatAccount == null ? null : chatAccount.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getEmail() { + return email; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setEmail(String email) { + this.email = email == null ? null : email.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getWorkDirection() { + return workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWorkDirection(Byte workDirection) { + this.workDirection = workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getStatus() { + return status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setStatus(Byte status) { + this.status = status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-author/author-api/src/main/java/com/java2nb/novel/author/entity/AuthorCode.java b/novel-author/author-api/src/main/java/com/java2nb/novel/author/entity/AuthorCode.java new file mode 100644 index 0000000..4c62163 --- /dev/null +++ b/novel-author/author-api/src/main/java/com/java2nb/novel/author/entity/AuthorCode.java @@ -0,0 +1,92 @@ +package com.java2nb.novel.author.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class AuthorCode { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "邀请码") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String inviteCode; + + @ApiModelProperty(value = "有效时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date validityTime; + + @ApiModelProperty(value = "是否使用过,0:未使用,1:使用过") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isUse; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "创建人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getInviteCode() { + return inviteCode; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode == null ? null : inviteCode.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getValidityTime() { + return validityTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setValidityTime(Date validityTime) { + this.validityTime = validityTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsUse() { + return isUse; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsUse(Byte isUse) { + this.isUse = isUse; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } +} \ No newline at end of file diff --git a/novel-author/author-service/pom.xml b/novel-author/author-service/pom.xml new file mode 100644 index 0000000..aea0b7c --- /dev/null +++ b/novel-author/author-service/pom.xml @@ -0,0 +1,43 @@ + + + + novel-author + com.java2nb.novel + 1.0.0 + + 4.0.0 + + author-service + + + + com.java2nb.novel + author-api + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.cloud + spring-cloud-netflix-hystrix + + + + + + + + \ No newline at end of file diff --git a/novel-author/author-service/src/main/java/com/java2nb/novel/AuthorApplication.java b/novel-author/author-service/src/main/java/com/java2nb/novel/AuthorApplication.java new file mode 100644 index 0000000..11f4510 --- /dev/null +++ b/novel-author/author-service/src/main/java/com/java2nb/novel/AuthorApplication.java @@ -0,0 +1,20 @@ +package com.java2nb.novel; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * 作家微服务启动器 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/27 + */ +@SpringBootApplication +@EnableFeignClients +public class AuthorApplication { + + public static void main(String[] args) { + SpringApplication.run(AuthorApplication.class); + } +} diff --git a/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeDynamicSqlSupport.java b/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeDynamicSqlSupport.java new file mode 100644 index 0000000..23245da --- /dev/null +++ b/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeDynamicSqlSupport.java @@ -0,0 +1,50 @@ +package com.java2nb.novel.author.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class AuthorCodeDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final AuthorCode authorCode = new AuthorCode(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = authorCode.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn inviteCode = authorCode.inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn validityTime = authorCode.validityTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isUse = authorCode.isUse; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = authorCode.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = authorCode.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class AuthorCode extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn inviteCode = column("invite_code", JDBCType.VARCHAR); + + public final SqlColumn validityTime = column("validity_time", JDBCType.TIMESTAMP); + + public final SqlColumn isUse = column("is_use", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public AuthorCode() { + super("author_code"); + } + } +} \ No newline at end of file diff --git a/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeMapper.java b/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeMapper.java new file mode 100644 index 0000000..a41fb3a --- /dev/null +++ b/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeMapper.java @@ -0,0 +1,177 @@ +package com.java2nb.novel.author.mapper; + +import com.java2nb.novel.author.entity.AuthorCode; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.author.mapper.AuthorCodeDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface AuthorCodeMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorCodeResult") + AuthorCode selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorCodeResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="invite_code", property="inviteCode", jdbcType=JdbcType.VARCHAR), + @Result(column="validity_time", property="validityTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="is_use", property="isUse", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(authorCode); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, authorCode); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, authorCode) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(AuthorCode record) { + return insert(SqlBuilder.insert(record) + .into(authorCode) + .map(id).toProperty("id") + .map(inviteCode).toProperty("inviteCode") + .map(validityTime).toProperty("validityTime") + .map(isUse).toProperty("isUse") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(AuthorCode record) { + return insert(SqlBuilder.insert(record) + .into(authorCode) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(inviteCode).toPropertyWhenPresent("inviteCode", record::getInviteCode) + .map(validityTime).toPropertyWhenPresent("validityTime", record::getValidityTime) + .map(isUse).toPropertyWhenPresent("isUse", record::getIsUse) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, inviteCode, validityTime, isUse, createTime, createUserId) + .from(authorCode); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, inviteCode, validityTime, isUse, createTime, createUserId) + .from(authorCode); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default AuthorCode selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, inviteCode, validityTime, isUse, createTime, createUserId) + .from(authorCode) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(AuthorCode record) { + return UpdateDSL.updateWithMapper(this::update, authorCode) + .set(id).equalTo(record::getId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(validityTime).equalTo(record::getValidityTime) + .set(isUse).equalTo(record::getIsUse) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(AuthorCode record) { + return UpdateDSL.updateWithMapper(this::update, authorCode) + .set(id).equalToWhenPresent(record::getId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(validityTime).equalToWhenPresent(record::getValidityTime) + .set(isUse).equalToWhenPresent(record::getIsUse) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(AuthorCode record) { + return UpdateDSL.updateWithMapper(this::update, authorCode) + .set(inviteCode).equalTo(record::getInviteCode) + .set(validityTime).equalTo(record::getValidityTime) + .set(isUse).equalTo(record::getIsUse) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(AuthorCode record) { + return UpdateDSL.updateWithMapper(this::update, authorCode) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(validityTime).equalToWhenPresent(record::getValidityTime) + .set(isUse).equalToWhenPresent(record::getIsUse) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorDynamicSqlSupport.java b/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorDynamicSqlSupport.java new file mode 100644 index 0000000..e81dbac --- /dev/null +++ b/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorDynamicSqlSupport.java @@ -0,0 +1,70 @@ +package com.java2nb.novel.author.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class AuthorDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final Author author = new Author(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = author.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = author.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn inviteCode = author.inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn penName = author.penName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn telPhone = author.telPhone; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn chatAccount = author.chatAccount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn email = author.email; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn workDirection = author.workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn status = author.status; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = author.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class Author extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn inviteCode = column("invite_code", JDBCType.VARCHAR); + + public final SqlColumn penName = column("pen_name", JDBCType.VARCHAR); + + public final SqlColumn telPhone = column("tel_phone", JDBCType.VARCHAR); + + public final SqlColumn chatAccount = column("chat_account", JDBCType.VARCHAR); + + public final SqlColumn email = column("email", JDBCType.VARCHAR); + + public final SqlColumn workDirection = column("work_direction", JDBCType.TINYINT); + + public final SqlColumn status = column("status", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public Author() { + super("author"); + } + } +} \ No newline at end of file diff --git a/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorMapper.java b/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorMapper.java new file mode 100644 index 0000000..ade843c --- /dev/null +++ b/novel-author/author-service/src/main/java/com/java2nb/novel/author/mapper/AuthorMapper.java @@ -0,0 +1,205 @@ +package com.java2nb.novel.author.mapper; + +import com.java2nb.novel.author.entity.Author; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.author.mapper.AuthorDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface AuthorMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorResult") + Author selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="invite_code", property="inviteCode", jdbcType=JdbcType.VARCHAR), + @Result(column="pen_name", property="penName", jdbcType=JdbcType.VARCHAR), + @Result(column="tel_phone", property="telPhone", jdbcType=JdbcType.VARCHAR), + @Result(column="chat_account", property="chatAccount", jdbcType=JdbcType.VARCHAR), + @Result(column="email", property="email", jdbcType=JdbcType.VARCHAR), + @Result(column="work_direction", property="workDirection", jdbcType=JdbcType.TINYINT), + @Result(column="status", property="status", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(author); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, author); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, author) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(Author record) { + return insert(SqlBuilder.insert(record) + .into(author) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(inviteCode).toProperty("inviteCode") + .map(penName).toProperty("penName") + .map(telPhone).toProperty("telPhone") + .map(chatAccount).toProperty("chatAccount") + .map(email).toProperty("email") + .map(workDirection).toProperty("workDirection") + .map(status).toProperty("status") + .map(createTime).toProperty("createTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(Author record) { + return insert(SqlBuilder.insert(record) + .into(author) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(inviteCode).toPropertyWhenPresent("inviteCode", record::getInviteCode) + .map(penName).toPropertyWhenPresent("penName", record::getPenName) + .map(telPhone).toPropertyWhenPresent("telPhone", record::getTelPhone) + .map(chatAccount).toPropertyWhenPresent("chatAccount", record::getChatAccount) + .map(email).toPropertyWhenPresent("email", record::getEmail) + .map(workDirection).toPropertyWhenPresent("workDirection", record::getWorkDirection) + .map(status).toPropertyWhenPresent("status", record::getStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, inviteCode, penName, telPhone, chatAccount, email, workDirection, status, createTime) + .from(author); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, inviteCode, penName, telPhone, chatAccount, email, workDirection, status, createTime) + .from(author); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Author selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, inviteCode, penName, telPhone, chatAccount, email, workDirection, status, createTime) + .from(author) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(Author record) { + return UpdateDSL.updateWithMapper(this::update, author) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(penName).equalTo(record::getPenName) + .set(telPhone).equalTo(record::getTelPhone) + .set(chatAccount).equalTo(record::getChatAccount) + .set(email).equalTo(record::getEmail) + .set(workDirection).equalTo(record::getWorkDirection) + .set(status).equalTo(record::getStatus) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(Author record) { + return UpdateDSL.updateWithMapper(this::update, author) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(penName).equalToWhenPresent(record::getPenName) + .set(telPhone).equalToWhenPresent(record::getTelPhone) + .set(chatAccount).equalToWhenPresent(record::getChatAccount) + .set(email).equalToWhenPresent(record::getEmail) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(status).equalToWhenPresent(record::getStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(Author record) { + return UpdateDSL.updateWithMapper(this::update, author) + .set(userId).equalTo(record::getUserId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(penName).equalTo(record::getPenName) + .set(telPhone).equalTo(record::getTelPhone) + .set(chatAccount).equalTo(record::getChatAccount) + .set(email).equalTo(record::getEmail) + .set(workDirection).equalTo(record::getWorkDirection) + .set(status).equalTo(record::getStatus) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(Author record) { + return UpdateDSL.updateWithMapper(this::update, author) + .set(userId).equalToWhenPresent(record::getUserId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(penName).equalToWhenPresent(record::getPenName) + .set(telPhone).equalToWhenPresent(record::getTelPhone) + .set(chatAccount).equalToWhenPresent(record::getChatAccount) + .set(email).equalToWhenPresent(record::getEmail) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(status).equalToWhenPresent(record::getStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-author/author-service/src/main/resources/application.yml b/novel-author/author-service/src/main/resources/application.yml new file mode 100644 index 0000000..26ec507 --- /dev/null +++ b/novel-author/author-service/src/main/resources/application.yml @@ -0,0 +1,4 @@ +spring: + profiles: + include: [common] + diff --git a/novel-author/author-service/src/main/resources/bootstrap.yml b/novel-author/author-service/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..c728fb3 --- /dev/null +++ b/novel-author/author-service/src/main/resources/bootstrap.yml @@ -0,0 +1,13 @@ +spring: + application: + name: author-service + cloud: + nacos: + config: + ext‐config[0]: + data‐id: novel-jwt.yml + group: novel-common + refresh: true + profiles: + active: dev + diff --git a/novel-author/author-service/src/main/resources/logback-boot.xml b/novel-author/author-service/src/main/resources/logback-boot.xml new file mode 100644 index 0000000..c4ee07f --- /dev/null +++ b/novel-author/author-service/src/main/resources/logback-boot.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + + logs/author-service.log + + + + + + logs/debug.%d.%i.log + + 30 + + + 10MB + + + + + + %d %p (%file:%line\)- %m%n + + + UTF-8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/novel-author/pom.xml b/novel-author/pom.xml new file mode 100644 index 0000000..ee3a4cb --- /dev/null +++ b/novel-author/pom.xml @@ -0,0 +1,22 @@ + + + + novel-cloud + com.java2nb.novel + 1.0.0 + + 4.0.0 + + novel-author + pom + + author-api + author-service + + + + + + \ No newline at end of file diff --git a/novel-book/book-api/pom.xml b/novel-book/book-api/pom.xml new file mode 100644 index 0000000..d217296 --- /dev/null +++ b/novel-book/book-api/pom.xml @@ -0,0 +1,32 @@ + + + + novel-book + com.java2nb.novel + 1.0.0 + + 4.0.0 + + book-api + + + + com.java2nb.novel + novel-common + + + org.springframework.boot + spring-boot-starter-cache + + + org.springframework.boot + spring-boot-starter-redis + + + + + + + \ No newline at end of file diff --git a/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/Book.java b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/Book.java new file mode 100644 index 0000000..d6f5b54 --- /dev/null +++ b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/Book.java @@ -0,0 +1,358 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class Book { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "作品方向,0:男频,1:女频'") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte workDirection; + + @ApiModelProperty(value = "分类ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer catId; + + @ApiModelProperty(value = "分类名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String catName; + + @ApiModelProperty(value = "小说封面") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String picUrl; + + @ApiModelProperty(value = "小说名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String bookName; + + @ApiModelProperty(value = "作者id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long authorId; + + @ApiModelProperty(value = "作者名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String authorName; + + @ApiModelProperty(value = "书籍描述") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String bookDesc; + + @ApiModelProperty(value = "评分,预留字段") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Float score; + + @ApiModelProperty(value = "书籍状态,0:连载中,1:已完结") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte bookStatus; + + @ApiModelProperty(value = "点击量") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long visitCount; + + @ApiModelProperty(value = "总字数") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer wordCount; + + @ApiModelProperty(value = "评论数") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer commentCount; + + @ApiModelProperty(value = "最新目录ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long lastIndexId; + + @ApiModelProperty(value = "最新目录名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String lastIndexName; + + @ApiModelProperty(value = "最新目录更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date lastIndexUpdateTime; + + @ApiModelProperty(value = "是否收费,1:收费,0:免费") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isVip; + + @ApiModelProperty(value = "状态,0:入库,1:上架") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte status; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "爬虫源站ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer crawlSourceId; + + @ApiModelProperty(value = "抓取的源站小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String crawlBookId; + + @ApiModelProperty(value = "最后一次的抓取时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date crawlLastTime; + + @ApiModelProperty(value = "是否已停止更新,0:未停止,1:已停止") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte crawlIsStop; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getWorkDirection() { + return workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWorkDirection(Byte workDirection) { + this.workDirection = workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getCatId() { + return catId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCatId(Integer catId) { + this.catId = catId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getCatName() { + return catName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCatName(String catName) { + this.catName = catName == null ? null : catName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getPicUrl() { + return picUrl; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPicUrl(String picUrl) { + this.picUrl = picUrl == null ? null : picUrl.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getBookName() { + return bookName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookName(String bookName) { + this.bookName = bookName == null ? null : bookName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getAuthorId() { + return authorId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuthorId(Long authorId) { + this.authorId = authorId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getAuthorName() { + return authorName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuthorName(String authorName) { + this.authorName = authorName == null ? null : authorName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getBookDesc() { + return bookDesc; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookDesc(String bookDesc) { + this.bookDesc = bookDesc == null ? null : bookDesc.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Float getScore() { + return score; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setScore(Float score) { + this.score = score; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getBookStatus() { + return bookStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookStatus(Byte bookStatus) { + this.bookStatus = bookStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getVisitCount() { + return visitCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setVisitCount(Long visitCount) { + this.visitCount = visitCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getWordCount() { + return wordCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWordCount(Integer wordCount) { + this.wordCount = wordCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getCommentCount() { + return commentCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCommentCount(Integer commentCount) { + this.commentCount = commentCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getLastIndexId() { + return lastIndexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLastIndexId(Long lastIndexId) { + this.lastIndexId = lastIndexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getLastIndexName() { + return lastIndexName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLastIndexName(String lastIndexName) { + this.lastIndexName = lastIndexName == null ? null : lastIndexName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getLastIndexUpdateTime() { + return lastIndexUpdateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLastIndexUpdateTime(Date lastIndexUpdateTime) { + this.lastIndexUpdateTime = lastIndexUpdateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsVip() { + return isVip; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsVip(Byte isVip) { + this.isVip = isVip; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getStatus() { + return status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setStatus(Byte status) { + this.status = status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getCrawlSourceId() { + return crawlSourceId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCrawlSourceId(Integer crawlSourceId) { + this.crawlSourceId = crawlSourceId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getCrawlBookId() { + return crawlBookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCrawlBookId(String crawlBookId) { + this.crawlBookId = crawlBookId == null ? null : crawlBookId.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCrawlLastTime() { + return crawlLastTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCrawlLastTime(Date crawlLastTime) { + this.crawlLastTime = crawlLastTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getCrawlIsStop() { + return crawlIsStop; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCrawlIsStop(Byte crawlIsStop) { + this.crawlIsStop = crawlIsStop; + } +} \ No newline at end of file diff --git a/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookCategory.java b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookCategory.java new file mode 100644 index 0000000..c3a93ca --- /dev/null +++ b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookCategory.java @@ -0,0 +1,116 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class BookCategory { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer id; + + @ApiModelProperty(value = "作品方向,0:男频,1:女频'") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte workDirection; + + @ApiModelProperty(value = "分类名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String name; + + @ApiModelProperty(value = "排序") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Integer id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getWorkDirection() { + return workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWorkDirection(Byte workDirection) { + this.workDirection = workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getName() { + return name; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getSort() { + return sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSort(Byte sort) { + this.sort = sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookComment.java b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookComment.java new file mode 100644 index 0000000..c8e5593 --- /dev/null +++ b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookComment.java @@ -0,0 +1,106 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class BookComment { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "评价内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String commentContent; + + @ApiModelProperty(value = "回复数量") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer replyCount; + + @ApiModelProperty(value = "审核状态,0:待审核,1:审核通过,2:审核不通过") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte auditStatus; + + @ApiModelProperty(value = "评价时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "评价人") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getCommentContent() { + return commentContent; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCommentContent(String commentContent) { + this.commentContent = commentContent == null ? null : commentContent.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getReplyCount() { + return replyCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setReplyCount(Integer replyCount) { + this.replyCount = replyCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getAuditStatus() { + return auditStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuditStatus(Byte auditStatus) { + this.auditStatus = auditStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } +} \ No newline at end of file diff --git a/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookCommentReply.java b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookCommentReply.java new file mode 100644 index 0000000..9efc8a4 --- /dev/null +++ b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookCommentReply.java @@ -0,0 +1,92 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class BookCommentReply { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "评论ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long commentId; + + @ApiModelProperty(value = "回复内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String replyContent; + + @ApiModelProperty(value = "审核状态,0:待审核,1:审核通过,2:审核不通过") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte auditStatus; + + @ApiModelProperty(value = "回复用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "回复时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCommentId() { + return commentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCommentId(Long commentId) { + this.commentId = commentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getReplyContent() { + return replyContent; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setReplyContent(String replyContent) { + this.replyContent = replyContent == null ? null : replyContent.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getAuditStatus() { + return auditStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuditStatus(Byte auditStatus) { + this.auditStatus = auditStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } +} \ No newline at end of file diff --git a/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookContent.java b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookContent.java new file mode 100644 index 0000000..e01ba3e --- /dev/null +++ b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookContent.java @@ -0,0 +1,49 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; + +public class BookContent { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "目录ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long indexId; + + @ApiModelProperty(value = "小说章节内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getIndexId() { + return indexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIndexId(Long indexId) { + this.indexId = indexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getContent() { + return content; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setContent(String content) { + this.content = content == null ? null : content.trim(); + } +} \ No newline at end of file diff --git a/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookIndex.java b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookIndex.java new file mode 100644 index 0000000..55df368 --- /dev/null +++ b/novel-book/book-api/src/main/java/com/java2nb/novel/book/entity/BookIndex.java @@ -0,0 +1,118 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class BookIndex { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "目录号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer indexNum; + + @ApiModelProperty(value = "目录名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String indexName; + + @ApiModelProperty(value = "字数") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer wordCount; + + @ApiModelProperty(value = "是否收费,1:收费,0:免费") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isVip; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getIndexNum() { + return indexNum; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIndexNum(Integer indexNum) { + this.indexNum = indexNum; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getIndexName() { + return indexName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIndexName(String indexName) { + this.indexName = indexName == null ? null : indexName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getWordCount() { + return wordCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWordCount(Integer wordCount) { + this.wordCount = wordCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsVip() { + return isVip; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsVip(Byte isVip) { + this.isVip = isVip; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-book/book-service/pom.xml b/novel-book/book-service/pom.xml new file mode 100644 index 0000000..135fb0a --- /dev/null +++ b/novel-book/book-service/pom.xml @@ -0,0 +1,44 @@ + + + + novel-book + com.java2nb.novel + 1.0.0 + + 4.0.0 + + book-service + + + + + com.java2nb.novel + book-api + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.cloud + spring-cloud-netflix-hystrix + + + + + + + + \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/BookApplication.java b/novel-book/book-service/src/main/java/com/java2nb/novel/BookApplication.java new file mode 100644 index 0000000..a76bbe5 --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/BookApplication.java @@ -0,0 +1,20 @@ +package com.java2nb.novel; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * 小说微服务启动器 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/27 + */ +@SpringBootApplication +@EnableFeignClients +public class BookApplication { + + public static void main(String[] args) { + SpringApplication.run(BookApplication.class); + } +} diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCategoryDynamicSqlSupport.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCategoryDynamicSqlSupport.java new file mode 100644 index 0000000..d21b01a --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCategoryDynamicSqlSupport.java @@ -0,0 +1,60 @@ +package com.java2nb.novel.book.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class BookCategoryDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookCategory bookCategory = new BookCategory(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookCategory.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn workDirection = bookCategory.workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn name = bookCategory.name; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sort = bookCategory.sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = bookCategory.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = bookCategory.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = bookCategory.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = bookCategory.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookCategory extends SqlTable { + public final SqlColumn id = column("id", JDBCType.INTEGER); + + public final SqlColumn workDirection = column("work_direction", JDBCType.TINYINT); + + public final SqlColumn name = column("name", JDBCType.VARCHAR); + + public final SqlColumn sort = column("sort", JDBCType.TINYINT); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public BookCategory() { + super("book_category"); + } + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCategoryMapper.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCategoryMapper.java new file mode 100644 index 0000000..a5b83ba --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCategoryMapper.java @@ -0,0 +1,191 @@ +package com.java2nb.novel.book.mapper; + +import com.java2nb.novel.book.entity.BookCategory; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.book.mapper.BookCategoryDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface BookCategoryMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookCategoryResult") + BookCategory selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookCategoryResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true), + @Result(column="work_direction", property="workDirection", jdbcType=JdbcType.TINYINT), + @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), + @Result(column="sort", property="sort", jdbcType=JdbcType.TINYINT), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Integer id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookCategory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookCategory record) { + return insert(SqlBuilder.insert(record) + .into(bookCategory) + .map(id).toProperty("id") + .map(workDirection).toProperty("workDirection") + .map(name).toProperty("name") + .map(sort).toProperty("sort") + .map(createUserId).toProperty("createUserId") + .map(createTime).toProperty("createTime") + .map(updateUserId).toProperty("updateUserId") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookCategory record) { + return insert(SqlBuilder.insert(record) + .into(bookCategory) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(workDirection).toPropertyWhenPresent("workDirection", record::getWorkDirection) + .map(name).toPropertyWhenPresent("name", record::getName) + .map(sort).toPropertyWhenPresent("sort", record::getSort) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, workDirection, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(bookCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, workDirection, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(bookCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookCategory selectByPrimaryKey(Integer id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, workDirection, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(bookCategory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookCategory record) { + return UpdateDSL.updateWithMapper(this::update, bookCategory) + .set(id).equalTo(record::getId) + .set(workDirection).equalTo(record::getWorkDirection) + .set(name).equalTo(record::getName) + .set(sort).equalTo(record::getSort) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookCategory record) { + return UpdateDSL.updateWithMapper(this::update, bookCategory) + .set(id).equalToWhenPresent(record::getId) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(name).equalToWhenPresent(record::getName) + .set(sort).equalToWhenPresent(record::getSort) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookCategory record) { + return UpdateDSL.updateWithMapper(this::update, bookCategory) + .set(workDirection).equalTo(record::getWorkDirection) + .set(name).equalTo(record::getName) + .set(sort).equalTo(record::getSort) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookCategory record) { + return UpdateDSL.updateWithMapper(this::update, bookCategory) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(name).equalToWhenPresent(record::getName) + .set(sort).equalToWhenPresent(record::getSort) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentDynamicSqlSupport.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentDynamicSqlSupport.java new file mode 100644 index 0000000..52342e3 --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentDynamicSqlSupport.java @@ -0,0 +1,55 @@ +package com.java2nb.novel.book.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class BookCommentDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookComment bookComment = new BookComment(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookComment.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = bookComment.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn commentContent = bookComment.commentContent; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn replyCount = bookComment.replyCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn auditStatus = bookComment.auditStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = bookComment.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = bookComment.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookComment extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn commentContent = column("comment_content", JDBCType.VARCHAR); + + public final SqlColumn replyCount = column("reply_count", JDBCType.INTEGER); + + public final SqlColumn auditStatus = column("audit_status", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public BookComment() { + super("book_comment"); + } + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentMapper.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentMapper.java new file mode 100644 index 0000000..14ceba6 --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentMapper.java @@ -0,0 +1,184 @@ +package com.java2nb.novel.book.mapper; + +import com.java2nb.novel.book.entity.BookComment; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.book.mapper.BookCommentDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface BookCommentMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookCommentResult") + BookComment selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookCommentResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="comment_content", property="commentContent", jdbcType=JdbcType.VARCHAR), + @Result(column="reply_count", property="replyCount", jdbcType=JdbcType.INTEGER), + @Result(column="audit_status", property="auditStatus", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookComment); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookComment); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookComment) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookComment record) { + return insert(SqlBuilder.insert(record) + .into(bookComment) + .map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(commentContent).toProperty("commentContent") + .map(replyCount).toProperty("replyCount") + .map(auditStatus).toProperty("auditStatus") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookComment record) { + return insert(SqlBuilder.insert(record) + .into(bookComment) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(commentContent).toPropertyWhenPresent("commentContent", record::getCommentContent) + .map(replyCount).toPropertyWhenPresent("replyCount", record::getReplyCount) + .map(auditStatus).toPropertyWhenPresent("auditStatus", record::getAuditStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, bookId, commentContent, replyCount, auditStatus, createTime, createUserId) + .from(bookComment); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, bookId, commentContent, replyCount, auditStatus, createTime, createUserId) + .from(bookComment); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookComment selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, bookId, commentContent, replyCount, auditStatus, createTime, createUserId) + .from(bookComment) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookComment record) { + return UpdateDSL.updateWithMapper(this::update, bookComment) + .set(id).equalTo(record::getId) + .set(bookId).equalTo(record::getBookId) + .set(commentContent).equalTo(record::getCommentContent) + .set(replyCount).equalTo(record::getReplyCount) + .set(auditStatus).equalTo(record::getAuditStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookComment record) { + return UpdateDSL.updateWithMapper(this::update, bookComment) + .set(id).equalToWhenPresent(record::getId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(commentContent).equalToWhenPresent(record::getCommentContent) + .set(replyCount).equalToWhenPresent(record::getReplyCount) + .set(auditStatus).equalToWhenPresent(record::getAuditStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookComment record) { + return UpdateDSL.updateWithMapper(this::update, bookComment) + .set(bookId).equalTo(record::getBookId) + .set(commentContent).equalTo(record::getCommentContent) + .set(replyCount).equalTo(record::getReplyCount) + .set(auditStatus).equalTo(record::getAuditStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookComment record) { + return UpdateDSL.updateWithMapper(this::update, bookComment) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(commentContent).equalToWhenPresent(record::getCommentContent) + .set(replyCount).equalToWhenPresent(record::getReplyCount) + .set(auditStatus).equalToWhenPresent(record::getAuditStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyDynamicSqlSupport.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyDynamicSqlSupport.java new file mode 100644 index 0000000..75506e8 --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyDynamicSqlSupport.java @@ -0,0 +1,50 @@ +package com.java2nb.novel.book.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class BookCommentReplyDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookCommentReply bookCommentReply = new BookCommentReply(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookCommentReply.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn commentId = bookCommentReply.commentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn replyContent = bookCommentReply.replyContent; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn auditStatus = bookCommentReply.auditStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = bookCommentReply.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = bookCommentReply.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookCommentReply extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn commentId = column("comment_id", JDBCType.BIGINT); + + public final SqlColumn replyContent = column("reply_content", JDBCType.VARCHAR); + + public final SqlColumn auditStatus = column("audit_status", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public BookCommentReply() { + super("book_comment_reply"); + } + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyMapper.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyMapper.java new file mode 100644 index 0000000..1669af1 --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyMapper.java @@ -0,0 +1,177 @@ +package com.java2nb.novel.book.mapper; + +import com.java2nb.novel.book.entity.BookCommentReply; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.book.mapper.BookCommentReplyDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface BookCommentReplyMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookCommentReplyResult") + BookCommentReply selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookCommentReplyResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="comment_id", property="commentId", jdbcType=JdbcType.BIGINT), + @Result(column="reply_content", property="replyContent", jdbcType=JdbcType.VARCHAR), + @Result(column="audit_status", property="auditStatus", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookCommentReply); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookCommentReply); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookCommentReply) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookCommentReply record) { + return insert(SqlBuilder.insert(record) + .into(bookCommentReply) + .map(id).toProperty("id") + .map(commentId).toProperty("commentId") + .map(replyContent).toProperty("replyContent") + .map(auditStatus).toProperty("auditStatus") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookCommentReply record) { + return insert(SqlBuilder.insert(record) + .into(bookCommentReply) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(commentId).toPropertyWhenPresent("commentId", record::getCommentId) + .map(replyContent).toPropertyWhenPresent("replyContent", record::getReplyContent) + .map(auditStatus).toPropertyWhenPresent("auditStatus", record::getAuditStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, commentId, replyContent, auditStatus, createTime, createUserId) + .from(bookCommentReply); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, commentId, replyContent, auditStatus, createTime, createUserId) + .from(bookCommentReply); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookCommentReply selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, commentId, replyContent, auditStatus, createTime, createUserId) + .from(bookCommentReply) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookCommentReply record) { + return UpdateDSL.updateWithMapper(this::update, bookCommentReply) + .set(id).equalTo(record::getId) + .set(commentId).equalTo(record::getCommentId) + .set(replyContent).equalTo(record::getReplyContent) + .set(auditStatus).equalTo(record::getAuditStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookCommentReply record) { + return UpdateDSL.updateWithMapper(this::update, bookCommentReply) + .set(id).equalToWhenPresent(record::getId) + .set(commentId).equalToWhenPresent(record::getCommentId) + .set(replyContent).equalToWhenPresent(record::getReplyContent) + .set(auditStatus).equalToWhenPresent(record::getAuditStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookCommentReply record) { + return UpdateDSL.updateWithMapper(this::update, bookCommentReply) + .set(commentId).equalTo(record::getCommentId) + .set(replyContent).equalTo(record::getReplyContent) + .set(auditStatus).equalTo(record::getAuditStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookCommentReply record) { + return UpdateDSL.updateWithMapper(this::update, bookCommentReply) + .set(commentId).equalToWhenPresent(record::getCommentId) + .set(replyContent).equalToWhenPresent(record::getReplyContent) + .set(auditStatus).equalToWhenPresent(record::getAuditStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookContentDynamicSqlSupport.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookContentDynamicSqlSupport.java new file mode 100644 index 0000000..d70367f --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookContentDynamicSqlSupport.java @@ -0,0 +1,34 @@ +package com.java2nb.novel.book.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; + +public final class BookContentDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookContent bookContent = new BookContent(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookContent.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn indexId = bookContent.indexId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn content = bookContent.content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookContent extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn indexId = column("index_id", JDBCType.BIGINT); + + public final SqlColumn content = column("content", JDBCType.LONGVARCHAR); + + public BookContent() { + super("book_content"); + } + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookContentMapper.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookContentMapper.java new file mode 100644 index 0000000..158de86 --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookContentMapper.java @@ -0,0 +1,156 @@ +package com.java2nb.novel.book.mapper; + +import com.java2nb.novel.book.entity.BookContent; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.book.mapper.BookContentDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface BookContentMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookContentResult") + BookContent selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookContentResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="index_id", property="indexId", jdbcType=JdbcType.BIGINT), + @Result(column="content", property="content", jdbcType=JdbcType.LONGVARCHAR) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookContent) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookContent record) { + return insert(SqlBuilder.insert(record) + .into(bookContent) + .map(id).toProperty("id") + .map(indexId).toProperty("indexId") + .map(content).toProperty("content") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookContent record) { + return insert(SqlBuilder.insert(record) + .into(bookContent) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(indexId).toPropertyWhenPresent("indexId", record::getIndexId) + .map(content).toPropertyWhenPresent("content", record::getContent) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, indexId, content) + .from(bookContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, indexId, content) + .from(bookContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookContent selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, indexId, content) + .from(bookContent) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookContent record) { + return UpdateDSL.updateWithMapper(this::update, bookContent) + .set(id).equalTo(record::getId) + .set(indexId).equalTo(record::getIndexId) + .set(content).equalTo(record::getContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookContent record) { + return UpdateDSL.updateWithMapper(this::update, bookContent) + .set(id).equalToWhenPresent(record::getId) + .set(indexId).equalToWhenPresent(record::getIndexId) + .set(content).equalToWhenPresent(record::getContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookContent record) { + return UpdateDSL.updateWithMapper(this::update, bookContent) + .set(indexId).equalTo(record::getIndexId) + .set(content).equalTo(record::getContent) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookContent record) { + return UpdateDSL.updateWithMapper(this::update, bookContent) + .set(indexId).equalToWhenPresent(record::getIndexId) + .set(content).equalToWhenPresent(record::getContent) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookDynamicSqlSupport.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookDynamicSqlSupport.java new file mode 100644 index 0000000..27315bb --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookDynamicSqlSupport.java @@ -0,0 +1,145 @@ +package com.java2nb.novel.book.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class BookDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final Book book = new Book(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = book.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn workDirection = book.workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn catId = book.catId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn catName = book.catName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn picUrl = book.picUrl; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookName = book.bookName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn authorId = book.authorId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn authorName = book.authorName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookDesc = book.bookDesc; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn score = book.score; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookStatus = book.bookStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn visitCount = book.visitCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn wordCount = book.wordCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn commentCount = book.commentCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn lastIndexId = book.lastIndexId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn lastIndexName = book.lastIndexName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn lastIndexUpdateTime = book.lastIndexUpdateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isVip = book.isVip; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn status = book.status; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = book.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = book.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn crawlSourceId = book.crawlSourceId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn crawlBookId = book.crawlBookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn crawlLastTime = book.crawlLastTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn crawlIsStop = book.crawlIsStop; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class Book extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn workDirection = column("work_direction", JDBCType.TINYINT); + + public final SqlColumn catId = column("cat_id", JDBCType.INTEGER); + + public final SqlColumn catName = column("cat_name", JDBCType.VARCHAR); + + public final SqlColumn picUrl = column("pic_url", JDBCType.VARCHAR); + + public final SqlColumn bookName = column("book_name", JDBCType.VARCHAR); + + public final SqlColumn authorId = column("author_id", JDBCType.BIGINT); + + public final SqlColumn authorName = column("author_name", JDBCType.VARCHAR); + + public final SqlColumn bookDesc = column("book_desc", JDBCType.VARCHAR); + + public final SqlColumn score = column("score", JDBCType.REAL); + + public final SqlColumn bookStatus = column("book_status", JDBCType.TINYINT); + + public final SqlColumn visitCount = column("visit_count", JDBCType.BIGINT); + + public final SqlColumn wordCount = column("word_count", JDBCType.INTEGER); + + public final SqlColumn commentCount = column("comment_count", JDBCType.INTEGER); + + public final SqlColumn lastIndexId = column("last_index_id", JDBCType.BIGINT); + + public final SqlColumn lastIndexName = column("last_index_name", JDBCType.VARCHAR); + + public final SqlColumn lastIndexUpdateTime = column("last_index_update_time", JDBCType.TIMESTAMP); + + public final SqlColumn isVip = column("is_vip", JDBCType.TINYINT); + + public final SqlColumn status = column("status", JDBCType.TINYINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn crawlSourceId = column("crawl_source_id", JDBCType.INTEGER); + + public final SqlColumn crawlBookId = column("crawl_book_id", JDBCType.VARCHAR); + + public final SqlColumn crawlLastTime = column("crawl_last_time", JDBCType.TIMESTAMP); + + public final SqlColumn crawlIsStop = column("crawl_is_stop", JDBCType.TINYINT); + + public Book() { + super("book"); + } + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookIndexDynamicSqlSupport.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookIndexDynamicSqlSupport.java new file mode 100644 index 0000000..24126c7 --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookIndexDynamicSqlSupport.java @@ -0,0 +1,60 @@ +package com.java2nb.novel.book.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class BookIndexDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookIndex bookIndex = new BookIndex(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookIndex.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = bookIndex.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn indexNum = bookIndex.indexNum; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn indexName = bookIndex.indexName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn wordCount = bookIndex.wordCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isVip = bookIndex.isVip; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = bookIndex.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = bookIndex.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookIndex extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn indexNum = column("index_num", JDBCType.INTEGER); + + public final SqlColumn indexName = column("index_name", JDBCType.VARCHAR); + + public final SqlColumn wordCount = column("word_count", JDBCType.INTEGER); + + public final SqlColumn isVip = column("is_vip", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public BookIndex() { + super("book_index"); + } + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookIndexMapper.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookIndexMapper.java new file mode 100644 index 0000000..f393679 --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookIndexMapper.java @@ -0,0 +1,191 @@ +package com.java2nb.novel.book.mapper; + +import com.java2nb.novel.book.entity.BookIndex; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.book.mapper.BookIndexDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface BookIndexMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookIndexResult") + BookIndex selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookIndexResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="index_num", property="indexNum", jdbcType=JdbcType.INTEGER), + @Result(column="index_name", property="indexName", jdbcType=JdbcType.VARCHAR), + @Result(column="word_count", property="wordCount", jdbcType=JdbcType.INTEGER), + @Result(column="is_vip", property="isVip", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookIndex); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookIndex); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookIndex) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookIndex record) { + return insert(SqlBuilder.insert(record) + .into(bookIndex) + .map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(indexNum).toProperty("indexNum") + .map(indexName).toProperty("indexName") + .map(wordCount).toProperty("wordCount") + .map(isVip).toProperty("isVip") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookIndex record) { + return insert(SqlBuilder.insert(record) + .into(bookIndex) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(indexNum).toPropertyWhenPresent("indexNum", record::getIndexNum) + .map(indexName).toPropertyWhenPresent("indexName", record::getIndexName) + .map(wordCount).toPropertyWhenPresent("wordCount", record::getWordCount) + .map(isVip).toPropertyWhenPresent("isVip", record::getIsVip) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, bookId, indexNum, indexName, wordCount, isVip, createTime, updateTime) + .from(bookIndex); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, bookId, indexNum, indexName, wordCount, isVip, createTime, updateTime) + .from(bookIndex); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookIndex selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, bookId, indexNum, indexName, wordCount, isVip, createTime, updateTime) + .from(bookIndex) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookIndex record) { + return UpdateDSL.updateWithMapper(this::update, bookIndex) + .set(id).equalTo(record::getId) + .set(bookId).equalTo(record::getBookId) + .set(indexNum).equalTo(record::getIndexNum) + .set(indexName).equalTo(record::getIndexName) + .set(wordCount).equalTo(record::getWordCount) + .set(isVip).equalTo(record::getIsVip) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookIndex record) { + return UpdateDSL.updateWithMapper(this::update, bookIndex) + .set(id).equalToWhenPresent(record::getId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(indexNum).equalToWhenPresent(record::getIndexNum) + .set(indexName).equalToWhenPresent(record::getIndexName) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookIndex record) { + return UpdateDSL.updateWithMapper(this::update, bookIndex) + .set(bookId).equalTo(record::getBookId) + .set(indexNum).equalTo(record::getIndexNum) + .set(indexName).equalTo(record::getIndexName) + .set(wordCount).equalTo(record::getWordCount) + .set(isVip).equalTo(record::getIsVip) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookIndex record) { + return UpdateDSL.updateWithMapper(this::update, bookIndex) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(indexNum).equalToWhenPresent(record::getIndexNum) + .set(indexName).equalToWhenPresent(record::getIndexName) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookMapper.java b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookMapper.java new file mode 100644 index 0000000..965343c --- /dev/null +++ b/novel-book/book-service/src/main/java/com/java2nb/novel/book/mapper/BookMapper.java @@ -0,0 +1,310 @@ +package com.java2nb.novel.book.mapper; + +import com.java2nb.novel.book.entity.Book; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.book.mapper.BookDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface BookMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookResult") + Book selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="work_direction", property="workDirection", jdbcType=JdbcType.TINYINT), + @Result(column="cat_id", property="catId", jdbcType=JdbcType.INTEGER), + @Result(column="cat_name", property="catName", jdbcType=JdbcType.VARCHAR), + @Result(column="pic_url", property="picUrl", jdbcType=JdbcType.VARCHAR), + @Result(column="book_name", property="bookName", jdbcType=JdbcType.VARCHAR), + @Result(column="author_id", property="authorId", jdbcType=JdbcType.BIGINT), + @Result(column="author_name", property="authorName", jdbcType=JdbcType.VARCHAR), + @Result(column="book_desc", property="bookDesc", jdbcType=JdbcType.VARCHAR), + @Result(column="score", property="score", jdbcType=JdbcType.REAL), + @Result(column="book_status", property="bookStatus", jdbcType=JdbcType.TINYINT), + @Result(column="visit_count", property="visitCount", jdbcType=JdbcType.BIGINT), + @Result(column="word_count", property="wordCount", jdbcType=JdbcType.INTEGER), + @Result(column="comment_count", property="commentCount", jdbcType=JdbcType.INTEGER), + @Result(column="last_index_id", property="lastIndexId", jdbcType=JdbcType.BIGINT), + @Result(column="last_index_name", property="lastIndexName", jdbcType=JdbcType.VARCHAR), + @Result(column="last_index_update_time", property="lastIndexUpdateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="is_vip", property="isVip", jdbcType=JdbcType.TINYINT), + @Result(column="status", property="status", jdbcType=JdbcType.TINYINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="crawl_source_id", property="crawlSourceId", jdbcType=JdbcType.INTEGER), + @Result(column="crawl_book_id", property="crawlBookId", jdbcType=JdbcType.VARCHAR), + @Result(column="crawl_last_time", property="crawlLastTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="crawl_is_stop", property="crawlIsStop", jdbcType=JdbcType.TINYINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(book); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, book); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, book) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(Book record) { + return insert(SqlBuilder.insert(record) + .into(book) + .map(id).toProperty("id") + .map(workDirection).toProperty("workDirection") + .map(catId).toProperty("catId") + .map(catName).toProperty("catName") + .map(picUrl).toProperty("picUrl") + .map(bookName).toProperty("bookName") + .map(authorId).toProperty("authorId") + .map(authorName).toProperty("authorName") + .map(bookDesc).toProperty("bookDesc") + .map(score).toProperty("score") + .map(bookStatus).toProperty("bookStatus") + .map(visitCount).toProperty("visitCount") + .map(wordCount).toProperty("wordCount") + .map(commentCount).toProperty("commentCount") + .map(lastIndexId).toProperty("lastIndexId") + .map(lastIndexName).toProperty("lastIndexName") + .map(lastIndexUpdateTime).toProperty("lastIndexUpdateTime") + .map(isVip).toProperty("isVip") + .map(status).toProperty("status") + .map(updateTime).toProperty("updateTime") + .map(createTime).toProperty("createTime") + .map(crawlSourceId).toProperty("crawlSourceId") + .map(crawlBookId).toProperty("crawlBookId") + .map(crawlLastTime).toProperty("crawlLastTime") + .map(crawlIsStop).toProperty("crawlIsStop") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(Book record) { + return insert(SqlBuilder.insert(record) + .into(book) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(workDirection).toPropertyWhenPresent("workDirection", record::getWorkDirection) + .map(catId).toPropertyWhenPresent("catId", record::getCatId) + .map(catName).toPropertyWhenPresent("catName", record::getCatName) + .map(picUrl).toPropertyWhenPresent("picUrl", record::getPicUrl) + .map(bookName).toPropertyWhenPresent("bookName", record::getBookName) + .map(authorId).toPropertyWhenPresent("authorId", record::getAuthorId) + .map(authorName).toPropertyWhenPresent("authorName", record::getAuthorName) + .map(bookDesc).toPropertyWhenPresent("bookDesc", record::getBookDesc) + .map(score).toPropertyWhenPresent("score", record::getScore) + .map(bookStatus).toPropertyWhenPresent("bookStatus", record::getBookStatus) + .map(visitCount).toPropertyWhenPresent("visitCount", record::getVisitCount) + .map(wordCount).toPropertyWhenPresent("wordCount", record::getWordCount) + .map(commentCount).toPropertyWhenPresent("commentCount", record::getCommentCount) + .map(lastIndexId).toPropertyWhenPresent("lastIndexId", record::getLastIndexId) + .map(lastIndexName).toPropertyWhenPresent("lastIndexName", record::getLastIndexName) + .map(lastIndexUpdateTime).toPropertyWhenPresent("lastIndexUpdateTime", record::getLastIndexUpdateTime) + .map(isVip).toPropertyWhenPresent("isVip", record::getIsVip) + .map(status).toPropertyWhenPresent("status", record::getStatus) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(crawlSourceId).toPropertyWhenPresent("crawlSourceId", record::getCrawlSourceId) + .map(crawlBookId).toPropertyWhenPresent("crawlBookId", record::getCrawlBookId) + .map(crawlLastTime).toPropertyWhenPresent("crawlLastTime", record::getCrawlLastTime) + .map(crawlIsStop).toPropertyWhenPresent("crawlIsStop", record::getCrawlIsStop) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, workDirection, catId, catName, picUrl, bookName, authorId, authorName, bookDesc, score, bookStatus, visitCount, wordCount, commentCount, lastIndexId, lastIndexName, lastIndexUpdateTime, isVip, status, updateTime, createTime, crawlSourceId, crawlBookId, crawlLastTime, crawlIsStop) + .from(book); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, workDirection, catId, catName, picUrl, bookName, authorId, authorName, bookDesc, score, bookStatus, visitCount, wordCount, commentCount, lastIndexId, lastIndexName, lastIndexUpdateTime, isVip, status, updateTime, createTime, crawlSourceId, crawlBookId, crawlLastTime, crawlIsStop) + .from(book); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Book selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, workDirection, catId, catName, picUrl, bookName, authorId, authorName, bookDesc, score, bookStatus, visitCount, wordCount, commentCount, lastIndexId, lastIndexName, lastIndexUpdateTime, isVip, status, updateTime, createTime, crawlSourceId, crawlBookId, crawlLastTime, crawlIsStop) + .from(book) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(Book record) { + return UpdateDSL.updateWithMapper(this::update, book) + .set(id).equalTo(record::getId) + .set(workDirection).equalTo(record::getWorkDirection) + .set(catId).equalTo(record::getCatId) + .set(catName).equalTo(record::getCatName) + .set(picUrl).equalTo(record::getPicUrl) + .set(bookName).equalTo(record::getBookName) + .set(authorId).equalTo(record::getAuthorId) + .set(authorName).equalTo(record::getAuthorName) + .set(bookDesc).equalTo(record::getBookDesc) + .set(score).equalTo(record::getScore) + .set(bookStatus).equalTo(record::getBookStatus) + .set(visitCount).equalTo(record::getVisitCount) + .set(wordCount).equalTo(record::getWordCount) + .set(commentCount).equalTo(record::getCommentCount) + .set(lastIndexId).equalTo(record::getLastIndexId) + .set(lastIndexName).equalTo(record::getLastIndexName) + .set(lastIndexUpdateTime).equalTo(record::getLastIndexUpdateTime) + .set(isVip).equalTo(record::getIsVip) + .set(status).equalTo(record::getStatus) + .set(updateTime).equalTo(record::getUpdateTime) + .set(createTime).equalTo(record::getCreateTime) + .set(crawlSourceId).equalTo(record::getCrawlSourceId) + .set(crawlBookId).equalTo(record::getCrawlBookId) + .set(crawlLastTime).equalTo(record::getCrawlLastTime) + .set(crawlIsStop).equalTo(record::getCrawlIsStop); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(Book record) { + return UpdateDSL.updateWithMapper(this::update, book) + .set(id).equalToWhenPresent(record::getId) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(catId).equalToWhenPresent(record::getCatId) + .set(catName).equalToWhenPresent(record::getCatName) + .set(picUrl).equalToWhenPresent(record::getPicUrl) + .set(bookName).equalToWhenPresent(record::getBookName) + .set(authorId).equalToWhenPresent(record::getAuthorId) + .set(authorName).equalToWhenPresent(record::getAuthorName) + .set(bookDesc).equalToWhenPresent(record::getBookDesc) + .set(score).equalToWhenPresent(record::getScore) + .set(bookStatus).equalToWhenPresent(record::getBookStatus) + .set(visitCount).equalToWhenPresent(record::getVisitCount) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(commentCount).equalToWhenPresent(record::getCommentCount) + .set(lastIndexId).equalToWhenPresent(record::getLastIndexId) + .set(lastIndexName).equalToWhenPresent(record::getLastIndexName) + .set(lastIndexUpdateTime).equalToWhenPresent(record::getLastIndexUpdateTime) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(status).equalToWhenPresent(record::getStatus) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(crawlSourceId).equalToWhenPresent(record::getCrawlSourceId) + .set(crawlBookId).equalToWhenPresent(record::getCrawlBookId) + .set(crawlLastTime).equalToWhenPresent(record::getCrawlLastTime) + .set(crawlIsStop).equalToWhenPresent(record::getCrawlIsStop); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(Book record) { + return UpdateDSL.updateWithMapper(this::update, book) + .set(workDirection).equalTo(record::getWorkDirection) + .set(catId).equalTo(record::getCatId) + .set(catName).equalTo(record::getCatName) + .set(picUrl).equalTo(record::getPicUrl) + .set(bookName).equalTo(record::getBookName) + .set(authorId).equalTo(record::getAuthorId) + .set(authorName).equalTo(record::getAuthorName) + .set(bookDesc).equalTo(record::getBookDesc) + .set(score).equalTo(record::getScore) + .set(bookStatus).equalTo(record::getBookStatus) + .set(visitCount).equalTo(record::getVisitCount) + .set(wordCount).equalTo(record::getWordCount) + .set(commentCount).equalTo(record::getCommentCount) + .set(lastIndexId).equalTo(record::getLastIndexId) + .set(lastIndexName).equalTo(record::getLastIndexName) + .set(lastIndexUpdateTime).equalTo(record::getLastIndexUpdateTime) + .set(isVip).equalTo(record::getIsVip) + .set(status).equalTo(record::getStatus) + .set(updateTime).equalTo(record::getUpdateTime) + .set(createTime).equalTo(record::getCreateTime) + .set(crawlSourceId).equalTo(record::getCrawlSourceId) + .set(crawlBookId).equalTo(record::getCrawlBookId) + .set(crawlLastTime).equalTo(record::getCrawlLastTime) + .set(crawlIsStop).equalTo(record::getCrawlIsStop) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(Book record) { + return UpdateDSL.updateWithMapper(this::update, book) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(catId).equalToWhenPresent(record::getCatId) + .set(catName).equalToWhenPresent(record::getCatName) + .set(picUrl).equalToWhenPresent(record::getPicUrl) + .set(bookName).equalToWhenPresent(record::getBookName) + .set(authorId).equalToWhenPresent(record::getAuthorId) + .set(authorName).equalToWhenPresent(record::getAuthorName) + .set(bookDesc).equalToWhenPresent(record::getBookDesc) + .set(score).equalToWhenPresent(record::getScore) + .set(bookStatus).equalToWhenPresent(record::getBookStatus) + .set(visitCount).equalToWhenPresent(record::getVisitCount) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(commentCount).equalToWhenPresent(record::getCommentCount) + .set(lastIndexId).equalToWhenPresent(record::getLastIndexId) + .set(lastIndexName).equalToWhenPresent(record::getLastIndexName) + .set(lastIndexUpdateTime).equalToWhenPresent(record::getLastIndexUpdateTime) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(status).equalToWhenPresent(record::getStatus) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(crawlSourceId).equalToWhenPresent(record::getCrawlSourceId) + .set(crawlBookId).equalToWhenPresent(record::getCrawlBookId) + .set(crawlLastTime).equalToWhenPresent(record::getCrawlLastTime) + .set(crawlIsStop).equalToWhenPresent(record::getCrawlIsStop) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-book/book-service/src/main/resources/application.yml b/novel-book/book-service/src/main/resources/application.yml new file mode 100644 index 0000000..26ec507 --- /dev/null +++ b/novel-book/book-service/src/main/resources/application.yml @@ -0,0 +1,4 @@ +spring: + profiles: + include: [common] + diff --git a/novel-book/book-service/src/main/resources/bootstrap.yml b/novel-book/book-service/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..8fae4a1 --- /dev/null +++ b/novel-book/book-service/src/main/resources/bootstrap.yml @@ -0,0 +1,5 @@ +spring: + application: + name: book-service + profiles: + active: dev diff --git a/novel-book/book-service/src/main/resources/logback-boot.xml b/novel-book/book-service/src/main/resources/logback-boot.xml new file mode 100644 index 0000000..7c88816 --- /dev/null +++ b/novel-book/book-service/src/main/resources/logback-boot.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + + logs/book-service.log + + + + + + logs/debug.%d.%i.log + + 30 + + + 10MB + + + + + + %d %p (%file:%line\)- %m%n + + + UTF-8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/novel-book/pom.xml b/novel-book/pom.xml new file mode 100644 index 0000000..82eb19e --- /dev/null +++ b/novel-book/pom.xml @@ -0,0 +1,20 @@ + + + + novel-cloud + com.java2nb.novel + 1.0.0 + + 4.0.0 + + novel-book + pom + + book-api + book-service + + + + \ No newline at end of file diff --git a/novel-common/src/main/resources/application-common.yml b/novel-common/src/main/resources/application-common.yml index eb8ca09..553a0b7 100644 --- a/novel-common/src/main/resources/application-common.yml +++ b/novel-common/src/main/resources/application-common.yml @@ -14,4 +14,9 @@ mybatis: logging: config: classpath:logback-boot.xml +jwt: + secret: novel!1025 + expiration: 604800 + + diff --git a/novel-common/src/main/resources/bootstrap-dev.yml b/novel-common/src/main/resources/bootstrap-dev.yml new file mode 100644 index 0000000..6daea22 --- /dev/null +++ b/novel-common/src/main/resources/bootstrap-dev.yml @@ -0,0 +1,9 @@ +spring: + cloud: + nacos: + config: + server-addr: 47.106.243.172:8848 + file-extension: yml + group: ${spring.application.name} + namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c + diff --git a/novel-gateway/src/main/resources/bootstrap.yml b/novel-gateway/src/main/resources/bootstrap.yml index 5046612..fad7bce 100644 --- a/novel-gateway/src/main/resources/bootstrap.yml +++ b/novel-gateway/src/main/resources/bootstrap.yml @@ -6,5 +6,5 @@ spring: config: server-addr: 47.106.243.172:8848 file-extension: yml - group: dev - namespace: 99be05ee-edf9-4fd3-99b8-9cc68d11f049 + group: ${spring.application.name} + namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c diff --git a/novel-gen/src/main/java/com/java2nb/novel/author/entity/Author.java b/novel-gen/src/main/java/com/java2nb/novel/author/entity/Author.java new file mode 100644 index 0000000..1c9c387 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/author/entity/Author.java @@ -0,0 +1,147 @@ +package com.java2nb.novel.author.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class Author { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "邀请码") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String inviteCode; + + @ApiModelProperty(value = "笔名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String penName; + + @ApiModelProperty(value = "手机号码") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String telPhone; + + @ApiModelProperty(value = "QQ或微信账号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String chatAccount; + + @ApiModelProperty(value = "电子邮箱") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String email; + + @ApiModelProperty(value = "作品方向,0:男频,1:女频") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte workDirection; + + @ApiModelProperty(value = "0:正常,1:封禁") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte status; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getInviteCode() { + return inviteCode; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode == null ? null : inviteCode.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getPenName() { + return penName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPenName(String penName) { + this.penName = penName == null ? null : penName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getTelPhone() { + return telPhone; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTelPhone(String telPhone) { + this.telPhone = telPhone == null ? null : telPhone.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getChatAccount() { + return chatAccount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setChatAccount(String chatAccount) { + this.chatAccount = chatAccount == null ? null : chatAccount.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getEmail() { + return email; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setEmail(String email) { + this.email = email == null ? null : email.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getWorkDirection() { + return workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWorkDirection(Byte workDirection) { + this.workDirection = workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getStatus() { + return status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setStatus(Byte status) { + this.status = status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/author/entity/AuthorCode.java b/novel-gen/src/main/java/com/java2nb/novel/author/entity/AuthorCode.java new file mode 100644 index 0000000..1850971 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/author/entity/AuthorCode.java @@ -0,0 +1,91 @@ +package com.java2nb.novel.author.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class AuthorCode { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "邀请码") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String inviteCode; + + @ApiModelProperty(value = "有效时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date validityTime; + + @ApiModelProperty(value = "是否使用过,0:未使用,1:使用过") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isUse; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "创建人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getInviteCode() { + return inviteCode; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setInviteCode(String inviteCode) { + this.inviteCode = inviteCode == null ? null : inviteCode.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getValidityTime() { + return validityTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setValidityTime(Date validityTime) { + this.validityTime = validityTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsUse() { + return isUse; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsUse(Byte isUse) { + this.isUse = isUse; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeDynamicSqlSupport.java new file mode 100644 index 0000000..9dcae43 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeDynamicSqlSupport.java @@ -0,0 +1,49 @@ +package com.java2nb.novel.author.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class AuthorCodeDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final AuthorCode authorCode = new AuthorCode(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = authorCode.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn inviteCode = authorCode.inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn validityTime = authorCode.validityTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isUse = authorCode.isUse; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = authorCode.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = authorCode.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class AuthorCode extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn inviteCode = column("invite_code", JDBCType.VARCHAR); + + public final SqlColumn validityTime = column("validity_time", JDBCType.TIMESTAMP); + + public final SqlColumn isUse = column("is_use", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public AuthorCode() { + super("author_code"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeMapper.java b/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeMapper.java new file mode 100644 index 0000000..9d6ac9a --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorCodeMapper.java @@ -0,0 +1,183 @@ +package com.java2nb.novel.author.mapper; + +import static com.java2nb.novel.author.mapper.AuthorCodeDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.author.entity.AuthorCode; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface AuthorCodeMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorCodeResult") + AuthorCode selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorCodeResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="invite_code", property="inviteCode", jdbcType=JdbcType.VARCHAR), + @Result(column="validity_time", property="validityTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="is_use", property="isUse", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(authorCode); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, authorCode); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, authorCode) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(AuthorCode record) { + return insert(SqlBuilder.insert(record) + .into(authorCode) + .map(id).toProperty("id") + .map(inviteCode).toProperty("inviteCode") + .map(validityTime).toProperty("validityTime") + .map(isUse).toProperty("isUse") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(AuthorCode record) { + return insert(SqlBuilder.insert(record) + .into(authorCode) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(inviteCode).toPropertyWhenPresent("inviteCode", record::getInviteCode) + .map(validityTime).toPropertyWhenPresent("validityTime", record::getValidityTime) + .map(isUse).toPropertyWhenPresent("isUse", record::getIsUse) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, inviteCode, validityTime, isUse, createTime, createUserId) + .from(authorCode); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, inviteCode, validityTime, isUse, createTime, createUserId) + .from(authorCode); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default AuthorCode selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, inviteCode, validityTime, isUse, createTime, createUserId) + .from(authorCode) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(AuthorCode record) { + return UpdateDSL.updateWithMapper(this::update, authorCode) + .set(id).equalTo(record::getId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(validityTime).equalTo(record::getValidityTime) + .set(isUse).equalTo(record::getIsUse) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(AuthorCode record) { + return UpdateDSL.updateWithMapper(this::update, authorCode) + .set(id).equalToWhenPresent(record::getId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(validityTime).equalToWhenPresent(record::getValidityTime) + .set(isUse).equalToWhenPresent(record::getIsUse) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(AuthorCode record) { + return UpdateDSL.updateWithMapper(this::update, authorCode) + .set(inviteCode).equalTo(record::getInviteCode) + .set(validityTime).equalTo(record::getValidityTime) + .set(isUse).equalTo(record::getIsUse) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(AuthorCode record) { + return UpdateDSL.updateWithMapper(this::update, authorCode) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(validityTime).equalToWhenPresent(record::getValidityTime) + .set(isUse).equalToWhenPresent(record::getIsUse) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorDynamicSqlSupport.java new file mode 100644 index 0000000..a5efe4a --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorDynamicSqlSupport.java @@ -0,0 +1,69 @@ +package com.java2nb.novel.author.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class AuthorDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final Author author = new Author(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = author.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = author.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn inviteCode = author.inviteCode; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn penName = author.penName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn telPhone = author.telPhone; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn chatAccount = author.chatAccount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn email = author.email; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn workDirection = author.workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn status = author.status; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = author.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class Author extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn inviteCode = column("invite_code", JDBCType.VARCHAR); + + public final SqlColumn penName = column("pen_name", JDBCType.VARCHAR); + + public final SqlColumn telPhone = column("tel_phone", JDBCType.VARCHAR); + + public final SqlColumn chatAccount = column("chat_account", JDBCType.VARCHAR); + + public final SqlColumn email = column("email", JDBCType.VARCHAR); + + public final SqlColumn workDirection = column("work_direction", JDBCType.TINYINT); + + public final SqlColumn status = column("status", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public Author() { + super("author"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorMapper.java b/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorMapper.java new file mode 100644 index 0000000..99a7b30 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/author/mapper/AuthorMapper.java @@ -0,0 +1,211 @@ +package com.java2nb.novel.author.mapper; + +import static com.java2nb.novel.author.mapper.AuthorDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.author.entity.Author; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface AuthorMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("AuthorResult") + Author selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="AuthorResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="invite_code", property="inviteCode", jdbcType=JdbcType.VARCHAR), + @Result(column="pen_name", property="penName", jdbcType=JdbcType.VARCHAR), + @Result(column="tel_phone", property="telPhone", jdbcType=JdbcType.VARCHAR), + @Result(column="chat_account", property="chatAccount", jdbcType=JdbcType.VARCHAR), + @Result(column="email", property="email", jdbcType=JdbcType.VARCHAR), + @Result(column="work_direction", property="workDirection", jdbcType=JdbcType.TINYINT), + @Result(column="status", property="status", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(author); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, author); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, author) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(Author record) { + return insert(SqlBuilder.insert(record) + .into(author) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(inviteCode).toProperty("inviteCode") + .map(penName).toProperty("penName") + .map(telPhone).toProperty("telPhone") + .map(chatAccount).toProperty("chatAccount") + .map(email).toProperty("email") + .map(workDirection).toProperty("workDirection") + .map(status).toProperty("status") + .map(createTime).toProperty("createTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(Author record) { + return insert(SqlBuilder.insert(record) + .into(author) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(inviteCode).toPropertyWhenPresent("inviteCode", record::getInviteCode) + .map(penName).toPropertyWhenPresent("penName", record::getPenName) + .map(telPhone).toPropertyWhenPresent("telPhone", record::getTelPhone) + .map(chatAccount).toPropertyWhenPresent("chatAccount", record::getChatAccount) + .map(email).toPropertyWhenPresent("email", record::getEmail) + .map(workDirection).toPropertyWhenPresent("workDirection", record::getWorkDirection) + .map(status).toPropertyWhenPresent("status", record::getStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, inviteCode, penName, telPhone, chatAccount, email, workDirection, status, createTime) + .from(author); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, inviteCode, penName, telPhone, chatAccount, email, workDirection, status, createTime) + .from(author); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Author selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, inviteCode, penName, telPhone, chatAccount, email, workDirection, status, createTime) + .from(author) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(Author record) { + return UpdateDSL.updateWithMapper(this::update, author) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(penName).equalTo(record::getPenName) + .set(telPhone).equalTo(record::getTelPhone) + .set(chatAccount).equalTo(record::getChatAccount) + .set(email).equalTo(record::getEmail) + .set(workDirection).equalTo(record::getWorkDirection) + .set(status).equalTo(record::getStatus) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(Author record) { + return UpdateDSL.updateWithMapper(this::update, author) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(penName).equalToWhenPresent(record::getPenName) + .set(telPhone).equalToWhenPresent(record::getTelPhone) + .set(chatAccount).equalToWhenPresent(record::getChatAccount) + .set(email).equalToWhenPresent(record::getEmail) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(status).equalToWhenPresent(record::getStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(Author record) { + return UpdateDSL.updateWithMapper(this::update, author) + .set(userId).equalTo(record::getUserId) + .set(inviteCode).equalTo(record::getInviteCode) + .set(penName).equalTo(record::getPenName) + .set(telPhone).equalTo(record::getTelPhone) + .set(chatAccount).equalTo(record::getChatAccount) + .set(email).equalTo(record::getEmail) + .set(workDirection).equalTo(record::getWorkDirection) + .set(status).equalTo(record::getStatus) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(Author record) { + return UpdateDSL.updateWithMapper(this::update, author) + .set(userId).equalToWhenPresent(record::getUserId) + .set(inviteCode).equalToWhenPresent(record::getInviteCode) + .set(penName).equalToWhenPresent(record::getPenName) + .set(telPhone).equalToWhenPresent(record::getTelPhone) + .set(chatAccount).equalToWhenPresent(record::getChatAccount) + .set(email).equalToWhenPresent(record::getEmail) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(status).equalToWhenPresent(record::getStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/entity/Book.java b/novel-gen/src/main/java/com/java2nb/novel/book/entity/Book.java new file mode 100644 index 0000000..c03ddbd --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/entity/Book.java @@ -0,0 +1,357 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class Book { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "作品方向,0:男频,1:女频'") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte workDirection; + + @ApiModelProperty(value = "分类ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer catId; + + @ApiModelProperty(value = "分类名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String catName; + + @ApiModelProperty(value = "小说封面") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String picUrl; + + @ApiModelProperty(value = "小说名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String bookName; + + @ApiModelProperty(value = "作者id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long authorId; + + @ApiModelProperty(value = "作者名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String authorName; + + @ApiModelProperty(value = "书籍描述") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String bookDesc; + + @ApiModelProperty(value = "评分,预留字段") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Float score; + + @ApiModelProperty(value = "书籍状态,0:连载中,1:已完结") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte bookStatus; + + @ApiModelProperty(value = "点击量") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long visitCount; + + @ApiModelProperty(value = "总字数") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer wordCount; + + @ApiModelProperty(value = "评论数") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer commentCount; + + @ApiModelProperty(value = "最新目录ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long lastIndexId; + + @ApiModelProperty(value = "最新目录名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String lastIndexName; + + @ApiModelProperty(value = "最新目录更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date lastIndexUpdateTime; + + @ApiModelProperty(value = "是否收费,1:收费,0:免费") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isVip; + + @ApiModelProperty(value = "状态,0:入库,1:上架") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte status; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "爬虫源站ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer crawlSourceId; + + @ApiModelProperty(value = "抓取的源站小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String crawlBookId; + + @ApiModelProperty(value = "最后一次的抓取时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date crawlLastTime; + + @ApiModelProperty(value = "是否已停止更新,0:未停止,1:已停止") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte crawlIsStop; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getWorkDirection() { + return workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWorkDirection(Byte workDirection) { + this.workDirection = workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getCatId() { + return catId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCatId(Integer catId) { + this.catId = catId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getCatName() { + return catName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCatName(String catName) { + this.catName = catName == null ? null : catName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getPicUrl() { + return picUrl; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPicUrl(String picUrl) { + this.picUrl = picUrl == null ? null : picUrl.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getBookName() { + return bookName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookName(String bookName) { + this.bookName = bookName == null ? null : bookName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getAuthorId() { + return authorId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuthorId(Long authorId) { + this.authorId = authorId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getAuthorName() { + return authorName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuthorName(String authorName) { + this.authorName = authorName == null ? null : authorName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getBookDesc() { + return bookDesc; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookDesc(String bookDesc) { + this.bookDesc = bookDesc == null ? null : bookDesc.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Float getScore() { + return score; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setScore(Float score) { + this.score = score; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getBookStatus() { + return bookStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookStatus(Byte bookStatus) { + this.bookStatus = bookStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getVisitCount() { + return visitCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setVisitCount(Long visitCount) { + this.visitCount = visitCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getWordCount() { + return wordCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWordCount(Integer wordCount) { + this.wordCount = wordCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getCommentCount() { + return commentCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCommentCount(Integer commentCount) { + this.commentCount = commentCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getLastIndexId() { + return lastIndexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLastIndexId(Long lastIndexId) { + this.lastIndexId = lastIndexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getLastIndexName() { + return lastIndexName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLastIndexName(String lastIndexName) { + this.lastIndexName = lastIndexName == null ? null : lastIndexName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getLastIndexUpdateTime() { + return lastIndexUpdateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLastIndexUpdateTime(Date lastIndexUpdateTime) { + this.lastIndexUpdateTime = lastIndexUpdateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsVip() { + return isVip; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsVip(Byte isVip) { + this.isVip = isVip; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getStatus() { + return status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setStatus(Byte status) { + this.status = status; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getCrawlSourceId() { + return crawlSourceId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCrawlSourceId(Integer crawlSourceId) { + this.crawlSourceId = crawlSourceId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getCrawlBookId() { + return crawlBookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCrawlBookId(String crawlBookId) { + this.crawlBookId = crawlBookId == null ? null : crawlBookId.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCrawlLastTime() { + return crawlLastTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCrawlLastTime(Date crawlLastTime) { + this.crawlLastTime = crawlLastTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getCrawlIsStop() { + return crawlIsStop; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCrawlIsStop(Byte crawlIsStop) { + this.crawlIsStop = crawlIsStop; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookCategory.java b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookCategory.java new file mode 100644 index 0000000..4b8446d --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookCategory.java @@ -0,0 +1,115 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class BookCategory { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer id; + + @ApiModelProperty(value = "作品方向,0:男频,1:女频'") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte workDirection; + + @ApiModelProperty(value = "分类名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String name; + + @ApiModelProperty(value = "排序") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Integer id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getWorkDirection() { + return workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWorkDirection(Byte workDirection) { + this.workDirection = workDirection; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getName() { + return name; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getSort() { + return sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSort(Byte sort) { + this.sort = sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookComment.java b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookComment.java new file mode 100644 index 0000000..3133ebb --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookComment.java @@ -0,0 +1,105 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class BookComment { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "评价内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String commentContent; + + @ApiModelProperty(value = "回复数量") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer replyCount; + + @ApiModelProperty(value = "审核状态,0:待审核,1:审核通过,2:审核不通过") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte auditStatus; + + @ApiModelProperty(value = "评价时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "评价人") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getCommentContent() { + return commentContent; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCommentContent(String commentContent) { + this.commentContent = commentContent == null ? null : commentContent.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getReplyCount() { + return replyCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setReplyCount(Integer replyCount) { + this.replyCount = replyCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getAuditStatus() { + return auditStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuditStatus(Byte auditStatus) { + this.auditStatus = auditStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookCommentReply.java b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookCommentReply.java new file mode 100644 index 0000000..e4234b9 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookCommentReply.java @@ -0,0 +1,91 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class BookCommentReply { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "评论ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long commentId; + + @ApiModelProperty(value = "回复内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String replyContent; + + @ApiModelProperty(value = "审核状态,0:待审核,1:审核通过,2:审核不通过") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte auditStatus; + + @ApiModelProperty(value = "回复用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "回复时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCommentId() { + return commentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCommentId(Long commentId) { + this.commentId = commentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getReplyContent() { + return replyContent; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setReplyContent(String replyContent) { + this.replyContent = replyContent == null ? null : replyContent.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getAuditStatus() { + return auditStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setAuditStatus(Byte auditStatus) { + this.auditStatus = auditStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookContent.java b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookContent.java new file mode 100644 index 0000000..5501d64 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookContent.java @@ -0,0 +1,48 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; +import javax.annotation.Generated; + +public class BookContent { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "目录ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long indexId; + + @ApiModelProperty(value = "小说章节内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getIndexId() { + return indexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIndexId(Long indexId) { + this.indexId = indexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getContent() { + return content; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setContent(String content) { + this.content = content == null ? null : content.trim(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookIndex.java b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookIndex.java new file mode 100644 index 0000000..a23ab64 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/entity/BookIndex.java @@ -0,0 +1,117 @@ +package com.java2nb.novel.book.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class BookIndex { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "目录号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer indexNum; + + @ApiModelProperty(value = "目录名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String indexName; + + @ApiModelProperty(value = "字数") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer wordCount; + + @ApiModelProperty(value = "是否收费,1:收费,0:免费") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isVip; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getIndexNum() { + return indexNum; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIndexNum(Integer indexNum) { + this.indexNum = indexNum; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getIndexName() { + return indexName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIndexName(String indexName) { + this.indexName = indexName == null ? null : indexName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getWordCount() { + return wordCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWordCount(Integer wordCount) { + this.wordCount = wordCount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsVip() { + return isVip; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsVip(Byte isVip) { + this.isVip = isVip; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCategoryDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCategoryDynamicSqlSupport.java new file mode 100644 index 0000000..176d6f4 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCategoryDynamicSqlSupport.java @@ -0,0 +1,59 @@ +package com.java2nb.novel.book.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class BookCategoryDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookCategory bookCategory = new BookCategory(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookCategory.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn workDirection = bookCategory.workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn name = bookCategory.name; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sort = bookCategory.sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = bookCategory.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = bookCategory.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = bookCategory.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = bookCategory.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookCategory extends SqlTable { + public final SqlColumn id = column("id", JDBCType.INTEGER); + + public final SqlColumn workDirection = column("work_direction", JDBCType.TINYINT); + + public final SqlColumn name = column("name", JDBCType.VARCHAR); + + public final SqlColumn sort = column("sort", JDBCType.TINYINT); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public BookCategory() { + super("book_category"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCategoryMapper.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCategoryMapper.java new file mode 100644 index 0000000..7314928 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCategoryMapper.java @@ -0,0 +1,197 @@ +package com.java2nb.novel.book.mapper; + +import static com.java2nb.novel.book.mapper.BookCategoryDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.book.entity.BookCategory; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface BookCategoryMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookCategoryResult") + BookCategory selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookCategoryResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true), + @Result(column="work_direction", property="workDirection", jdbcType=JdbcType.TINYINT), + @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), + @Result(column="sort", property="sort", jdbcType=JdbcType.TINYINT), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Integer id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookCategory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookCategory record) { + return insert(SqlBuilder.insert(record) + .into(bookCategory) + .map(id).toProperty("id") + .map(workDirection).toProperty("workDirection") + .map(name).toProperty("name") + .map(sort).toProperty("sort") + .map(createUserId).toProperty("createUserId") + .map(createTime).toProperty("createTime") + .map(updateUserId).toProperty("updateUserId") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookCategory record) { + return insert(SqlBuilder.insert(record) + .into(bookCategory) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(workDirection).toPropertyWhenPresent("workDirection", record::getWorkDirection) + .map(name).toPropertyWhenPresent("name", record::getName) + .map(sort).toPropertyWhenPresent("sort", record::getSort) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, workDirection, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(bookCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, workDirection, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(bookCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookCategory selectByPrimaryKey(Integer id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, workDirection, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(bookCategory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookCategory record) { + return UpdateDSL.updateWithMapper(this::update, bookCategory) + .set(id).equalTo(record::getId) + .set(workDirection).equalTo(record::getWorkDirection) + .set(name).equalTo(record::getName) + .set(sort).equalTo(record::getSort) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookCategory record) { + return UpdateDSL.updateWithMapper(this::update, bookCategory) + .set(id).equalToWhenPresent(record::getId) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(name).equalToWhenPresent(record::getName) + .set(sort).equalToWhenPresent(record::getSort) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookCategory record) { + return UpdateDSL.updateWithMapper(this::update, bookCategory) + .set(workDirection).equalTo(record::getWorkDirection) + .set(name).equalTo(record::getName) + .set(sort).equalTo(record::getSort) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookCategory record) { + return UpdateDSL.updateWithMapper(this::update, bookCategory) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(name).equalToWhenPresent(record::getName) + .set(sort).equalToWhenPresent(record::getSort) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentDynamicSqlSupport.java new file mode 100644 index 0000000..e554c81 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentDynamicSqlSupport.java @@ -0,0 +1,54 @@ +package com.java2nb.novel.book.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class BookCommentDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookComment bookComment = new BookComment(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookComment.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = bookComment.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn commentContent = bookComment.commentContent; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn replyCount = bookComment.replyCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn auditStatus = bookComment.auditStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = bookComment.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = bookComment.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookComment extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn commentContent = column("comment_content", JDBCType.VARCHAR); + + public final SqlColumn replyCount = column("reply_count", JDBCType.INTEGER); + + public final SqlColumn auditStatus = column("audit_status", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public BookComment() { + super("book_comment"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentMapper.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentMapper.java new file mode 100644 index 0000000..716270d --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentMapper.java @@ -0,0 +1,190 @@ +package com.java2nb.novel.book.mapper; + +import static com.java2nb.novel.book.mapper.BookCommentDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.book.entity.BookComment; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface BookCommentMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookCommentResult") + BookComment selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookCommentResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="comment_content", property="commentContent", jdbcType=JdbcType.VARCHAR), + @Result(column="reply_count", property="replyCount", jdbcType=JdbcType.INTEGER), + @Result(column="audit_status", property="auditStatus", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookComment); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookComment); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookComment) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookComment record) { + return insert(SqlBuilder.insert(record) + .into(bookComment) + .map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(commentContent).toProperty("commentContent") + .map(replyCount).toProperty("replyCount") + .map(auditStatus).toProperty("auditStatus") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookComment record) { + return insert(SqlBuilder.insert(record) + .into(bookComment) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(commentContent).toPropertyWhenPresent("commentContent", record::getCommentContent) + .map(replyCount).toPropertyWhenPresent("replyCount", record::getReplyCount) + .map(auditStatus).toPropertyWhenPresent("auditStatus", record::getAuditStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, bookId, commentContent, replyCount, auditStatus, createTime, createUserId) + .from(bookComment); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, bookId, commentContent, replyCount, auditStatus, createTime, createUserId) + .from(bookComment); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookComment selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, bookId, commentContent, replyCount, auditStatus, createTime, createUserId) + .from(bookComment) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookComment record) { + return UpdateDSL.updateWithMapper(this::update, bookComment) + .set(id).equalTo(record::getId) + .set(bookId).equalTo(record::getBookId) + .set(commentContent).equalTo(record::getCommentContent) + .set(replyCount).equalTo(record::getReplyCount) + .set(auditStatus).equalTo(record::getAuditStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookComment record) { + return UpdateDSL.updateWithMapper(this::update, bookComment) + .set(id).equalToWhenPresent(record::getId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(commentContent).equalToWhenPresent(record::getCommentContent) + .set(replyCount).equalToWhenPresent(record::getReplyCount) + .set(auditStatus).equalToWhenPresent(record::getAuditStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookComment record) { + return UpdateDSL.updateWithMapper(this::update, bookComment) + .set(bookId).equalTo(record::getBookId) + .set(commentContent).equalTo(record::getCommentContent) + .set(replyCount).equalTo(record::getReplyCount) + .set(auditStatus).equalTo(record::getAuditStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookComment record) { + return UpdateDSL.updateWithMapper(this::update, bookComment) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(commentContent).equalToWhenPresent(record::getCommentContent) + .set(replyCount).equalToWhenPresent(record::getReplyCount) + .set(auditStatus).equalToWhenPresent(record::getAuditStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyDynamicSqlSupport.java new file mode 100644 index 0000000..df0dd3d --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyDynamicSqlSupport.java @@ -0,0 +1,49 @@ +package com.java2nb.novel.book.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class BookCommentReplyDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookCommentReply bookCommentReply = new BookCommentReply(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookCommentReply.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn commentId = bookCommentReply.commentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn replyContent = bookCommentReply.replyContent; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn auditStatus = bookCommentReply.auditStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = bookCommentReply.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = bookCommentReply.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookCommentReply extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn commentId = column("comment_id", JDBCType.BIGINT); + + public final SqlColumn replyContent = column("reply_content", JDBCType.VARCHAR); + + public final SqlColumn auditStatus = column("audit_status", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public BookCommentReply() { + super("book_comment_reply"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyMapper.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyMapper.java new file mode 100644 index 0000000..d736a1c --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookCommentReplyMapper.java @@ -0,0 +1,183 @@ +package com.java2nb.novel.book.mapper; + +import static com.java2nb.novel.book.mapper.BookCommentReplyDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.book.entity.BookCommentReply; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface BookCommentReplyMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookCommentReplyResult") + BookCommentReply selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookCommentReplyResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="comment_id", property="commentId", jdbcType=JdbcType.BIGINT), + @Result(column="reply_content", property="replyContent", jdbcType=JdbcType.VARCHAR), + @Result(column="audit_status", property="auditStatus", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookCommentReply); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookCommentReply); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookCommentReply) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookCommentReply record) { + return insert(SqlBuilder.insert(record) + .into(bookCommentReply) + .map(id).toProperty("id") + .map(commentId).toProperty("commentId") + .map(replyContent).toProperty("replyContent") + .map(auditStatus).toProperty("auditStatus") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookCommentReply record) { + return insert(SqlBuilder.insert(record) + .into(bookCommentReply) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(commentId).toPropertyWhenPresent("commentId", record::getCommentId) + .map(replyContent).toPropertyWhenPresent("replyContent", record::getReplyContent) + .map(auditStatus).toPropertyWhenPresent("auditStatus", record::getAuditStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, commentId, replyContent, auditStatus, createTime, createUserId) + .from(bookCommentReply); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, commentId, replyContent, auditStatus, createTime, createUserId) + .from(bookCommentReply); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookCommentReply selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, commentId, replyContent, auditStatus, createTime, createUserId) + .from(bookCommentReply) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookCommentReply record) { + return UpdateDSL.updateWithMapper(this::update, bookCommentReply) + .set(id).equalTo(record::getId) + .set(commentId).equalTo(record::getCommentId) + .set(replyContent).equalTo(record::getReplyContent) + .set(auditStatus).equalTo(record::getAuditStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookCommentReply record) { + return UpdateDSL.updateWithMapper(this::update, bookCommentReply) + .set(id).equalToWhenPresent(record::getId) + .set(commentId).equalToWhenPresent(record::getCommentId) + .set(replyContent).equalToWhenPresent(record::getReplyContent) + .set(auditStatus).equalToWhenPresent(record::getAuditStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookCommentReply record) { + return UpdateDSL.updateWithMapper(this::update, bookCommentReply) + .set(commentId).equalTo(record::getCommentId) + .set(replyContent).equalTo(record::getReplyContent) + .set(auditStatus).equalTo(record::getAuditStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookCommentReply record) { + return UpdateDSL.updateWithMapper(this::update, bookCommentReply) + .set(commentId).equalToWhenPresent(record::getCommentId) + .set(replyContent).equalToWhenPresent(record::getReplyContent) + .set(auditStatus).equalToWhenPresent(record::getAuditStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookContentDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookContentDynamicSqlSupport.java new file mode 100644 index 0000000..ac47840 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookContentDynamicSqlSupport.java @@ -0,0 +1,33 @@ +package com.java2nb.novel.book.mapper; + +import java.sql.JDBCType; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class BookContentDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookContent bookContent = new BookContent(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookContent.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn indexId = bookContent.indexId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn content = bookContent.content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookContent extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn indexId = column("index_id", JDBCType.BIGINT); + + public final SqlColumn content = column("content", JDBCType.LONGVARCHAR); + + public BookContent() { + super("book_content"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookContentMapper.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookContentMapper.java new file mode 100644 index 0000000..59dfd69 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookContentMapper.java @@ -0,0 +1,162 @@ +package com.java2nb.novel.book.mapper; + +import static com.java2nb.novel.book.mapper.BookContentDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.book.entity.BookContent; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface BookContentMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookContentResult") + BookContent selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookContentResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="index_id", property="indexId", jdbcType=JdbcType.BIGINT), + @Result(column="content", property="content", jdbcType=JdbcType.LONGVARCHAR) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookContent) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookContent record) { + return insert(SqlBuilder.insert(record) + .into(bookContent) + .map(id).toProperty("id") + .map(indexId).toProperty("indexId") + .map(content).toProperty("content") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookContent record) { + return insert(SqlBuilder.insert(record) + .into(bookContent) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(indexId).toPropertyWhenPresent("indexId", record::getIndexId) + .map(content).toPropertyWhenPresent("content", record::getContent) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, indexId, content) + .from(bookContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, indexId, content) + .from(bookContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookContent selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, indexId, content) + .from(bookContent) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookContent record) { + return UpdateDSL.updateWithMapper(this::update, bookContent) + .set(id).equalTo(record::getId) + .set(indexId).equalTo(record::getIndexId) + .set(content).equalTo(record::getContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookContent record) { + return UpdateDSL.updateWithMapper(this::update, bookContent) + .set(id).equalToWhenPresent(record::getId) + .set(indexId).equalToWhenPresent(record::getIndexId) + .set(content).equalToWhenPresent(record::getContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookContent record) { + return UpdateDSL.updateWithMapper(this::update, bookContent) + .set(indexId).equalTo(record::getIndexId) + .set(content).equalTo(record::getContent) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookContent record) { + return UpdateDSL.updateWithMapper(this::update, bookContent) + .set(indexId).equalToWhenPresent(record::getIndexId) + .set(content).equalToWhenPresent(record::getContent) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookDynamicSqlSupport.java new file mode 100644 index 0000000..6b4e842 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookDynamicSqlSupport.java @@ -0,0 +1,144 @@ +package com.java2nb.novel.book.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class BookDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final Book book = new Book(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = book.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn workDirection = book.workDirection; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn catId = book.catId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn catName = book.catName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn picUrl = book.picUrl; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookName = book.bookName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn authorId = book.authorId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn authorName = book.authorName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookDesc = book.bookDesc; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn score = book.score; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookStatus = book.bookStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn visitCount = book.visitCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn wordCount = book.wordCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn commentCount = book.commentCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn lastIndexId = book.lastIndexId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn lastIndexName = book.lastIndexName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn lastIndexUpdateTime = book.lastIndexUpdateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isVip = book.isVip; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn status = book.status; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = book.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = book.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn crawlSourceId = book.crawlSourceId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn crawlBookId = book.crawlBookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn crawlLastTime = book.crawlLastTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn crawlIsStop = book.crawlIsStop; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class Book extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn workDirection = column("work_direction", JDBCType.TINYINT); + + public final SqlColumn catId = column("cat_id", JDBCType.INTEGER); + + public final SqlColumn catName = column("cat_name", JDBCType.VARCHAR); + + public final SqlColumn picUrl = column("pic_url", JDBCType.VARCHAR); + + public final SqlColumn bookName = column("book_name", JDBCType.VARCHAR); + + public final SqlColumn authorId = column("author_id", JDBCType.BIGINT); + + public final SqlColumn authorName = column("author_name", JDBCType.VARCHAR); + + public final SqlColumn bookDesc = column("book_desc", JDBCType.VARCHAR); + + public final SqlColumn score = column("score", JDBCType.REAL); + + public final SqlColumn bookStatus = column("book_status", JDBCType.TINYINT); + + public final SqlColumn visitCount = column("visit_count", JDBCType.BIGINT); + + public final SqlColumn wordCount = column("word_count", JDBCType.INTEGER); + + public final SqlColumn commentCount = column("comment_count", JDBCType.INTEGER); + + public final SqlColumn lastIndexId = column("last_index_id", JDBCType.BIGINT); + + public final SqlColumn lastIndexName = column("last_index_name", JDBCType.VARCHAR); + + public final SqlColumn lastIndexUpdateTime = column("last_index_update_time", JDBCType.TIMESTAMP); + + public final SqlColumn isVip = column("is_vip", JDBCType.TINYINT); + + public final SqlColumn status = column("status", JDBCType.TINYINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn crawlSourceId = column("crawl_source_id", JDBCType.INTEGER); + + public final SqlColumn crawlBookId = column("crawl_book_id", JDBCType.VARCHAR); + + public final SqlColumn crawlLastTime = column("crawl_last_time", JDBCType.TIMESTAMP); + + public final SqlColumn crawlIsStop = column("crawl_is_stop", JDBCType.TINYINT); + + public Book() { + super("book"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookIndexDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookIndexDynamicSqlSupport.java new file mode 100644 index 0000000..1bcf564 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookIndexDynamicSqlSupport.java @@ -0,0 +1,59 @@ +package com.java2nb.novel.book.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class BookIndexDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final BookIndex bookIndex = new BookIndex(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = bookIndex.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = bookIndex.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn indexNum = bookIndex.indexNum; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn indexName = bookIndex.indexName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn wordCount = bookIndex.wordCount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isVip = bookIndex.isVip; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = bookIndex.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = bookIndex.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class BookIndex extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn indexNum = column("index_num", JDBCType.INTEGER); + + public final SqlColumn indexName = column("index_name", JDBCType.VARCHAR); + + public final SqlColumn wordCount = column("word_count", JDBCType.INTEGER); + + public final SqlColumn isVip = column("is_vip", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public BookIndex() { + super("book_index"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookIndexMapper.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookIndexMapper.java new file mode 100644 index 0000000..ebbf37d --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookIndexMapper.java @@ -0,0 +1,197 @@ +package com.java2nb.novel.book.mapper; + +import static com.java2nb.novel.book.mapper.BookIndexDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.book.entity.BookIndex; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface BookIndexMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookIndexResult") + BookIndex selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookIndexResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="index_num", property="indexNum", jdbcType=JdbcType.INTEGER), + @Result(column="index_name", property="indexName", jdbcType=JdbcType.VARCHAR), + @Result(column="word_count", property="wordCount", jdbcType=JdbcType.INTEGER), + @Result(column="is_vip", property="isVip", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(bookIndex); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, bookIndex); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, bookIndex) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(BookIndex record) { + return insert(SqlBuilder.insert(record) + .into(bookIndex) + .map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(indexNum).toProperty("indexNum") + .map(indexName).toProperty("indexName") + .map(wordCount).toProperty("wordCount") + .map(isVip).toProperty("isVip") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(BookIndex record) { + return insert(SqlBuilder.insert(record) + .into(bookIndex) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(indexNum).toPropertyWhenPresent("indexNum", record::getIndexNum) + .map(indexName).toPropertyWhenPresent("indexName", record::getIndexName) + .map(wordCount).toPropertyWhenPresent("wordCount", record::getWordCount) + .map(isVip).toPropertyWhenPresent("isVip", record::getIsVip) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, bookId, indexNum, indexName, wordCount, isVip, createTime, updateTime) + .from(bookIndex); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, bookId, indexNum, indexName, wordCount, isVip, createTime, updateTime) + .from(bookIndex); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default BookIndex selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, bookId, indexNum, indexName, wordCount, isVip, createTime, updateTime) + .from(bookIndex) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(BookIndex record) { + return UpdateDSL.updateWithMapper(this::update, bookIndex) + .set(id).equalTo(record::getId) + .set(bookId).equalTo(record::getBookId) + .set(indexNum).equalTo(record::getIndexNum) + .set(indexName).equalTo(record::getIndexName) + .set(wordCount).equalTo(record::getWordCount) + .set(isVip).equalTo(record::getIsVip) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(BookIndex record) { + return UpdateDSL.updateWithMapper(this::update, bookIndex) + .set(id).equalToWhenPresent(record::getId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(indexNum).equalToWhenPresent(record::getIndexNum) + .set(indexName).equalToWhenPresent(record::getIndexName) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(BookIndex record) { + return UpdateDSL.updateWithMapper(this::update, bookIndex) + .set(bookId).equalTo(record::getBookId) + .set(indexNum).equalTo(record::getIndexNum) + .set(indexName).equalTo(record::getIndexName) + .set(wordCount).equalTo(record::getWordCount) + .set(isVip).equalTo(record::getIsVip) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(BookIndex record) { + return UpdateDSL.updateWithMapper(this::update, bookIndex) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(indexNum).equalToWhenPresent(record::getIndexNum) + .set(indexName).equalToWhenPresent(record::getIndexName) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookMapper.java b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookMapper.java new file mode 100644 index 0000000..3e137e5 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/book/mapper/BookMapper.java @@ -0,0 +1,316 @@ +package com.java2nb.novel.book.mapper; + +import static com.java2nb.novel.book.mapper.BookDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.book.entity.Book; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface BookMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("BookResult") + Book selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="BookResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="work_direction", property="workDirection", jdbcType=JdbcType.TINYINT), + @Result(column="cat_id", property="catId", jdbcType=JdbcType.INTEGER), + @Result(column="cat_name", property="catName", jdbcType=JdbcType.VARCHAR), + @Result(column="pic_url", property="picUrl", jdbcType=JdbcType.VARCHAR), + @Result(column="book_name", property="bookName", jdbcType=JdbcType.VARCHAR), + @Result(column="author_id", property="authorId", jdbcType=JdbcType.BIGINT), + @Result(column="author_name", property="authorName", jdbcType=JdbcType.VARCHAR), + @Result(column="book_desc", property="bookDesc", jdbcType=JdbcType.VARCHAR), + @Result(column="score", property="score", jdbcType=JdbcType.REAL), + @Result(column="book_status", property="bookStatus", jdbcType=JdbcType.TINYINT), + @Result(column="visit_count", property="visitCount", jdbcType=JdbcType.BIGINT), + @Result(column="word_count", property="wordCount", jdbcType=JdbcType.INTEGER), + @Result(column="comment_count", property="commentCount", jdbcType=JdbcType.INTEGER), + @Result(column="last_index_id", property="lastIndexId", jdbcType=JdbcType.BIGINT), + @Result(column="last_index_name", property="lastIndexName", jdbcType=JdbcType.VARCHAR), + @Result(column="last_index_update_time", property="lastIndexUpdateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="is_vip", property="isVip", jdbcType=JdbcType.TINYINT), + @Result(column="status", property="status", jdbcType=JdbcType.TINYINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="crawl_source_id", property="crawlSourceId", jdbcType=JdbcType.INTEGER), + @Result(column="crawl_book_id", property="crawlBookId", jdbcType=JdbcType.VARCHAR), + @Result(column="crawl_last_time", property="crawlLastTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="crawl_is_stop", property="crawlIsStop", jdbcType=JdbcType.TINYINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(book); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, book); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, book) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(Book record) { + return insert(SqlBuilder.insert(record) + .into(book) + .map(id).toProperty("id") + .map(workDirection).toProperty("workDirection") + .map(catId).toProperty("catId") + .map(catName).toProperty("catName") + .map(picUrl).toProperty("picUrl") + .map(bookName).toProperty("bookName") + .map(authorId).toProperty("authorId") + .map(authorName).toProperty("authorName") + .map(bookDesc).toProperty("bookDesc") + .map(score).toProperty("score") + .map(bookStatus).toProperty("bookStatus") + .map(visitCount).toProperty("visitCount") + .map(wordCount).toProperty("wordCount") + .map(commentCount).toProperty("commentCount") + .map(lastIndexId).toProperty("lastIndexId") + .map(lastIndexName).toProperty("lastIndexName") + .map(lastIndexUpdateTime).toProperty("lastIndexUpdateTime") + .map(isVip).toProperty("isVip") + .map(status).toProperty("status") + .map(updateTime).toProperty("updateTime") + .map(createTime).toProperty("createTime") + .map(crawlSourceId).toProperty("crawlSourceId") + .map(crawlBookId).toProperty("crawlBookId") + .map(crawlLastTime).toProperty("crawlLastTime") + .map(crawlIsStop).toProperty("crawlIsStop") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(Book record) { + return insert(SqlBuilder.insert(record) + .into(book) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(workDirection).toPropertyWhenPresent("workDirection", record::getWorkDirection) + .map(catId).toPropertyWhenPresent("catId", record::getCatId) + .map(catName).toPropertyWhenPresent("catName", record::getCatName) + .map(picUrl).toPropertyWhenPresent("picUrl", record::getPicUrl) + .map(bookName).toPropertyWhenPresent("bookName", record::getBookName) + .map(authorId).toPropertyWhenPresent("authorId", record::getAuthorId) + .map(authorName).toPropertyWhenPresent("authorName", record::getAuthorName) + .map(bookDesc).toPropertyWhenPresent("bookDesc", record::getBookDesc) + .map(score).toPropertyWhenPresent("score", record::getScore) + .map(bookStatus).toPropertyWhenPresent("bookStatus", record::getBookStatus) + .map(visitCount).toPropertyWhenPresent("visitCount", record::getVisitCount) + .map(wordCount).toPropertyWhenPresent("wordCount", record::getWordCount) + .map(commentCount).toPropertyWhenPresent("commentCount", record::getCommentCount) + .map(lastIndexId).toPropertyWhenPresent("lastIndexId", record::getLastIndexId) + .map(lastIndexName).toPropertyWhenPresent("lastIndexName", record::getLastIndexName) + .map(lastIndexUpdateTime).toPropertyWhenPresent("lastIndexUpdateTime", record::getLastIndexUpdateTime) + .map(isVip).toPropertyWhenPresent("isVip", record::getIsVip) + .map(status).toPropertyWhenPresent("status", record::getStatus) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(crawlSourceId).toPropertyWhenPresent("crawlSourceId", record::getCrawlSourceId) + .map(crawlBookId).toPropertyWhenPresent("crawlBookId", record::getCrawlBookId) + .map(crawlLastTime).toPropertyWhenPresent("crawlLastTime", record::getCrawlLastTime) + .map(crawlIsStop).toPropertyWhenPresent("crawlIsStop", record::getCrawlIsStop) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, workDirection, catId, catName, picUrl, bookName, authorId, authorName, bookDesc, score, bookStatus, visitCount, wordCount, commentCount, lastIndexId, lastIndexName, lastIndexUpdateTime, isVip, status, updateTime, createTime, crawlSourceId, crawlBookId, crawlLastTime, crawlIsStop) + .from(book); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, workDirection, catId, catName, picUrl, bookName, authorId, authorName, bookDesc, score, bookStatus, visitCount, wordCount, commentCount, lastIndexId, lastIndexName, lastIndexUpdateTime, isVip, status, updateTime, createTime, crawlSourceId, crawlBookId, crawlLastTime, crawlIsStop) + .from(book); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Book selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, workDirection, catId, catName, picUrl, bookName, authorId, authorName, bookDesc, score, bookStatus, visitCount, wordCount, commentCount, lastIndexId, lastIndexName, lastIndexUpdateTime, isVip, status, updateTime, createTime, crawlSourceId, crawlBookId, crawlLastTime, crawlIsStop) + .from(book) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(Book record) { + return UpdateDSL.updateWithMapper(this::update, book) + .set(id).equalTo(record::getId) + .set(workDirection).equalTo(record::getWorkDirection) + .set(catId).equalTo(record::getCatId) + .set(catName).equalTo(record::getCatName) + .set(picUrl).equalTo(record::getPicUrl) + .set(bookName).equalTo(record::getBookName) + .set(authorId).equalTo(record::getAuthorId) + .set(authorName).equalTo(record::getAuthorName) + .set(bookDesc).equalTo(record::getBookDesc) + .set(score).equalTo(record::getScore) + .set(bookStatus).equalTo(record::getBookStatus) + .set(visitCount).equalTo(record::getVisitCount) + .set(wordCount).equalTo(record::getWordCount) + .set(commentCount).equalTo(record::getCommentCount) + .set(lastIndexId).equalTo(record::getLastIndexId) + .set(lastIndexName).equalTo(record::getLastIndexName) + .set(lastIndexUpdateTime).equalTo(record::getLastIndexUpdateTime) + .set(isVip).equalTo(record::getIsVip) + .set(status).equalTo(record::getStatus) + .set(updateTime).equalTo(record::getUpdateTime) + .set(createTime).equalTo(record::getCreateTime) + .set(crawlSourceId).equalTo(record::getCrawlSourceId) + .set(crawlBookId).equalTo(record::getCrawlBookId) + .set(crawlLastTime).equalTo(record::getCrawlLastTime) + .set(crawlIsStop).equalTo(record::getCrawlIsStop); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(Book record) { + return UpdateDSL.updateWithMapper(this::update, book) + .set(id).equalToWhenPresent(record::getId) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(catId).equalToWhenPresent(record::getCatId) + .set(catName).equalToWhenPresent(record::getCatName) + .set(picUrl).equalToWhenPresent(record::getPicUrl) + .set(bookName).equalToWhenPresent(record::getBookName) + .set(authorId).equalToWhenPresent(record::getAuthorId) + .set(authorName).equalToWhenPresent(record::getAuthorName) + .set(bookDesc).equalToWhenPresent(record::getBookDesc) + .set(score).equalToWhenPresent(record::getScore) + .set(bookStatus).equalToWhenPresent(record::getBookStatus) + .set(visitCount).equalToWhenPresent(record::getVisitCount) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(commentCount).equalToWhenPresent(record::getCommentCount) + .set(lastIndexId).equalToWhenPresent(record::getLastIndexId) + .set(lastIndexName).equalToWhenPresent(record::getLastIndexName) + .set(lastIndexUpdateTime).equalToWhenPresent(record::getLastIndexUpdateTime) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(status).equalToWhenPresent(record::getStatus) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(crawlSourceId).equalToWhenPresent(record::getCrawlSourceId) + .set(crawlBookId).equalToWhenPresent(record::getCrawlBookId) + .set(crawlLastTime).equalToWhenPresent(record::getCrawlLastTime) + .set(crawlIsStop).equalToWhenPresent(record::getCrawlIsStop); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(Book record) { + return UpdateDSL.updateWithMapper(this::update, book) + .set(workDirection).equalTo(record::getWorkDirection) + .set(catId).equalTo(record::getCatId) + .set(catName).equalTo(record::getCatName) + .set(picUrl).equalTo(record::getPicUrl) + .set(bookName).equalTo(record::getBookName) + .set(authorId).equalTo(record::getAuthorId) + .set(authorName).equalTo(record::getAuthorName) + .set(bookDesc).equalTo(record::getBookDesc) + .set(score).equalTo(record::getScore) + .set(bookStatus).equalTo(record::getBookStatus) + .set(visitCount).equalTo(record::getVisitCount) + .set(wordCount).equalTo(record::getWordCount) + .set(commentCount).equalTo(record::getCommentCount) + .set(lastIndexId).equalTo(record::getLastIndexId) + .set(lastIndexName).equalTo(record::getLastIndexName) + .set(lastIndexUpdateTime).equalTo(record::getLastIndexUpdateTime) + .set(isVip).equalTo(record::getIsVip) + .set(status).equalTo(record::getStatus) + .set(updateTime).equalTo(record::getUpdateTime) + .set(createTime).equalTo(record::getCreateTime) + .set(crawlSourceId).equalTo(record::getCrawlSourceId) + .set(crawlBookId).equalTo(record::getCrawlBookId) + .set(crawlLastTime).equalTo(record::getCrawlLastTime) + .set(crawlIsStop).equalTo(record::getCrawlIsStop) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(Book record) { + return UpdateDSL.updateWithMapper(this::update, book) + .set(workDirection).equalToWhenPresent(record::getWorkDirection) + .set(catId).equalToWhenPresent(record::getCatId) + .set(catName).equalToWhenPresent(record::getCatName) + .set(picUrl).equalToWhenPresent(record::getPicUrl) + .set(bookName).equalToWhenPresent(record::getBookName) + .set(authorId).equalToWhenPresent(record::getAuthorId) + .set(authorName).equalToWhenPresent(record::getAuthorName) + .set(bookDesc).equalToWhenPresent(record::getBookDesc) + .set(score).equalToWhenPresent(record::getScore) + .set(bookStatus).equalToWhenPresent(record::getBookStatus) + .set(visitCount).equalToWhenPresent(record::getVisitCount) + .set(wordCount).equalToWhenPresent(record::getWordCount) + .set(commentCount).equalToWhenPresent(record::getCommentCount) + .set(lastIndexId).equalToWhenPresent(record::getLastIndexId) + .set(lastIndexName).equalToWhenPresent(record::getLastIndexName) + .set(lastIndexUpdateTime).equalToWhenPresent(record::getLastIndexUpdateTime) + .set(isVip).equalToWhenPresent(record::getIsVip) + .set(status).equalToWhenPresent(record::getStatus) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(crawlSourceId).equalToWhenPresent(record::getCrawlSourceId) + .set(crawlBookId).equalToWhenPresent(record::getCrawlBookId) + .set(crawlLastTime).equalToWhenPresent(record::getCrawlLastTime) + .set(crawlIsStop).equalToWhenPresent(record::getCrawlIsStop) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/home/entity/HomeBook.java b/novel-gen/src/main/java/com/java2nb/novel/home/entity/HomeBook.java new file mode 100644 index 0000000..95405e7 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/home/entity/HomeBook.java @@ -0,0 +1,118 @@ +package com.java2nb.novel.home.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class HomeBook { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "排序号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte sort; + + @ApiModelProperty(value = "类型,0:轮播图,1:顶部小说栏设置,2:本周强推,3:热门推荐,4:精品推荐") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte type; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "创建人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @ApiModelProperty(value = "更新人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getSort() { + return sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSort(Byte sort) { + this.sort = sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getType() { + return type; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setType(Byte type) { + this.type = type; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/home/entity/HomeFriendLink.java b/novel-gen/src/main/java/com/java2nb/novel/home/entity/HomeFriendLink.java new file mode 100644 index 0000000..36858ea --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/home/entity/HomeFriendLink.java @@ -0,0 +1,133 @@ +package com.java2nb.novel.home.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class HomeFriendLink { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer id; + + @ApiModelProperty(value = "链接名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String linkName; + + @ApiModelProperty(value = "链接url") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String linkUrl; + + @ApiModelProperty(value = "排序号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte sort; + + @ApiModelProperty(value = "是否开启,0:不开启,1:开启") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isOpen; + + @ApiModelProperty(value = "创建人id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "更新者用户id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Integer id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getLinkName() { + return linkName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLinkName(String linkName) { + this.linkName = linkName == null ? null : linkName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getLinkUrl() { + return linkUrl; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLinkUrl(String linkUrl) { + this.linkUrl = linkUrl == null ? null : linkUrl.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getSort() { + return sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSort(Byte sort) { + this.sort = sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsOpen() { + return isOpen; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsOpen(Byte isOpen) { + this.isOpen = isOpen; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeBookDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeBookDynamicSqlSupport.java new file mode 100644 index 0000000..980461e --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeBookDynamicSqlSupport.java @@ -0,0 +1,59 @@ +package com.java2nb.novel.home.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class HomeBookDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final HomeBook homeBook = new HomeBook(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = homeBook.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = homeBook.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sort = homeBook.sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn type = homeBook.type; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = homeBook.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = homeBook.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = homeBook.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = homeBook.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class HomeBook extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn sort = column("sort", JDBCType.TINYINT); + + public final SqlColumn type = column("type", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public HomeBook() { + super("home_book"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeBookMapper.java b/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeBookMapper.java new file mode 100644 index 0000000..fa85e91 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeBookMapper.java @@ -0,0 +1,197 @@ +package com.java2nb.novel.home.mapper; + +import static com.java2nb.novel.home.mapper.HomeBookDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.home.entity.HomeBook; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface HomeBookMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("HomeBookResult") + HomeBook selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="HomeBookResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="sort", property="sort", jdbcType=JdbcType.TINYINT), + @Result(column="type", property="type", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(homeBook); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, homeBook); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, homeBook) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(HomeBook record) { + return insert(SqlBuilder.insert(record) + .into(homeBook) + .map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(sort).toProperty("sort") + .map(type).toProperty("type") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .map(updateTime).toProperty("updateTime") + .map(updateUserId).toProperty("updateUserId") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(HomeBook record) { + return insert(SqlBuilder.insert(record) + .into(homeBook) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(sort).toPropertyWhenPresent("sort", record::getSort) + .map(type).toPropertyWhenPresent("type", record::getType) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, bookId, sort, type, createTime, createUserId, updateTime, updateUserId) + .from(homeBook); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, bookId, sort, type, createTime, createUserId, updateTime, updateUserId) + .from(homeBook); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default HomeBook selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, bookId, sort, type, createTime, createUserId, updateTime, updateUserId) + .from(homeBook) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(HomeBook record) { + return UpdateDSL.updateWithMapper(this::update, homeBook) + .set(id).equalTo(record::getId) + .set(bookId).equalTo(record::getBookId) + .set(sort).equalTo(record::getSort) + .set(type).equalTo(record::getType) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(HomeBook record) { + return UpdateDSL.updateWithMapper(this::update, homeBook) + .set(id).equalToWhenPresent(record::getId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(sort).equalToWhenPresent(record::getSort) + .set(type).equalToWhenPresent(record::getType) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(HomeBook record) { + return UpdateDSL.updateWithMapper(this::update, homeBook) + .set(bookId).equalTo(record::getBookId) + .set(sort).equalTo(record::getSort) + .set(type).equalTo(record::getType) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(HomeBook record) { + return UpdateDSL.updateWithMapper(this::update, homeBook) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(sort).equalToWhenPresent(record::getSort) + .set(type).equalToWhenPresent(record::getType) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkDynamicSqlSupport.java new file mode 100644 index 0000000..9775e88 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkDynamicSqlSupport.java @@ -0,0 +1,64 @@ +package com.java2nb.novel.home.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class HomeFriendLinkDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final HomeFriendLink homeFriendLink = new HomeFriendLink(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = homeFriendLink.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn linkName = homeFriendLink.linkName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn linkUrl = homeFriendLink.linkUrl; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sort = homeFriendLink.sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isOpen = homeFriendLink.isOpen; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = homeFriendLink.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = homeFriendLink.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = homeFriendLink.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = homeFriendLink.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class HomeFriendLink extends SqlTable { + public final SqlColumn id = column("id", JDBCType.INTEGER); + + public final SqlColumn linkName = column("link_name", JDBCType.VARCHAR); + + public final SqlColumn linkUrl = column("link_url", JDBCType.VARCHAR); + + public final SqlColumn sort = column("sort", JDBCType.TINYINT); + + public final SqlColumn isOpen = column("is_open", JDBCType.TINYINT); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public HomeFriendLink() { + super("home_friend_link"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkMapper.java b/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkMapper.java new file mode 100644 index 0000000..cea9112 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkMapper.java @@ -0,0 +1,204 @@ +package com.java2nb.novel.home.mapper; + +import static com.java2nb.novel.home.mapper.HomeFriendLinkDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.home.entity.HomeFriendLink; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface HomeFriendLinkMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("HomeFriendLinkResult") + HomeFriendLink selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="HomeFriendLinkResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true), + @Result(column="link_name", property="linkName", jdbcType=JdbcType.VARCHAR), + @Result(column="link_url", property="linkUrl", jdbcType=JdbcType.VARCHAR), + @Result(column="sort", property="sort", jdbcType=JdbcType.TINYINT), + @Result(column="is_open", property="isOpen", jdbcType=JdbcType.TINYINT), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(homeFriendLink); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, homeFriendLink); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Integer id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, homeFriendLink) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(HomeFriendLink record) { + return insert(SqlBuilder.insert(record) + .into(homeFriendLink) + .map(id).toProperty("id") + .map(linkName).toProperty("linkName") + .map(linkUrl).toProperty("linkUrl") + .map(sort).toProperty("sort") + .map(isOpen).toProperty("isOpen") + .map(createUserId).toProperty("createUserId") + .map(createTime).toProperty("createTime") + .map(updateUserId).toProperty("updateUserId") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(HomeFriendLink record) { + return insert(SqlBuilder.insert(record) + .into(homeFriendLink) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(linkName).toPropertyWhenPresent("linkName", record::getLinkName) + .map(linkUrl).toPropertyWhenPresent("linkUrl", record::getLinkUrl) + .map(sort).toPropertyWhenPresent("sort", record::getSort) + .map(isOpen).toPropertyWhenPresent("isOpen", record::getIsOpen) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, linkName, linkUrl, sort, isOpen, createUserId, createTime, updateUserId, updateTime) + .from(homeFriendLink); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, linkName, linkUrl, sort, isOpen, createUserId, createTime, updateUserId, updateTime) + .from(homeFriendLink); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default HomeFriendLink selectByPrimaryKey(Integer id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, linkName, linkUrl, sort, isOpen, createUserId, createTime, updateUserId, updateTime) + .from(homeFriendLink) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(HomeFriendLink record) { + return UpdateDSL.updateWithMapper(this::update, homeFriendLink) + .set(id).equalTo(record::getId) + .set(linkName).equalTo(record::getLinkName) + .set(linkUrl).equalTo(record::getLinkUrl) + .set(sort).equalTo(record::getSort) + .set(isOpen).equalTo(record::getIsOpen) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(HomeFriendLink record) { + return UpdateDSL.updateWithMapper(this::update, homeFriendLink) + .set(id).equalToWhenPresent(record::getId) + .set(linkName).equalToWhenPresent(record::getLinkName) + .set(linkUrl).equalToWhenPresent(record::getLinkUrl) + .set(sort).equalToWhenPresent(record::getSort) + .set(isOpen).equalToWhenPresent(record::getIsOpen) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(HomeFriendLink record) { + return UpdateDSL.updateWithMapper(this::update, homeFriendLink) + .set(linkName).equalTo(record::getLinkName) + .set(linkUrl).equalTo(record::getLinkUrl) + .set(sort).equalTo(record::getSort) + .set(isOpen).equalTo(record::getIsOpen) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(HomeFriendLink record) { + return UpdateDSL.updateWithMapper(this::update, homeFriendLink) + .set(linkName).equalToWhenPresent(record::getLinkName) + .set(linkUrl).equalToWhenPresent(record::getLinkUrl) + .set(sort).equalToWhenPresent(record::getSort) + .set(isOpen).equalToWhenPresent(record::getIsOpen) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/news/entity/News.java b/novel-gen/src/main/java/com/java2nb/novel/news/entity/News.java new file mode 100644 index 0000000..4893f3a --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/news/entity/News.java @@ -0,0 +1,147 @@ +package com.java2nb.novel.news.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class News { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "类别ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer catId; + + @ApiModelProperty(value = "分类名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String catName; + + @ApiModelProperty(value = "来源") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String sourceName; + + @ApiModelProperty(value = "标题") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String title; + + @ApiModelProperty(value = "发布时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "发布人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @ApiModelProperty(value = "更新人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @ApiModelProperty(value = "内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getCatId() { + return catId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCatId(Integer catId) { + this.catId = catId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getCatName() { + return catName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCatName(String catName) { + this.catName = catName == null ? null : catName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getSourceName() { + return sourceName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSourceName(String sourceName) { + this.sourceName = sourceName == null ? null : sourceName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getTitle() { + return title; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTitle(String title) { + this.title = title == null ? null : title.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getContent() { + return content; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setContent(String content) { + this.content = content == null ? null : content.trim(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/news/entity/NewsCategory.java b/novel-gen/src/main/java/com/java2nb/novel/news/entity/NewsCategory.java new file mode 100644 index 0000000..fbc2b96 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/news/entity/NewsCategory.java @@ -0,0 +1,101 @@ +package com.java2nb.novel.news.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class NewsCategory { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer id; + + @ApiModelProperty(value = "分类名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String name; + + @ApiModelProperty(value = "排序") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Integer id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getName() { + return name; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getSort() { + return sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSort(Byte sort) { + this.sort = sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryDynamicSqlSupport.java new file mode 100644 index 0000000..05c1aee --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryDynamicSqlSupport.java @@ -0,0 +1,54 @@ +package com.java2nb.novel.news.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class NewsCategoryDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final NewsCategory newsCategory = new NewsCategory(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = newsCategory.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn name = newsCategory.name; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sort = newsCategory.sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = newsCategory.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = newsCategory.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = newsCategory.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = newsCategory.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class NewsCategory extends SqlTable { + public final SqlColumn id = column("id", JDBCType.INTEGER); + + public final SqlColumn name = column("name", JDBCType.VARCHAR); + + public final SqlColumn sort = column("sort", JDBCType.TINYINT); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public NewsCategory() { + super("news_category"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryMapper.java b/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryMapper.java new file mode 100644 index 0000000..7bfcca8 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryMapper.java @@ -0,0 +1,190 @@ +package com.java2nb.novel.news.mapper; + +import static com.java2nb.novel.news.mapper.NewsCategoryDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.news.entity.NewsCategory; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface NewsCategoryMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("NewsCategoryResult") + NewsCategory selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="NewsCategoryResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true), + @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), + @Result(column="sort", property="sort", jdbcType=JdbcType.TINYINT), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(newsCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, newsCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Integer id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, newsCategory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(NewsCategory record) { + return insert(SqlBuilder.insert(record) + .into(newsCategory) + .map(id).toProperty("id") + .map(name).toProperty("name") + .map(sort).toProperty("sort") + .map(createUserId).toProperty("createUserId") + .map(createTime).toProperty("createTime") + .map(updateUserId).toProperty("updateUserId") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(NewsCategory record) { + return insert(SqlBuilder.insert(record) + .into(newsCategory) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(name).toPropertyWhenPresent("name", record::getName) + .map(sort).toPropertyWhenPresent("sort", record::getSort) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(newsCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(newsCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default NewsCategory selectByPrimaryKey(Integer id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(newsCategory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(NewsCategory record) { + return UpdateDSL.updateWithMapper(this::update, newsCategory) + .set(id).equalTo(record::getId) + .set(name).equalTo(record::getName) + .set(sort).equalTo(record::getSort) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(NewsCategory record) { + return UpdateDSL.updateWithMapper(this::update, newsCategory) + .set(id).equalToWhenPresent(record::getId) + .set(name).equalToWhenPresent(record::getName) + .set(sort).equalToWhenPresent(record::getSort) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(NewsCategory record) { + return UpdateDSL.updateWithMapper(this::update, newsCategory) + .set(name).equalTo(record::getName) + .set(sort).equalTo(record::getSort) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(NewsCategory record) { + return UpdateDSL.updateWithMapper(this::update, newsCategory) + .set(name).equalToWhenPresent(record::getName) + .set(sort).equalToWhenPresent(record::getSort) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsDynamicSqlSupport.java new file mode 100644 index 0000000..02a40a4 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsDynamicSqlSupport.java @@ -0,0 +1,69 @@ +package com.java2nb.novel.news.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class NewsDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final News news = new News(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = news.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn catId = news.catId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn catName = news.catName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sourceName = news.sourceName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn title = news.title; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = news.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = news.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = news.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = news.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn content = news.content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class News extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn catId = column("cat_id", JDBCType.INTEGER); + + public final SqlColumn catName = column("cat_name", JDBCType.VARCHAR); + + public final SqlColumn sourceName = column("source_name", JDBCType.VARCHAR); + + public final SqlColumn title = column("title", JDBCType.VARCHAR); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public final SqlColumn content = column("content", JDBCType.LONGVARCHAR); + + public News() { + super("news"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsMapper.java b/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsMapper.java new file mode 100644 index 0000000..5df713c --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/news/mapper/NewsMapper.java @@ -0,0 +1,211 @@ +package com.java2nb.novel.news.mapper; + +import static com.java2nb.novel.news.mapper.NewsDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.news.entity.News; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface NewsMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("NewsResult") + News selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="NewsResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="cat_id", property="catId", jdbcType=JdbcType.INTEGER), + @Result(column="cat_name", property="catName", jdbcType=JdbcType.VARCHAR), + @Result(column="source_name", property="sourceName", jdbcType=JdbcType.VARCHAR), + @Result(column="title", property="title", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT), + @Result(column="content", property="content", jdbcType=JdbcType.LONGVARCHAR) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(news); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, news); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, news) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(News record) { + return insert(SqlBuilder.insert(record) + .into(news) + .map(id).toProperty("id") + .map(catId).toProperty("catId") + .map(catName).toProperty("catName") + .map(sourceName).toProperty("sourceName") + .map(title).toProperty("title") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .map(updateTime).toProperty("updateTime") + .map(updateUserId).toProperty("updateUserId") + .map(content).toProperty("content") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(News record) { + return insert(SqlBuilder.insert(record) + .into(news) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(catId).toPropertyWhenPresent("catId", record::getCatId) + .map(catName).toPropertyWhenPresent("catName", record::getCatName) + .map(sourceName).toPropertyWhenPresent("sourceName", record::getSourceName) + .map(title).toPropertyWhenPresent("title", record::getTitle) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .map(content).toPropertyWhenPresent("content", record::getContent) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, catId, catName, sourceName, title, createTime, createUserId, updateTime, updateUserId, content) + .from(news); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, catId, catName, sourceName, title, createTime, createUserId, updateTime, updateUserId, content) + .from(news); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default News selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, catId, catName, sourceName, title, createTime, createUserId, updateTime, updateUserId, content) + .from(news) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(News record) { + return UpdateDSL.updateWithMapper(this::update, news) + .set(id).equalTo(record::getId) + .set(catId).equalTo(record::getCatId) + .set(catName).equalTo(record::getCatName) + .set(sourceName).equalTo(record::getSourceName) + .set(title).equalTo(record::getTitle) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(content).equalTo(record::getContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(News record) { + return UpdateDSL.updateWithMapper(this::update, news) + .set(id).equalToWhenPresent(record::getId) + .set(catId).equalToWhenPresent(record::getCatId) + .set(catName).equalToWhenPresent(record::getCatName) + .set(sourceName).equalToWhenPresent(record::getSourceName) + .set(title).equalToWhenPresent(record::getTitle) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(content).equalToWhenPresent(record::getContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(News record) { + return UpdateDSL.updateWithMapper(this::update, news) + .set(catId).equalTo(record::getCatId) + .set(catName).equalTo(record::getCatName) + .set(sourceName).equalTo(record::getSourceName) + .set(title).equalTo(record::getTitle) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(content).equalTo(record::getContent) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(News record) { + return UpdateDSL.updateWithMapper(this::update, news) + .set(catId).equalToWhenPresent(record::getCatId) + .set(catName).equalToWhenPresent(record::getCatName) + .set(sourceName).equalToWhenPresent(record::getSourceName) + .set(title).equalToWhenPresent(record::getTitle) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(content).equalToWhenPresent(record::getContent) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/entity/User.java b/novel-gen/src/main/java/com/java2nb/novel/pay/entity/PayLog.java similarity index 60% rename from novel-gen/src/main/java/com/java2nb/novel/user/entity/User.java rename to novel-gen/src/main/java/com/java2nb/novel/pay/entity/PayLog.java index 0dc49c6..2aa8815 100644 --- a/novel-gen/src/main/java/com/java2nb/novel/user/entity/User.java +++ b/novel-gen/src/main/java/com/java2nb/novel/pay/entity/PayLog.java @@ -1,41 +1,41 @@ -package com.java2nb.novel.user.entity; +package com.java2nb.novel.pay.entity; import io.swagger.annotations.ApiModelProperty; import java.util.Date; import javax.annotation.Generated; -public class User { +public class PayLog { @ApiModelProperty(value = "主键") @Generated("org.mybatis.generator.api.MyBatisGenerator") private Long id; - @ApiModelProperty(value = "登录名") + @ApiModelProperty(value = "商户订单号") @Generated("org.mybatis.generator.api.MyBatisGenerator") - private String username; + private Long outTradeNo; - @ApiModelProperty(value = "登录密码") + @ApiModelProperty(value = "交易类型,0:充值购买屋币,1:包年VIP") @Generated("org.mybatis.generator.api.MyBatisGenerator") - private String password; + private Byte tradeType; - @ApiModelProperty(value = "昵称") + @ApiModelProperty(value = "支付宝/微信交易号") @Generated("org.mybatis.generator.api.MyBatisGenerator") - private String nickName; + private String tradeNo; - @ApiModelProperty(value = "用户头像") + @ApiModelProperty(value = "支付渠道,1:支付宝,2:微信") @Generated("org.mybatis.generator.api.MyBatisGenerator") - private String userPhoto; + private Byte payChannel; - @ApiModelProperty(value = "用户性别,0:男,1:女") + @ApiModelProperty(value = "交易金额(单位分)") @Generated("org.mybatis.generator.api.MyBatisGenerator") - private Byte userSex; + private Integer totalAmount; - @ApiModelProperty(value = "账户余额") + @ApiModelProperty(value = "支付用户ID") @Generated("org.mybatis.generator.api.MyBatisGenerator") - private Long accountBalance; + private Long userId; - @ApiModelProperty(value = "用户状态,0:正常") + @ApiModelProperty(value = "支付状态") @Generated("org.mybatis.generator.api.MyBatisGenerator") - private Byte status; + private String payStatus; @ApiModelProperty(value = "创建时间") @Generated("org.mybatis.generator.api.MyBatisGenerator") @@ -56,73 +56,73 @@ public class User { } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public String getUsername() { - return username; + public Long getOutTradeNo() { + return outTradeNo; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public void setUsername(String username) { - this.username = username == null ? null : username.trim(); + public void setOutTradeNo(Long outTradeNo) { + this.outTradeNo = outTradeNo; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public String getPassword() { - return password; + public Byte getTradeType() { + return tradeType; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public void setPassword(String password) { - this.password = password == null ? null : password.trim(); + public void setTradeType(Byte tradeType) { + this.tradeType = tradeType; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public String getNickName() { - return nickName; + public String getTradeNo() { + return tradeNo; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public void setNickName(String nickName) { - this.nickName = nickName == null ? null : nickName.trim(); + public void setTradeNo(String tradeNo) { + this.tradeNo = tradeNo == null ? null : tradeNo.trim(); } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public String getUserPhoto() { - return userPhoto; + public Byte getPayChannel() { + return payChannel; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public void setUserPhoto(String userPhoto) { - this.userPhoto = userPhoto == null ? null : userPhoto.trim(); + public void setPayChannel(Byte payChannel) { + this.payChannel = payChannel; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public Byte getUserSex() { - return userSex; + public Integer getTotalAmount() { + return totalAmount; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public void setUserSex(Byte userSex) { - this.userSex = userSex; + public void setTotalAmount(Integer totalAmount) { + this.totalAmount = totalAmount; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public Long getAccountBalance() { - return accountBalance; + public Long getUserId() { + return userId; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public void setAccountBalance(Long accountBalance) { - this.accountBalance = accountBalance; + public void setUserId(Long userId) { + this.userId = userId; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public Byte getStatus() { - return status; + public String getPayStatus() { + return payStatus; } @Generated("org.mybatis.generator.api.MyBatisGenerator") - public void setStatus(Byte status) { - this.status = status; + public void setPayStatus(String payStatus) { + this.payStatus = payStatus == null ? null : payStatus.trim(); } @Generated("org.mybatis.generator.api.MyBatisGenerator") diff --git a/novel-gen/src/main/java/com/java2nb/novel/pay/mapper/PayLogDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/pay/mapper/PayLogDynamicSqlSupport.java new file mode 100644 index 0000000..e5290a6 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/pay/mapper/PayLogDynamicSqlSupport.java @@ -0,0 +1,69 @@ +package com.java2nb.novel.pay.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class PayLogDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final PayLog payLog = new PayLog(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = payLog.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn outTradeNo = payLog.outTradeNo; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn tradeType = payLog.tradeType; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn tradeNo = payLog.tradeNo; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payChannel = payLog.payChannel; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn totalAmount = payLog.totalAmount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = payLog.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payStatus = payLog.payStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = payLog.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = payLog.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class PayLog extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn outTradeNo = column("out_trade_no", JDBCType.BIGINT); + + public final SqlColumn tradeType = column("trade_type", JDBCType.TINYINT); + + public final SqlColumn tradeNo = column("trade_no", JDBCType.VARCHAR); + + public final SqlColumn payChannel = column("pay_channel", JDBCType.TINYINT); + + public final SqlColumn totalAmount = column("total_amount", JDBCType.INTEGER); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn payStatus = column("pay_status", JDBCType.VARCHAR); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public PayLog() { + super("pay_log"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/pay/mapper/PayLogMapper.java b/novel-gen/src/main/java/com/java2nb/novel/pay/mapper/PayLogMapper.java new file mode 100644 index 0000000..1695a8f --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/pay/mapper/PayLogMapper.java @@ -0,0 +1,211 @@ +package com.java2nb.novel.pay.mapper; + +import static com.java2nb.novel.pay.mapper.PayLogDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.pay.entity.PayLog; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface PayLogMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("PayLogResult") + PayLog selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="PayLogResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="out_trade_no", property="outTradeNo", jdbcType=JdbcType.BIGINT), + @Result(column="trade_type", property="tradeType", jdbcType=JdbcType.TINYINT), + @Result(column="trade_no", property="tradeNo", jdbcType=JdbcType.VARCHAR), + @Result(column="pay_channel", property="payChannel", jdbcType=JdbcType.TINYINT), + @Result(column="total_amount", property="totalAmount", jdbcType=JdbcType.INTEGER), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="pay_status", property="payStatus", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(payLog); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, payLog); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, payLog) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(PayLog record) { + return insert(SqlBuilder.insert(record) + .into(payLog) + .map(id).toProperty("id") + .map(outTradeNo).toProperty("outTradeNo") + .map(tradeType).toProperty("tradeType") + .map(tradeNo).toProperty("tradeNo") + .map(payChannel).toProperty("payChannel") + .map(totalAmount).toProperty("totalAmount") + .map(userId).toProperty("userId") + .map(payStatus).toProperty("payStatus") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(PayLog record) { + return insert(SqlBuilder.insert(record) + .into(payLog) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(outTradeNo).toPropertyWhenPresent("outTradeNo", record::getOutTradeNo) + .map(tradeType).toPropertyWhenPresent("tradeType", record::getTradeType) + .map(tradeNo).toPropertyWhenPresent("tradeNo", record::getTradeNo) + .map(payChannel).toPropertyWhenPresent("payChannel", record::getPayChannel) + .map(totalAmount).toPropertyWhenPresent("totalAmount", record::getTotalAmount) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(payStatus).toPropertyWhenPresent("payStatus", record::getPayStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, outTradeNo, tradeType, tradeNo, payChannel, totalAmount, userId, payStatus, createTime, updateTime) + .from(payLog); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, outTradeNo, tradeType, tradeNo, payChannel, totalAmount, userId, payStatus, createTime, updateTime) + .from(payLog); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default PayLog selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, outTradeNo, tradeType, tradeNo, payChannel, totalAmount, userId, payStatus, createTime, updateTime) + .from(payLog) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(PayLog record) { + return UpdateDSL.updateWithMapper(this::update, payLog) + .set(id).equalTo(record::getId) + .set(outTradeNo).equalTo(record::getOutTradeNo) + .set(tradeType).equalTo(record::getTradeType) + .set(tradeNo).equalTo(record::getTradeNo) + .set(payChannel).equalTo(record::getPayChannel) + .set(totalAmount).equalTo(record::getTotalAmount) + .set(userId).equalTo(record::getUserId) + .set(payStatus).equalTo(record::getPayStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(PayLog record) { + return UpdateDSL.updateWithMapper(this::update, payLog) + .set(id).equalToWhenPresent(record::getId) + .set(outTradeNo).equalToWhenPresent(record::getOutTradeNo) + .set(tradeType).equalToWhenPresent(record::getTradeType) + .set(tradeNo).equalToWhenPresent(record::getTradeNo) + .set(payChannel).equalToWhenPresent(record::getPayChannel) + .set(totalAmount).equalToWhenPresent(record::getTotalAmount) + .set(userId).equalToWhenPresent(record::getUserId) + .set(payStatus).equalToWhenPresent(record::getPayStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(PayLog record) { + return UpdateDSL.updateWithMapper(this::update, payLog) + .set(outTradeNo).equalTo(record::getOutTradeNo) + .set(tradeType).equalTo(record::getTradeType) + .set(tradeNo).equalTo(record::getTradeNo) + .set(payChannel).equalTo(record::getPayChannel) + .set(totalAmount).equalTo(record::getTotalAmount) + .set(userId).equalTo(record::getUserId) + .set(payStatus).equalTo(record::getPayStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(PayLog record) { + return UpdateDSL.updateWithMapper(this::update, payLog) + .set(outTradeNo).equalToWhenPresent(record::getOutTradeNo) + .set(tradeType).equalToWhenPresent(record::getTradeType) + .set(tradeNo).equalToWhenPresent(record::getTradeNo) + .set(payChannel).equalToWhenPresent(record::getPayChannel) + .set(totalAmount).equalToWhenPresent(record::getTotalAmount) + .set(userId).equalToWhenPresent(record::getUserId) + .set(payStatus).equalToWhenPresent(record::getPayStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserBookshelf.java b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserBookshelf.java new file mode 100644 index 0000000..508d02a --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserBookshelf.java @@ -0,0 +1,89 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class UserBookshelf { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "上一次阅读的章节内容表ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long preContentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getPreContentId() { + return preContentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPreContentId(Long preContentId) { + this.preContentId = preContentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserBuyRecord.java b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserBuyRecord.java new file mode 100644 index 0000000..0355862 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserBuyRecord.java @@ -0,0 +1,119 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class UserBuyRecord { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "购买的小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "购买的小说名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String bookName; + + @ApiModelProperty(value = "购买的章节ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookIndexId; + + @ApiModelProperty(value = "购买的章节名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String bookIndexName; + + @ApiModelProperty(value = "购买使用的屋币数量") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer buyAmount; + + @ApiModelProperty(value = "购买时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getBookName() { + return bookName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookName(String bookName) { + this.bookName = bookName == null ? null : bookName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookIndexId() { + return bookIndexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookIndexId(Long bookIndexId) { + this.bookIndexId = bookIndexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getBookIndexName() { + return bookIndexName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookIndexName(String bookIndexName) { + this.bookIndexName = bookIndexName == null ? null : bookIndexName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getBuyAmount() { + return buyAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBuyAmount(Integer buyAmount) { + this.buyAmount = buyAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserFeedback.java b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserFeedback.java new file mode 100644 index 0000000..0d515be --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserFeedback.java @@ -0,0 +1,63 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class UserFeedback { + @ApiModelProperty(value = "主键id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "反馈内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String content; + + @ApiModelProperty(value = "反馈时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getContent() { + return content; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setContent(String content) { + this.content = content == null ? null : content.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserPayRecord.java b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserPayRecord.java new file mode 100644 index 0000000..e9e44cc --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserPayRecord.java @@ -0,0 +1,105 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class UserPayRecord { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "充值用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "充值方式,1:支付宝,2:微信") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte payChannel; + + @ApiModelProperty(value = "商户订单号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long outTradeNo; + + @ApiModelProperty(value = "充值金额(单位元)") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer totalAmount; + + @ApiModelProperty(value = "获得屋币") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer wuAmount; + + @ApiModelProperty(value = "充值时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date payTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getPayChannel() { + return payChannel; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPayChannel(Byte payChannel) { + this.payChannel = payChannel; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getOutTradeNo() { + return outTradeNo; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setOutTradeNo(Long outTradeNo) { + this.outTradeNo = outTradeNo; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getTotalAmount() { + return totalAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTotalAmount(Integer totalAmount) { + this.totalAmount = totalAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getWuAmount() { + return wuAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWuAmount(Integer wuAmount) { + this.wuAmount = wuAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getPayTime() { + return payTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPayTime(Date payTime) { + this.payTime = payTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserReadHistory.java b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserReadHistory.java new file mode 100644 index 0000000..ba6ec96 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/entity/UserReadHistory.java @@ -0,0 +1,89 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class UserReadHistory { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "上一次阅读的章节内容表ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long preContentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getPreContentId() { + return preContentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPreContentId(Long preContentId) { + this.preContentId = preContentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfDynamicSqlSupport.java new file mode 100644 index 0000000..ecd2e07 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfDynamicSqlSupport.java @@ -0,0 +1,49 @@ +package com.java2nb.novel.user.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class UserBookshelfDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserBookshelf userBookshelf = new UserBookshelf(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userBookshelf.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userBookshelf.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = userBookshelf.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn preContentId = userBookshelf.preContentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = userBookshelf.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = userBookshelf.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserBookshelf extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn preContentId = column("pre_content_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public UserBookshelf() { + super("user_bookshelf"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserMapper.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfMapper.java similarity index 55% rename from novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserMapper.java rename to novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfMapper.java index 48f9602..91079a5 100644 --- a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserMapper.java +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfMapper.java @@ -1,9 +1,9 @@ package com.java2nb.novel.user.mapper; -import static com.java2nb.novel.user.mapper.UserDynamicSqlSupport.*; +import static com.java2nb.novel.user.mapper.UserBookshelfDynamicSqlSupport.*; import static org.mybatis.dynamic.sql.SqlBuilder.*; -import com.java2nb.novel.user.entity.User; +import com.java2nb.novel.user.entity.UserBookshelf; import java.util.List; import javax.annotation.Generated; import org.apache.ibatis.annotations.DeleteProvider; @@ -31,7 +31,7 @@ import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; import org.mybatis.dynamic.sql.util.SqlProviderAdapter; @Mapper -public interface UserMapper { +public interface UserBookshelfMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") @SelectProvider(type=SqlProviderAdapter.class, method="select") long count(SelectStatementProvider selectStatement); @@ -42,28 +42,24 @@ public interface UserMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") @InsertProvider(type=SqlProviderAdapter.class, method="insert") - int insert(InsertStatementProvider insertStatement); + int insert(InsertStatementProvider insertStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") @SelectProvider(type=SqlProviderAdapter.class, method="select") - @ResultMap("UserResult") - User selectOne(SelectStatementProvider selectStatement); + @ResultMap("UserBookshelfResult") + UserBookshelf selectOne(SelectStatementProvider selectStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") @SelectProvider(type=SqlProviderAdapter.class, method="select") - @Results(id="UserResult", value = { + @Results(id="UserBookshelfResult", value = { @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), - @Result(column="username", property="username", jdbcType=JdbcType.VARCHAR), - @Result(column="password", property="password", jdbcType=JdbcType.VARCHAR), - @Result(column="nick_name", property="nickName", jdbcType=JdbcType.VARCHAR), - @Result(column="user_photo", property="userPhoto", jdbcType=JdbcType.VARCHAR), - @Result(column="user_sex", property="userSex", jdbcType=JdbcType.TINYINT), - @Result(column="account_balance", property="accountBalance", jdbcType=JdbcType.BIGINT), - @Result(column="status", property="status", jdbcType=JdbcType.TINYINT), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="pre_content_id", property="preContentId", jdbcType=JdbcType.BIGINT), @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) }) - List selectMany(SelectStatementProvider selectStatement); + List selectMany(SelectStatementProvider selectStatement); @Generated("org.mybatis.generator.api.MyBatisGenerator") @UpdateProvider(type=SqlProviderAdapter.class, method="update") @@ -72,34 +68,30 @@ public interface UserMapper { @Generated("org.mybatis.generator.api.MyBatisGenerator") default QueryExpressionDSL> countByExample() { return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) - .from(user); + .from(userBookshelf); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default DeleteDSL> deleteByExample() { - return DeleteDSL.deleteFromWithMapper(this::delete, user); + return DeleteDSL.deleteFromWithMapper(this::delete, userBookshelf); } @Generated("org.mybatis.generator.api.MyBatisGenerator") default int deleteByPrimaryKey(Long id_) { - return DeleteDSL.deleteFromWithMapper(this::delete, user) + return DeleteDSL.deleteFromWithMapper(this::delete, userBookshelf) .where(id, isEqualTo(id_)) .build() .execute(); } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default int insert(User record) { + default int insert(UserBookshelf record) { return insert(SqlBuilder.insert(record) - .into(user) + .into(userBookshelf) .map(id).toProperty("id") - .map(username).toProperty("username") - .map(password).toProperty("password") - .map(nickName).toProperty("nickName") - .map(userPhoto).toProperty("userPhoto") - .map(userSex).toProperty("userSex") - .map(accountBalance).toProperty("accountBalance") - .map(status).toProperty("status") + .map(userId).toProperty("userId") + .map(bookId).toProperty("bookId") + .map(preContentId).toProperty("preContentId") .map(createTime).toProperty("createTime") .map(updateTime).toProperty("updateTime") .build() @@ -107,17 +99,13 @@ public interface UserMapper { } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default int insertSelective(User record) { + default int insertSelective(UserBookshelf record) { return insert(SqlBuilder.insert(record) - .into(user) + .into(userBookshelf) .map(id).toPropertyWhenPresent("id", record::getId) - .map(username).toPropertyWhenPresent("username", record::getUsername) - .map(password).toPropertyWhenPresent("password", record::getPassword) - .map(nickName).toPropertyWhenPresent("nickName", record::getNickName) - .map(userPhoto).toPropertyWhenPresent("userPhoto", record::getUserPhoto) - .map(userSex).toPropertyWhenPresent("userSex", record::getUserSex) - .map(accountBalance).toPropertyWhenPresent("accountBalance", record::getAccountBalance) - .map(status).toPropertyWhenPresent("status", record::getStatus) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(preContentId).toPropertyWhenPresent("preContentId", record::getPreContentId) .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) .build() @@ -125,66 +113,54 @@ public interface UserMapper { } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default QueryExpressionDSL>> selectByExample() { - return SelectDSL.selectWithMapper(this::selectMany, id, username, password, nickName, userPhoto, userSex, accountBalance, status, createTime, updateTime) - .from(user); + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, bookId, preContentId, createTime, updateTime) + .from(userBookshelf); } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default QueryExpressionDSL>> selectDistinctByExample() { - return SelectDSL.selectDistinctWithMapper(this::selectMany, id, username, password, nickName, userPhoto, userSex, accountBalance, status, createTime, updateTime) - .from(user); + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, bookId, preContentId, createTime, updateTime) + .from(userBookshelf); } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default User selectByPrimaryKey(Long id_) { - return SelectDSL.selectWithMapper(this::selectOne, id, username, password, nickName, userPhoto, userSex, accountBalance, status, createTime, updateTime) - .from(user) + default UserBookshelf selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, bookId, preContentId, createTime, updateTime) + .from(userBookshelf) .where(id, isEqualTo(id_)) .build() .execute(); } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default UpdateDSL> updateByExample(User record) { - return UpdateDSL.updateWithMapper(this::update, user) + default UpdateDSL> updateByExample(UserBookshelf record) { + return UpdateDSL.updateWithMapper(this::update, userBookshelf) .set(id).equalTo(record::getId) - .set(username).equalTo(record::getUsername) - .set(password).equalTo(record::getPassword) - .set(nickName).equalTo(record::getNickName) - .set(userPhoto).equalTo(record::getUserPhoto) - .set(userSex).equalTo(record::getUserSex) - .set(accountBalance).equalTo(record::getAccountBalance) - .set(status).equalTo(record::getStatus) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(preContentId).equalTo(record::getPreContentId) .set(createTime).equalTo(record::getCreateTime) .set(updateTime).equalTo(record::getUpdateTime); } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default UpdateDSL> updateByExampleSelective(User record) { - return UpdateDSL.updateWithMapper(this::update, user) + default UpdateDSL> updateByExampleSelective(UserBookshelf record) { + return UpdateDSL.updateWithMapper(this::update, userBookshelf) .set(id).equalToWhenPresent(record::getId) - .set(username).equalToWhenPresent(record::getUsername) - .set(password).equalToWhenPresent(record::getPassword) - .set(nickName).equalToWhenPresent(record::getNickName) - .set(userPhoto).equalToWhenPresent(record::getUserPhoto) - .set(userSex).equalToWhenPresent(record::getUserSex) - .set(accountBalance).equalToWhenPresent(record::getAccountBalance) - .set(status).equalToWhenPresent(record::getStatus) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(preContentId).equalToWhenPresent(record::getPreContentId) .set(createTime).equalToWhenPresent(record::getCreateTime) .set(updateTime).equalToWhenPresent(record::getUpdateTime); } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default int updateByPrimaryKey(User record) { - return UpdateDSL.updateWithMapper(this::update, user) - .set(username).equalTo(record::getUsername) - .set(password).equalTo(record::getPassword) - .set(nickName).equalTo(record::getNickName) - .set(userPhoto).equalTo(record::getUserPhoto) - .set(userSex).equalTo(record::getUserSex) - .set(accountBalance).equalTo(record::getAccountBalance) - .set(status).equalTo(record::getStatus) + default int updateByPrimaryKey(UserBookshelf record) { + return UpdateDSL.updateWithMapper(this::update, userBookshelf) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(preContentId).equalTo(record::getPreContentId) .set(createTime).equalTo(record::getCreateTime) .set(updateTime).equalTo(record::getUpdateTime) .where(id, isEqualTo(record::getId)) @@ -193,15 +169,11 @@ public interface UserMapper { } @Generated("org.mybatis.generator.api.MyBatisGenerator") - default int updateByPrimaryKeySelective(User record) { - return UpdateDSL.updateWithMapper(this::update, user) - .set(username).equalToWhenPresent(record::getUsername) - .set(password).equalToWhenPresent(record::getPassword) - .set(nickName).equalToWhenPresent(record::getNickName) - .set(userPhoto).equalToWhenPresent(record::getUserPhoto) - .set(userSex).equalToWhenPresent(record::getUserSex) - .set(accountBalance).equalToWhenPresent(record::getAccountBalance) - .set(status).equalToWhenPresent(record::getStatus) + default int updateByPrimaryKeySelective(UserBookshelf record) { + return UpdateDSL.updateWithMapper(this::update, userBookshelf) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(preContentId).equalToWhenPresent(record::getPreContentId) .set(createTime).equalToWhenPresent(record::getCreateTime) .set(updateTime).equalToWhenPresent(record::getUpdateTime) .where(id, isEqualTo(record::getId)) diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordDynamicSqlSupport.java new file mode 100644 index 0000000..8f402ff --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordDynamicSqlSupport.java @@ -0,0 +1,59 @@ +package com.java2nb.novel.user.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class UserBuyRecordDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserBuyRecord userBuyRecord = new UserBuyRecord(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userBuyRecord.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userBuyRecord.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = userBuyRecord.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookName = userBuyRecord.bookName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookIndexId = userBuyRecord.bookIndexId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookIndexName = userBuyRecord.bookIndexName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn buyAmount = userBuyRecord.buyAmount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = userBuyRecord.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserBuyRecord extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn bookName = column("book_name", JDBCType.VARCHAR); + + public final SqlColumn bookIndexId = column("book_index_id", JDBCType.BIGINT); + + public final SqlColumn bookIndexName = column("book_index_name", JDBCType.VARCHAR); + + public final SqlColumn buyAmount = column("buy_amount", JDBCType.INTEGER); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public UserBuyRecord() { + super("user_buy_record"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordMapper.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordMapper.java new file mode 100644 index 0000000..957ea65 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordMapper.java @@ -0,0 +1,197 @@ +package com.java2nb.novel.user.mapper; + +import static com.java2nb.novel.user.mapper.UserBuyRecordDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.user.entity.UserBuyRecord; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface UserBuyRecordMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserBuyRecordResult") + UserBuyRecord selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserBuyRecordResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="book_name", property="bookName", jdbcType=JdbcType.VARCHAR), + @Result(column="book_index_id", property="bookIndexId", jdbcType=JdbcType.BIGINT), + @Result(column="book_index_name", property="bookIndexName", jdbcType=JdbcType.VARCHAR), + @Result(column="buy_amount", property="buyAmount", jdbcType=JdbcType.INTEGER), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userBuyRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userBuyRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userBuyRecord) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserBuyRecord record) { + return insert(SqlBuilder.insert(record) + .into(userBuyRecord) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(bookId).toProperty("bookId") + .map(bookName).toProperty("bookName") + .map(bookIndexId).toProperty("bookIndexId") + .map(bookIndexName).toProperty("bookIndexName") + .map(buyAmount).toProperty("buyAmount") + .map(createTime).toProperty("createTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserBuyRecord record) { + return insert(SqlBuilder.insert(record) + .into(userBuyRecord) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(bookName).toPropertyWhenPresent("bookName", record::getBookName) + .map(bookIndexId).toPropertyWhenPresent("bookIndexId", record::getBookIndexId) + .map(bookIndexName).toPropertyWhenPresent("bookIndexName", record::getBookIndexName) + .map(buyAmount).toPropertyWhenPresent("buyAmount", record::getBuyAmount) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, bookId, bookName, bookIndexId, bookIndexName, buyAmount, createTime) + .from(userBuyRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, bookId, bookName, bookIndexId, bookIndexName, buyAmount, createTime) + .from(userBuyRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserBuyRecord selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, bookId, bookName, bookIndexId, bookIndexName, buyAmount, createTime) + .from(userBuyRecord) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserBuyRecord record) { + return UpdateDSL.updateWithMapper(this::update, userBuyRecord) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(bookName).equalTo(record::getBookName) + .set(bookIndexId).equalTo(record::getBookIndexId) + .set(bookIndexName).equalTo(record::getBookIndexName) + .set(buyAmount).equalTo(record::getBuyAmount) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserBuyRecord record) { + return UpdateDSL.updateWithMapper(this::update, userBuyRecord) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(bookName).equalToWhenPresent(record::getBookName) + .set(bookIndexId).equalToWhenPresent(record::getBookIndexId) + .set(bookIndexName).equalToWhenPresent(record::getBookIndexName) + .set(buyAmount).equalToWhenPresent(record::getBuyAmount) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserBuyRecord record) { + return UpdateDSL.updateWithMapper(this::update, userBuyRecord) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(bookName).equalTo(record::getBookName) + .set(bookIndexId).equalTo(record::getBookIndexId) + .set(bookIndexName).equalTo(record::getBookIndexName) + .set(buyAmount).equalTo(record::getBuyAmount) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserBuyRecord record) { + return UpdateDSL.updateWithMapper(this::update, userBuyRecord) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(bookName).equalToWhenPresent(record::getBookName) + .set(bookIndexId).equalToWhenPresent(record::getBookIndexId) + .set(bookIndexName).equalToWhenPresent(record::getBookIndexName) + .set(buyAmount).equalToWhenPresent(record::getBuyAmount) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserDynamicSqlSupport.java deleted file mode 100644 index 933ce51..0000000 --- a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserDynamicSqlSupport.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.java2nb.novel.user.mapper; - -import java.sql.JDBCType; -import java.util.Date; -import javax.annotation.Generated; -import org.mybatis.dynamic.sql.SqlColumn; -import org.mybatis.dynamic.sql.SqlTable; - -public final class UserDynamicSqlSupport { - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final User user = new User(); - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn id = user.id; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn username = user.username; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn password = user.password; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn nickName = user.nickName; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn userPhoto = user.userPhoto; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn userSex = user.userSex; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn accountBalance = user.accountBalance; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn status = user.status; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn createTime = user.createTime; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final SqlColumn updateTime = user.updateTime; - - @Generated("org.mybatis.generator.api.MyBatisGenerator") - public static final class User extends SqlTable { - public final SqlColumn id = column("id", JDBCType.BIGINT); - - public final SqlColumn username = column("username", JDBCType.VARCHAR); - - public final SqlColumn password = column("password", JDBCType.VARCHAR); - - public final SqlColumn nickName = column("nick_name", JDBCType.VARCHAR); - - public final SqlColumn userPhoto = column("user_photo", JDBCType.VARCHAR); - - public final SqlColumn userSex = column("user_sex", JDBCType.TINYINT); - - public final SqlColumn accountBalance = column("account_balance", JDBCType.BIGINT); - - public final SqlColumn status = column("status", JDBCType.TINYINT); - - public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); - - public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); - - public User() { - super("user"); - } - } -} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackDynamicSqlSupport.java new file mode 100644 index 0000000..71f19c4 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackDynamicSqlSupport.java @@ -0,0 +1,39 @@ +package com.java2nb.novel.user.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class UserFeedbackDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserFeedback userFeedback = new UserFeedback(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userFeedback.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userFeedback.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn content = userFeedback.content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = userFeedback.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserFeedback extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn content = column("content", JDBCType.VARCHAR); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public UserFeedback() { + super("user_feedback"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackMapper.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackMapper.java new file mode 100644 index 0000000..1cdc80d --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackMapper.java @@ -0,0 +1,169 @@ +package com.java2nb.novel.user.mapper; + +import static com.java2nb.novel.user.mapper.UserFeedbackDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.user.entity.UserFeedback; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface UserFeedbackMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserFeedbackResult") + UserFeedback selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserFeedbackResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="content", property="content", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userFeedback); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userFeedback); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userFeedback) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserFeedback record) { + return insert(SqlBuilder.insert(record) + .into(userFeedback) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(content).toProperty("content") + .map(createTime).toProperty("createTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserFeedback record) { + return insert(SqlBuilder.insert(record) + .into(userFeedback) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(content).toPropertyWhenPresent("content", record::getContent) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, content, createTime) + .from(userFeedback); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, content, createTime) + .from(userFeedback); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserFeedback selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, content, createTime) + .from(userFeedback) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserFeedback record) { + return UpdateDSL.updateWithMapper(this::update, userFeedback) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(content).equalTo(record::getContent) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserFeedback record) { + return UpdateDSL.updateWithMapper(this::update, userFeedback) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(content).equalToWhenPresent(record::getContent) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserFeedback record) { + return UpdateDSL.updateWithMapper(this::update, userFeedback) + .set(userId).equalTo(record::getUserId) + .set(content).equalTo(record::getContent) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserFeedback record) { + return UpdateDSL.updateWithMapper(this::update, userFeedback) + .set(userId).equalToWhenPresent(record::getUserId) + .set(content).equalToWhenPresent(record::getContent) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordDynamicSqlSupport.java new file mode 100644 index 0000000..15b9719 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordDynamicSqlSupport.java @@ -0,0 +1,54 @@ +package com.java2nb.novel.user.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class UserPayRecordDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserPayRecord userPayRecord = new UserPayRecord(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userPayRecord.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userPayRecord.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payChannel = userPayRecord.payChannel; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn outTradeNo = userPayRecord.outTradeNo; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn totalAmount = userPayRecord.totalAmount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn wuAmount = userPayRecord.wuAmount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payTime = userPayRecord.payTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserPayRecord extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn payChannel = column("pay_channel", JDBCType.TINYINT); + + public final SqlColumn outTradeNo = column("out_trade_no", JDBCType.BIGINT); + + public final SqlColumn totalAmount = column("total_amount", JDBCType.INTEGER); + + public final SqlColumn wuAmount = column("wu_amount", JDBCType.INTEGER); + + public final SqlColumn payTime = column("pay_time", JDBCType.TIMESTAMP); + + public UserPayRecord() { + super("user_pay_record"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordMapper.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordMapper.java new file mode 100644 index 0000000..39971da --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordMapper.java @@ -0,0 +1,190 @@ +package com.java2nb.novel.user.mapper; + +import static com.java2nb.novel.user.mapper.UserPayRecordDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.user.entity.UserPayRecord; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface UserPayRecordMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserPayRecordResult") + UserPayRecord selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserPayRecordResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="pay_channel", property="payChannel", jdbcType=JdbcType.TINYINT), + @Result(column="out_trade_no", property="outTradeNo", jdbcType=JdbcType.BIGINT), + @Result(column="total_amount", property="totalAmount", jdbcType=JdbcType.INTEGER), + @Result(column="wu_amount", property="wuAmount", jdbcType=JdbcType.INTEGER), + @Result(column="pay_time", property="payTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userPayRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userPayRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userPayRecord) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserPayRecord record) { + return insert(SqlBuilder.insert(record) + .into(userPayRecord) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(payChannel).toProperty("payChannel") + .map(outTradeNo).toProperty("outTradeNo") + .map(totalAmount).toProperty("totalAmount") + .map(wuAmount).toProperty("wuAmount") + .map(payTime).toProperty("payTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserPayRecord record) { + return insert(SqlBuilder.insert(record) + .into(userPayRecord) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(payChannel).toPropertyWhenPresent("payChannel", record::getPayChannel) + .map(outTradeNo).toPropertyWhenPresent("outTradeNo", record::getOutTradeNo) + .map(totalAmount).toPropertyWhenPresent("totalAmount", record::getTotalAmount) + .map(wuAmount).toPropertyWhenPresent("wuAmount", record::getWuAmount) + .map(payTime).toPropertyWhenPresent("payTime", record::getPayTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, payChannel, outTradeNo, totalAmount, wuAmount, payTime) + .from(userPayRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, payChannel, outTradeNo, totalAmount, wuAmount, payTime) + .from(userPayRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserPayRecord selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, payChannel, outTradeNo, totalAmount, wuAmount, payTime) + .from(userPayRecord) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserPayRecord record) { + return UpdateDSL.updateWithMapper(this::update, userPayRecord) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(payChannel).equalTo(record::getPayChannel) + .set(outTradeNo).equalTo(record::getOutTradeNo) + .set(totalAmount).equalTo(record::getTotalAmount) + .set(wuAmount).equalTo(record::getWuAmount) + .set(payTime).equalTo(record::getPayTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserPayRecord record) { + return UpdateDSL.updateWithMapper(this::update, userPayRecord) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(payChannel).equalToWhenPresent(record::getPayChannel) + .set(outTradeNo).equalToWhenPresent(record::getOutTradeNo) + .set(totalAmount).equalToWhenPresent(record::getTotalAmount) + .set(wuAmount).equalToWhenPresent(record::getWuAmount) + .set(payTime).equalToWhenPresent(record::getPayTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserPayRecord record) { + return UpdateDSL.updateWithMapper(this::update, userPayRecord) + .set(userId).equalTo(record::getUserId) + .set(payChannel).equalTo(record::getPayChannel) + .set(outTradeNo).equalTo(record::getOutTradeNo) + .set(totalAmount).equalTo(record::getTotalAmount) + .set(wuAmount).equalTo(record::getWuAmount) + .set(payTime).equalTo(record::getPayTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserPayRecord record) { + return UpdateDSL.updateWithMapper(this::update, userPayRecord) + .set(userId).equalToWhenPresent(record::getUserId) + .set(payChannel).equalToWhenPresent(record::getPayChannel) + .set(outTradeNo).equalToWhenPresent(record::getOutTradeNo) + .set(totalAmount).equalToWhenPresent(record::getTotalAmount) + .set(wuAmount).equalToWhenPresent(record::getWuAmount) + .set(payTime).equalToWhenPresent(record::getPayTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryDynamicSqlSupport.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryDynamicSqlSupport.java new file mode 100644 index 0000000..5b4939c --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryDynamicSqlSupport.java @@ -0,0 +1,49 @@ +package com.java2nb.novel.user.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class UserReadHistoryDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserReadHistory userReadHistory = new UserReadHistory(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userReadHistory.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userReadHistory.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = userReadHistory.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn preContentId = userReadHistory.preContentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = userReadHistory.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = userReadHistory.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserReadHistory extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn preContentId = column("pre_content_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public UserReadHistory() { + super("user_read_history"); + } + } +} \ No newline at end of file diff --git a/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryMapper.java b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryMapper.java new file mode 100644 index 0000000..d204bd9 --- /dev/null +++ b/novel-gen/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryMapper.java @@ -0,0 +1,183 @@ +package com.java2nb.novel.user.mapper; + +import static com.java2nb.novel.user.mapper.UserReadHistoryDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.user.entity.UserReadHistory; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface UserReadHistoryMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserReadHistoryResult") + UserReadHistory selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserReadHistoryResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="pre_content_id", property="preContentId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userReadHistory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userReadHistory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userReadHistory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserReadHistory record) { + return insert(SqlBuilder.insert(record) + .into(userReadHistory) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(bookId).toProperty("bookId") + .map(preContentId).toProperty("preContentId") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserReadHistory record) { + return insert(SqlBuilder.insert(record) + .into(userReadHistory) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(preContentId).toPropertyWhenPresent("preContentId", record::getPreContentId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, bookId, preContentId, createTime, updateTime) + .from(userReadHistory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, bookId, preContentId, createTime, updateTime) + .from(userReadHistory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserReadHistory selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, bookId, preContentId, createTime, updateTime) + .from(userReadHistory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserReadHistory record) { + return UpdateDSL.updateWithMapper(this::update, userReadHistory) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(preContentId).equalTo(record::getPreContentId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserReadHistory record) { + return UpdateDSL.updateWithMapper(this::update, userReadHistory) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(preContentId).equalToWhenPresent(record::getPreContentId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserReadHistory record) { + return UpdateDSL.updateWithMapper(this::update, userReadHistory) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(preContentId).equalTo(record::getPreContentId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserReadHistory record) { + return UpdateDSL.updateWithMapper(this::update, userReadHistory) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(preContentId).equalToWhenPresent(record::getPreContentId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-gen/src/main/resources/mybatis/generatorConfig.xml b/novel-gen/src/main/resources/mybatis/generatorConfig.xml index fd1a9a3..14b851c 100644 --- a/novel-gen/src/main/resources/mybatis/generatorConfig.xml +++ b/novel-gen/src/main/resources/mybatis/generatorConfig.xml @@ -9,7 +9,7 @@ @@ -46,7 +46,7 @@ - +
    diff --git a/novel-home/pom.xml b/novel-home/pom.xml new file mode 100644 index 0000000..dd02534 --- /dev/null +++ b/novel-home/pom.xml @@ -0,0 +1,42 @@ + + + + novel-cloud + com.java2nb.novel + 1.0.0 + + 4.0.0 + + novel-home + + + + com.java2nb.novel + novel-common + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.cloud + spring-cloud-netflix-hystrix + + + + + + + \ No newline at end of file diff --git a/novel-home/src/main/java/com/java2nb/novel/HomeApplication.java b/novel-home/src/main/java/com/java2nb/novel/HomeApplication.java new file mode 100644 index 0000000..bdc6c05 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/HomeApplication.java @@ -0,0 +1,20 @@ +package com.java2nb.novel; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * 首页微服务启动器 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/27 + */ +@SpringBootApplication +@EnableFeignClients +public class HomeApplication { + + public static void main(String[] args) { + SpringApplication.run(HomeApplication.class); + } +} diff --git a/novel-home/src/main/java/com/java2nb/novel/home/entity/HomeBook.java b/novel-home/src/main/java/com/java2nb/novel/home/entity/HomeBook.java new file mode 100644 index 0000000..f72ac07 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/entity/HomeBook.java @@ -0,0 +1,119 @@ +package com.java2nb.novel.home.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class HomeBook { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "排序号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte sort; + + @ApiModelProperty(value = "类型,0:轮播图,1:顶部小说栏设置,2:本周强推,3:热门推荐,4:精品推荐") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte type; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "创建人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @ApiModelProperty(value = "更新人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getSort() { + return sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSort(Byte sort) { + this.sort = sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getType() { + return type; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setType(Byte type) { + this.type = type; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } +} \ No newline at end of file diff --git a/novel-home/src/main/java/com/java2nb/novel/home/entity/HomeFriendLink.java b/novel-home/src/main/java/com/java2nb/novel/home/entity/HomeFriendLink.java new file mode 100644 index 0000000..e904bd4 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/entity/HomeFriendLink.java @@ -0,0 +1,134 @@ +package com.java2nb.novel.home.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class HomeFriendLink { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer id; + + @ApiModelProperty(value = "链接名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String linkName; + + @ApiModelProperty(value = "链接url") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String linkUrl; + + @ApiModelProperty(value = "排序号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte sort; + + @ApiModelProperty(value = "是否开启,0:不开启,1:开启") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte isOpen; + + @ApiModelProperty(value = "创建人id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "更新者用户id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Integer id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getLinkName() { + return linkName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLinkName(String linkName) { + this.linkName = linkName == null ? null : linkName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getLinkUrl() { + return linkUrl; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLinkUrl(String linkUrl) { + this.linkUrl = linkUrl == null ? null : linkUrl.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getSort() { + return sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSort(Byte sort) { + this.sort = sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getIsOpen() { + return isOpen; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setIsOpen(Byte isOpen) { + this.isOpen = isOpen; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeBookDynamicSqlSupport.java b/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeBookDynamicSqlSupport.java new file mode 100644 index 0000000..2a8b6d7 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeBookDynamicSqlSupport.java @@ -0,0 +1,60 @@ +package com.java2nb.novel.home.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class HomeBookDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final HomeBook homeBook = new HomeBook(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = homeBook.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = homeBook.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sort = homeBook.sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn type = homeBook.type; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = homeBook.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = homeBook.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = homeBook.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = homeBook.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class HomeBook extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn sort = column("sort", JDBCType.TINYINT); + + public final SqlColumn type = column("type", JDBCType.TINYINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public HomeBook() { + super("home_book"); + } + } +} \ No newline at end of file diff --git a/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeBookMapper.java b/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeBookMapper.java new file mode 100644 index 0000000..d29183c --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeBookMapper.java @@ -0,0 +1,192 @@ +package com.java2nb.novel.home.mapper; + +import com.java2nb.novel.home.entity.HomeBook; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.home.mapper.HomeBookDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface HomeBookMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("HomeBookResult") + HomeBook selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="HomeBookResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="sort", property="sort", jdbcType=JdbcType.TINYINT), + @Result(column="type", property="type", jdbcType=JdbcType.TINYINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(homeBook); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, homeBook); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, homeBook) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(HomeBook record) { + return insert(SqlBuilder.insert(record) + .into(homeBook) + .map(id).toProperty("id") + .map(bookId).toProperty("bookId") + .map(sort).toProperty("sort") + .map(type).toProperty("type") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .map(updateTime).toProperty("updateTime") + .map(updateUserId).toProperty("updateUserId") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(HomeBook record) { + return insert(SqlBuilder.insert(record) + .into(homeBook) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(sort).toPropertyWhenPresent("sort", record::getSort) + .map(type).toPropertyWhenPresent("type", record::getType) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, bookId, sort, type, createTime, createUserId, updateTime, updateUserId) + .from(homeBook); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, bookId, sort, type, createTime, createUserId, updateTime, updateUserId) + .from(homeBook); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default HomeBook selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, bookId, sort, type, createTime, createUserId, updateTime, updateUserId) + .from(homeBook) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(HomeBook record) { + return UpdateDSL.updateWithMapper(this::update, homeBook) + .set(id).equalTo(record::getId) + .set(bookId).equalTo(record::getBookId) + .set(sort).equalTo(record::getSort) + .set(type).equalTo(record::getType) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(HomeBook record) { + return UpdateDSL.updateWithMapper(this::update, homeBook) + .set(id).equalToWhenPresent(record::getId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(sort).equalToWhenPresent(record::getSort) + .set(type).equalToWhenPresent(record::getType) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(HomeBook record) { + return UpdateDSL.updateWithMapper(this::update, homeBook) + .set(bookId).equalTo(record::getBookId) + .set(sort).equalTo(record::getSort) + .set(type).equalTo(record::getType) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(HomeBook record) { + return UpdateDSL.updateWithMapper(this::update, homeBook) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(sort).equalToWhenPresent(record::getSort) + .set(type).equalToWhenPresent(record::getType) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkDynamicSqlSupport.java b/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkDynamicSqlSupport.java new file mode 100644 index 0000000..e0009a8 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkDynamicSqlSupport.java @@ -0,0 +1,65 @@ +package com.java2nb.novel.home.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class HomeFriendLinkDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final HomeFriendLink homeFriendLink = new HomeFriendLink(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = homeFriendLink.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn linkName = homeFriendLink.linkName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn linkUrl = homeFriendLink.linkUrl; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sort = homeFriendLink.sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn isOpen = homeFriendLink.isOpen; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = homeFriendLink.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = homeFriendLink.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = homeFriendLink.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = homeFriendLink.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class HomeFriendLink extends SqlTable { + public final SqlColumn id = column("id", JDBCType.INTEGER); + + public final SqlColumn linkName = column("link_name", JDBCType.VARCHAR); + + public final SqlColumn linkUrl = column("link_url", JDBCType.VARCHAR); + + public final SqlColumn sort = column("sort", JDBCType.TINYINT); + + public final SqlColumn isOpen = column("is_open", JDBCType.TINYINT); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public HomeFriendLink() { + super("home_friend_link"); + } + } +} \ No newline at end of file diff --git a/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkMapper.java b/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkMapper.java new file mode 100644 index 0000000..da677b4 --- /dev/null +++ b/novel-home/src/main/java/com/java2nb/novel/home/mapper/HomeFriendLinkMapper.java @@ -0,0 +1,199 @@ +package com.java2nb.novel.home.mapper; + +import com.java2nb.novel.home.entity.HomeFriendLink; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.home.mapper.HomeFriendLinkDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface HomeFriendLinkMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("HomeFriendLinkResult") + HomeFriendLink selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="HomeFriendLinkResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true), + @Result(column="link_name", property="linkName", jdbcType=JdbcType.VARCHAR), + @Result(column="link_url", property="linkUrl", jdbcType=JdbcType.VARCHAR), + @Result(column="sort", property="sort", jdbcType=JdbcType.TINYINT), + @Result(column="is_open", property="isOpen", jdbcType=JdbcType.TINYINT), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(homeFriendLink); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, homeFriendLink); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Integer id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, homeFriendLink) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(HomeFriendLink record) { + return insert(SqlBuilder.insert(record) + .into(homeFriendLink) + .map(id).toProperty("id") + .map(linkName).toProperty("linkName") + .map(linkUrl).toProperty("linkUrl") + .map(sort).toProperty("sort") + .map(isOpen).toProperty("isOpen") + .map(createUserId).toProperty("createUserId") + .map(createTime).toProperty("createTime") + .map(updateUserId).toProperty("updateUserId") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(HomeFriendLink record) { + return insert(SqlBuilder.insert(record) + .into(homeFriendLink) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(linkName).toPropertyWhenPresent("linkName", record::getLinkName) + .map(linkUrl).toPropertyWhenPresent("linkUrl", record::getLinkUrl) + .map(sort).toPropertyWhenPresent("sort", record::getSort) + .map(isOpen).toPropertyWhenPresent("isOpen", record::getIsOpen) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, linkName, linkUrl, sort, isOpen, createUserId, createTime, updateUserId, updateTime) + .from(homeFriendLink); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, linkName, linkUrl, sort, isOpen, createUserId, createTime, updateUserId, updateTime) + .from(homeFriendLink); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default HomeFriendLink selectByPrimaryKey(Integer id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, linkName, linkUrl, sort, isOpen, createUserId, createTime, updateUserId, updateTime) + .from(homeFriendLink) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(HomeFriendLink record) { + return UpdateDSL.updateWithMapper(this::update, homeFriendLink) + .set(id).equalTo(record::getId) + .set(linkName).equalTo(record::getLinkName) + .set(linkUrl).equalTo(record::getLinkUrl) + .set(sort).equalTo(record::getSort) + .set(isOpen).equalTo(record::getIsOpen) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(HomeFriendLink record) { + return UpdateDSL.updateWithMapper(this::update, homeFriendLink) + .set(id).equalToWhenPresent(record::getId) + .set(linkName).equalToWhenPresent(record::getLinkName) + .set(linkUrl).equalToWhenPresent(record::getLinkUrl) + .set(sort).equalToWhenPresent(record::getSort) + .set(isOpen).equalToWhenPresent(record::getIsOpen) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(HomeFriendLink record) { + return UpdateDSL.updateWithMapper(this::update, homeFriendLink) + .set(linkName).equalTo(record::getLinkName) + .set(linkUrl).equalTo(record::getLinkUrl) + .set(sort).equalTo(record::getSort) + .set(isOpen).equalTo(record::getIsOpen) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(HomeFriendLink record) { + return UpdateDSL.updateWithMapper(this::update, homeFriendLink) + .set(linkName).equalToWhenPresent(record::getLinkName) + .set(linkUrl).equalToWhenPresent(record::getLinkUrl) + .set(sort).equalToWhenPresent(record::getSort) + .set(isOpen).equalToWhenPresent(record::getIsOpen) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-home/src/main/resources/application.yml b/novel-home/src/main/resources/application.yml new file mode 100644 index 0000000..26ec507 --- /dev/null +++ b/novel-home/src/main/resources/application.yml @@ -0,0 +1,4 @@ +spring: + profiles: + include: [common] + diff --git a/novel-home/src/main/resources/bootstrap.yml b/novel-home/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..42d3dd1 --- /dev/null +++ b/novel-home/src/main/resources/bootstrap.yml @@ -0,0 +1,5 @@ +spring: + application: + name: novel-home + profiles: + active: dev diff --git a/novel-home/src/main/resources/logback-boot.xml b/novel-home/src/main/resources/logback-boot.xml new file mode 100644 index 0000000..9dd7ab8 --- /dev/null +++ b/novel-home/src/main/resources/logback-boot.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + + logs/novel-home.log + + + + + + logs/debug.%d.%i.log + + 30 + + + 10MB + + + + + + %d %p (%file:%line\)- %m%n + + + UTF-8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/novel-monitor/src/main/resources/bootstrap.yml b/novel-monitor/src/main/resources/bootstrap.yml index 64f889b..e3a23a9 100644 --- a/novel-monitor/src/main/resources/bootstrap.yml +++ b/novel-monitor/src/main/resources/bootstrap.yml @@ -6,5 +6,5 @@ spring: config: server-addr: 47.106.243.172:8848 file-extension: yml - group: dev - namespace: af61b0e1-4581-4d1e-a04b-efe55137a0b1 + group: ${spring.application.name} + namespace: 3960c71a-62ac-4b8f-8c30-bba8e8143a0c diff --git a/novel-news/news-api/pom.xml b/novel-news/news-api/pom.xml new file mode 100644 index 0000000..d81dcf8 --- /dev/null +++ b/novel-news/news-api/pom.xml @@ -0,0 +1,34 @@ + + + + novel-news + com.java2nb.novel + 1.0.0 + + 4.0.0 + + news-api + + + + com.java2nb.novel + novel-common + + + org.springframework.boot + spring-boot-starter-cache + + + org.springframework.boot + spring-boot-starter-redis + + + + + + + + + \ No newline at end of file diff --git a/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/News.java b/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/News.java new file mode 100644 index 0000000..c0492e1 --- /dev/null +++ b/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/News.java @@ -0,0 +1,148 @@ +package com.java2nb.novel.news.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class News { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "类别ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer catId; + + @ApiModelProperty(value = "分类名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String catName; + + @ApiModelProperty(value = "来源") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String sourceName; + + @ApiModelProperty(value = "标题") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String title; + + @ApiModelProperty(value = "发布时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "发布人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @ApiModelProperty(value = "更新人ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @ApiModelProperty(value = "内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getCatId() { + return catId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCatId(Integer catId) { + this.catId = catId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getCatName() { + return catName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCatName(String catName) { + this.catName = catName == null ? null : catName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getSourceName() { + return sourceName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSourceName(String sourceName) { + this.sourceName = sourceName == null ? null : sourceName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getTitle() { + return title; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTitle(String title) { + this.title = title == null ? null : title.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getContent() { + return content; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setContent(String content) { + this.content = content == null ? null : content.trim(); + } +} \ No newline at end of file diff --git a/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/NewsCategory.java b/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/NewsCategory.java new file mode 100644 index 0000000..fb52bdd --- /dev/null +++ b/novel-news/news-api/src/main/java/com/java2nb/novel/news/entity/NewsCategory.java @@ -0,0 +1,102 @@ +package com.java2nb.novel.news.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class NewsCategory { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer id; + + @ApiModelProperty(value = "分类名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String name; + + @ApiModelProperty(value = "排序") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Integer id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getName() { + return name; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getSort() { + return sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setSort(Byte sort) { + this.sort = sort; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-news/news-service/pom.xml b/novel-news/news-service/pom.xml new file mode 100644 index 0000000..14c3495 --- /dev/null +++ b/novel-news/news-service/pom.xml @@ -0,0 +1,44 @@ + + + + novel-news + com.java2nb.novel + 1.0.0 + + 4.0.0 + + news-service + + + + + com.java2nb.novel + news-api + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.cloud + spring-cloud-netflix-hystrix + + + + + + + + \ No newline at end of file diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/NewsApplication.java b/novel-news/news-service/src/main/java/com/java2nb/novel/NewsApplication.java new file mode 100644 index 0000000..8892a04 --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/NewsApplication.java @@ -0,0 +1,20 @@ +package com.java2nb.novel; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * 新闻微服务启动器 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/27 + */ +@SpringBootApplication +@EnableFeignClients +public class NewsApplication { + + public static void main(String[] args) { + SpringApplication.run(NewsApplication.class); + } +} diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryDynamicSqlSupport.java b/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryDynamicSqlSupport.java new file mode 100644 index 0000000..2cd0e54 --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryDynamicSqlSupport.java @@ -0,0 +1,55 @@ +package com.java2nb.novel.news.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class NewsCategoryDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final NewsCategory newsCategory = new NewsCategory(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = newsCategory.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn name = newsCategory.name; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sort = newsCategory.sort; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = newsCategory.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = newsCategory.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = newsCategory.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = newsCategory.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class NewsCategory extends SqlTable { + public final SqlColumn id = column("id", JDBCType.INTEGER); + + public final SqlColumn name = column("name", JDBCType.VARCHAR); + + public final SqlColumn sort = column("sort", JDBCType.TINYINT); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public NewsCategory() { + super("news_category"); + } + } +} \ No newline at end of file diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryMapper.java b/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryMapper.java new file mode 100644 index 0000000..7f5284e --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsCategoryMapper.java @@ -0,0 +1,184 @@ +package com.java2nb.novel.news.mapper; + +import com.java2nb.novel.news.entity.NewsCategory; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.news.mapper.NewsCategoryDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface NewsCategoryMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("NewsCategoryResult") + NewsCategory selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="NewsCategoryResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true), + @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), + @Result(column="sort", property="sort", jdbcType=JdbcType.TINYINT), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(newsCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, newsCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Integer id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, newsCategory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(NewsCategory record) { + return insert(SqlBuilder.insert(record) + .into(newsCategory) + .map(id).toProperty("id") + .map(name).toProperty("name") + .map(sort).toProperty("sort") + .map(createUserId).toProperty("createUserId") + .map(createTime).toProperty("createTime") + .map(updateUserId).toProperty("updateUserId") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(NewsCategory record) { + return insert(SqlBuilder.insert(record) + .into(newsCategory) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(name).toPropertyWhenPresent("name", record::getName) + .map(sort).toPropertyWhenPresent("sort", record::getSort) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(newsCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(newsCategory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default NewsCategory selectByPrimaryKey(Integer id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, name, sort, createUserId, createTime, updateUserId, updateTime) + .from(newsCategory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(NewsCategory record) { + return UpdateDSL.updateWithMapper(this::update, newsCategory) + .set(id).equalTo(record::getId) + .set(name).equalTo(record::getName) + .set(sort).equalTo(record::getSort) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(NewsCategory record) { + return UpdateDSL.updateWithMapper(this::update, newsCategory) + .set(id).equalToWhenPresent(record::getId) + .set(name).equalToWhenPresent(record::getName) + .set(sort).equalToWhenPresent(record::getSort) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(NewsCategory record) { + return UpdateDSL.updateWithMapper(this::update, newsCategory) + .set(name).equalTo(record::getName) + .set(sort).equalTo(record::getSort) + .set(createUserId).equalTo(record::getCreateUserId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(NewsCategory record) { + return UpdateDSL.updateWithMapper(this::update, newsCategory) + .set(name).equalToWhenPresent(record::getName) + .set(sort).equalToWhenPresent(record::getSort) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsDynamicSqlSupport.java b/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsDynamicSqlSupport.java new file mode 100644 index 0000000..2314ff9 --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsDynamicSqlSupport.java @@ -0,0 +1,70 @@ +package com.java2nb.novel.news.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class NewsDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final News news = new News(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = news.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn catId = news.catId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn catName = news.catName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn sourceName = news.sourceName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn title = news.title; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = news.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = news.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = news.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = news.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn content = news.content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class News extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn catId = column("cat_id", JDBCType.INTEGER); + + public final SqlColumn catName = column("cat_name", JDBCType.VARCHAR); + + public final SqlColumn sourceName = column("source_name", JDBCType.VARCHAR); + + public final SqlColumn title = column("title", JDBCType.VARCHAR); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public final SqlColumn content = column("content", JDBCType.LONGVARCHAR); + + public News() { + super("news"); + } + } +} \ No newline at end of file diff --git a/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsMapper.java b/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsMapper.java new file mode 100644 index 0000000..0446bf7 --- /dev/null +++ b/novel-news/news-service/src/main/java/com/java2nb/novel/news/mapper/NewsMapper.java @@ -0,0 +1,205 @@ +package com.java2nb.novel.news.mapper; + +import com.java2nb.novel.news.entity.News; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.news.mapper.NewsDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface NewsMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("NewsResult") + News selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="NewsResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="cat_id", property="catId", jdbcType=JdbcType.INTEGER), + @Result(column="cat_name", property="catName", jdbcType=JdbcType.VARCHAR), + @Result(column="source_name", property="sourceName", jdbcType=JdbcType.VARCHAR), + @Result(column="title", property="title", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT), + @Result(column="content", property="content", jdbcType=JdbcType.LONGVARCHAR) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(news); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, news); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, news) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(News record) { + return insert(SqlBuilder.insert(record) + .into(news) + .map(id).toProperty("id") + .map(catId).toProperty("catId") + .map(catName).toProperty("catName") + .map(sourceName).toProperty("sourceName") + .map(title).toProperty("title") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .map(updateTime).toProperty("updateTime") + .map(updateUserId).toProperty("updateUserId") + .map(content).toProperty("content") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(News record) { + return insert(SqlBuilder.insert(record) + .into(news) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(catId).toPropertyWhenPresent("catId", record::getCatId) + .map(catName).toPropertyWhenPresent("catName", record::getCatName) + .map(sourceName).toPropertyWhenPresent("sourceName", record::getSourceName) + .map(title).toPropertyWhenPresent("title", record::getTitle) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + .map(content).toPropertyWhenPresent("content", record::getContent) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, catId, catName, sourceName, title, createTime, createUserId, updateTime, updateUserId, content) + .from(news); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, catId, catName, sourceName, title, createTime, createUserId, updateTime, updateUserId, content) + .from(news); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default News selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, catId, catName, sourceName, title, createTime, createUserId, updateTime, updateUserId, content) + .from(news) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(News record) { + return UpdateDSL.updateWithMapper(this::update, news) + .set(id).equalTo(record::getId) + .set(catId).equalTo(record::getCatId) + .set(catName).equalTo(record::getCatName) + .set(sourceName).equalTo(record::getSourceName) + .set(title).equalTo(record::getTitle) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(content).equalTo(record::getContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(News record) { + return UpdateDSL.updateWithMapper(this::update, news) + .set(id).equalToWhenPresent(record::getId) + .set(catId).equalToWhenPresent(record::getCatId) + .set(catName).equalToWhenPresent(record::getCatName) + .set(sourceName).equalToWhenPresent(record::getSourceName) + .set(title).equalToWhenPresent(record::getTitle) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(content).equalToWhenPresent(record::getContent); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(News record) { + return UpdateDSL.updateWithMapper(this::update, news) + .set(catId).equalTo(record::getCatId) + .set(catName).equalTo(record::getCatName) + .set(sourceName).equalTo(record::getSourceName) + .set(title).equalTo(record::getTitle) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .set(content).equalTo(record::getContent) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(News record) { + return UpdateDSL.updateWithMapper(this::update, news) + .set(catId).equalToWhenPresent(record::getCatId) + .set(catName).equalToWhenPresent(record::getCatName) + .set(sourceName).equalToWhenPresent(record::getSourceName) + .set(title).equalToWhenPresent(record::getTitle) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .set(content).equalToWhenPresent(record::getContent) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-news/news-service/src/main/resources/application.yml b/novel-news/news-service/src/main/resources/application.yml new file mode 100644 index 0000000..26ec507 --- /dev/null +++ b/novel-news/news-service/src/main/resources/application.yml @@ -0,0 +1,4 @@ +spring: + profiles: + include: [common] + diff --git a/novel-news/news-service/src/main/resources/bootstrap.yml b/novel-news/news-service/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..bab04cd --- /dev/null +++ b/novel-news/news-service/src/main/resources/bootstrap.yml @@ -0,0 +1,5 @@ +spring: + application: + name: news-service + profiles: + active: dev diff --git a/novel-news/news-service/src/main/resources/logback-boot.xml b/novel-news/news-service/src/main/resources/logback-boot.xml new file mode 100644 index 0000000..8a80c15 --- /dev/null +++ b/novel-news/news-service/src/main/resources/logback-boot.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + + logs/news-service.log + + + + + + logs/debug.%d.%i.log + + 30 + + + 10MB + + + + + + %d %p (%file:%line\)- %m%n + + + UTF-8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/novel-news/pom.xml b/novel-news/pom.xml new file mode 100644 index 0000000..569dab6 --- /dev/null +++ b/novel-news/pom.xml @@ -0,0 +1,20 @@ + + + + novel-cloud + com.java2nb.novel + 1.0.0 + + 4.0.0 + + novel-news + pom + + news-api + news-service + + + + \ No newline at end of file diff --git a/novel-pay/pay-api/pom.xml b/novel-pay/pay-api/pom.xml new file mode 100644 index 0000000..6c69768 --- /dev/null +++ b/novel-pay/pay-api/pom.xml @@ -0,0 +1,32 @@ + + + + novel-pay + com.java2nb.novel + 1.0.0 + + 4.0.0 + + pay-api + + + + com.java2nb.novel + novel-common + + + org.springframework.boot + spring-boot-starter-cache + + + org.springframework.boot + spring-boot-starter-redis + + + + + + + \ No newline at end of file diff --git a/novel-pay/pay-api/src/main/java/com/java2nb/novel/pay/entity/PayLog.java b/novel-pay/pay-api/src/main/java/com/java2nb/novel/pay/entity/PayLog.java new file mode 100644 index 0000000..2aa8815 --- /dev/null +++ b/novel-pay/pay-api/src/main/java/com/java2nb/novel/pay/entity/PayLog.java @@ -0,0 +1,147 @@ +package com.java2nb.novel.pay.entity; + +import io.swagger.annotations.ApiModelProperty; +import java.util.Date; +import javax.annotation.Generated; + +public class PayLog { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "商户订单号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long outTradeNo; + + @ApiModelProperty(value = "交易类型,0:充值购买屋币,1:包年VIP") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte tradeType; + + @ApiModelProperty(value = "支付宝/微信交易号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String tradeNo; + + @ApiModelProperty(value = "支付渠道,1:支付宝,2:微信") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte payChannel; + + @ApiModelProperty(value = "交易金额(单位分)") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer totalAmount; + + @ApiModelProperty(value = "支付用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "支付状态") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String payStatus; + + @ApiModelProperty(value = "创建时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @ApiModelProperty(value = "更新时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getOutTradeNo() { + return outTradeNo; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setOutTradeNo(Long outTradeNo) { + this.outTradeNo = outTradeNo; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getTradeType() { + return tradeType; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTradeType(Byte tradeType) { + this.tradeType = tradeType; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getTradeNo() { + return tradeNo; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTradeNo(String tradeNo) { + this.tradeNo = tradeNo == null ? null : tradeNo.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getPayChannel() { + return payChannel; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPayChannel(Byte payChannel) { + this.payChannel = payChannel; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getTotalAmount() { + return totalAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTotalAmount(Integer totalAmount) { + this.totalAmount = totalAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getPayStatus() { + return payStatus; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPayStatus(String payStatus) { + this.payStatus = payStatus == null ? null : payStatus.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-pay/pay-service/pom.xml b/novel-pay/pay-service/pom.xml new file mode 100644 index 0000000..981943b --- /dev/null +++ b/novel-pay/pay-service/pom.xml @@ -0,0 +1,40 @@ + + + + novel-pay + com.java2nb.novel + 1.0.0 + + 4.0.0 + + pay-service + + + + com.java2nb.novel + pay-api + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.cloud + spring-cloud-netflix-hystrix + + + + + \ No newline at end of file diff --git a/novel-pay/pay-service/src/main/java/com/java2nb/novel/PayApplication.java b/novel-pay/pay-service/src/main/java/com/java2nb/novel/PayApplication.java new file mode 100644 index 0000000..46224e0 --- /dev/null +++ b/novel-pay/pay-service/src/main/java/com/java2nb/novel/PayApplication.java @@ -0,0 +1,20 @@ +package com.java2nb.novel; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * 支付微服务启动器 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/27 + */ +@SpringBootApplication +@EnableFeignClients +public class PayApplication { + + public static void main(String[] args) { + SpringApplication.run(PayApplication.class); + } +} diff --git a/novel-pay/pay-service/src/main/java/com/java2nb/novel/pay/mapper/PayLogDynamicSqlSupport.java b/novel-pay/pay-service/src/main/java/com/java2nb/novel/pay/mapper/PayLogDynamicSqlSupport.java new file mode 100644 index 0000000..c291af4 --- /dev/null +++ b/novel-pay/pay-service/src/main/java/com/java2nb/novel/pay/mapper/PayLogDynamicSqlSupport.java @@ -0,0 +1,70 @@ +package com.java2nb.novel.pay.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class PayLogDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final PayLog payLog = new PayLog(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = payLog.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn outTradeNo = payLog.outTradeNo; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn tradeType = payLog.tradeType; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn tradeNo = payLog.tradeNo; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payChannel = payLog.payChannel; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn totalAmount = payLog.totalAmount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = payLog.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payStatus = payLog.payStatus; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = payLog.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = payLog.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class PayLog extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn outTradeNo = column("out_trade_no", JDBCType.BIGINT); + + public final SqlColumn tradeType = column("trade_type", JDBCType.TINYINT); + + public final SqlColumn tradeNo = column("trade_no", JDBCType.VARCHAR); + + public final SqlColumn payChannel = column("pay_channel", JDBCType.TINYINT); + + public final SqlColumn totalAmount = column("total_amount", JDBCType.INTEGER); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn payStatus = column("pay_status", JDBCType.VARCHAR); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public PayLog() { + super("pay_log"); + } + } +} \ No newline at end of file diff --git a/novel-pay/pay-service/src/main/java/com/java2nb/novel/pay/mapper/PayLogMapper.java b/novel-pay/pay-service/src/main/java/com/java2nb/novel/pay/mapper/PayLogMapper.java new file mode 100644 index 0000000..95ff4d2 --- /dev/null +++ b/novel-pay/pay-service/src/main/java/com/java2nb/novel/pay/mapper/PayLogMapper.java @@ -0,0 +1,211 @@ +package com.java2nb.novel.pay.mapper; + +import static com.java2nb.novel.pay.mapper.PayLogDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.pay.entity.PayLog; +import java.util.List; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +@Mapper +public interface PayLogMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("PayLogResult") + PayLog selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="PayLogResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="out_trade_no", property="outTradeNo", jdbcType=JdbcType.BIGINT), + @Result(column="trade_type", property="tradeType", jdbcType=JdbcType.TINYINT), + @Result(column="trade_no", property="tradeNo", jdbcType=JdbcType.VARCHAR), + @Result(column="pay_channel", property="payChannel", jdbcType=JdbcType.TINYINT), + @Result(column="total_amount", property="totalAmount", jdbcType=JdbcType.INTEGER), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="pay_status", property="payStatus", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(payLog); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, payLog); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, payLog) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(PayLog record) { + return insert(SqlBuilder.insert(record) + .into(payLog) + .map(id).toProperty("id") + .map(outTradeNo).toProperty("outTradeNo") + .map(tradeType).toProperty("tradeType") + .map(tradeNo).toProperty("tradeNo") + .map(payChannel).toProperty("payChannel") + .map(totalAmount).toProperty("totalAmount") + .map(userId).toProperty("userId") + .map(payStatus).toProperty("payStatus") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(PayLog record) { + return insert(SqlBuilder.insert(record) + .into(payLog) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(outTradeNo).toPropertyWhenPresent("outTradeNo", record::getOutTradeNo) + .map(tradeType).toPropertyWhenPresent("tradeType", record::getTradeType) + .map(tradeNo).toPropertyWhenPresent("tradeNo", record::getTradeNo) + .map(payChannel).toPropertyWhenPresent("payChannel", record::getPayChannel) + .map(totalAmount).toPropertyWhenPresent("totalAmount", record::getTotalAmount) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(payStatus).toPropertyWhenPresent("payStatus", record::getPayStatus) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, outTradeNo, tradeType, tradeNo, payChannel, totalAmount, userId, payStatus, createTime, updateTime) + .from(payLog); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, outTradeNo, tradeType, tradeNo, payChannel, totalAmount, userId, payStatus, createTime, updateTime) + .from(payLog); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default PayLog selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, outTradeNo, tradeType, tradeNo, payChannel, totalAmount, userId, payStatus, createTime, updateTime) + .from(payLog) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(PayLog record) { + return UpdateDSL.updateWithMapper(this::update, payLog) + .set(id).equalTo(record::getId) + .set(outTradeNo).equalTo(record::getOutTradeNo) + .set(tradeType).equalTo(record::getTradeType) + .set(tradeNo).equalTo(record::getTradeNo) + .set(payChannel).equalTo(record::getPayChannel) + .set(totalAmount).equalTo(record::getTotalAmount) + .set(userId).equalTo(record::getUserId) + .set(payStatus).equalTo(record::getPayStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(PayLog record) { + return UpdateDSL.updateWithMapper(this::update, payLog) + .set(id).equalToWhenPresent(record::getId) + .set(outTradeNo).equalToWhenPresent(record::getOutTradeNo) + .set(tradeType).equalToWhenPresent(record::getTradeType) + .set(tradeNo).equalToWhenPresent(record::getTradeNo) + .set(payChannel).equalToWhenPresent(record::getPayChannel) + .set(totalAmount).equalToWhenPresent(record::getTotalAmount) + .set(userId).equalToWhenPresent(record::getUserId) + .set(payStatus).equalToWhenPresent(record::getPayStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(PayLog record) { + return UpdateDSL.updateWithMapper(this::update, payLog) + .set(outTradeNo).equalTo(record::getOutTradeNo) + .set(tradeType).equalTo(record::getTradeType) + .set(tradeNo).equalTo(record::getTradeNo) + .set(payChannel).equalTo(record::getPayChannel) + .set(totalAmount).equalTo(record::getTotalAmount) + .set(userId).equalTo(record::getUserId) + .set(payStatus).equalTo(record::getPayStatus) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(PayLog record) { + return UpdateDSL.updateWithMapper(this::update, payLog) + .set(outTradeNo).equalToWhenPresent(record::getOutTradeNo) + .set(tradeType).equalToWhenPresent(record::getTradeType) + .set(tradeNo).equalToWhenPresent(record::getTradeNo) + .set(payChannel).equalToWhenPresent(record::getPayChannel) + .set(totalAmount).equalToWhenPresent(record::getTotalAmount) + .set(userId).equalToWhenPresent(record::getUserId) + .set(payStatus).equalToWhenPresent(record::getPayStatus) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-pay/pay-service/src/main/resources/application.yml b/novel-pay/pay-service/src/main/resources/application.yml new file mode 100644 index 0000000..26ec507 --- /dev/null +++ b/novel-pay/pay-service/src/main/resources/application.yml @@ -0,0 +1,4 @@ +spring: + profiles: + include: [common] + diff --git a/novel-pay/pay-service/src/main/resources/bootstrap.yml b/novel-pay/pay-service/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..3685537 --- /dev/null +++ b/novel-pay/pay-service/src/main/resources/bootstrap.yml @@ -0,0 +1,5 @@ +spring: + application: + name: pay-service + profiles: + active: dev diff --git a/novel-pay/pay-service/src/main/resources/logback-boot.xml b/novel-pay/pay-service/src/main/resources/logback-boot.xml new file mode 100644 index 0000000..8877439 --- /dev/null +++ b/novel-pay/pay-service/src/main/resources/logback-boot.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + + logs/pay-service.log + + + + + + logs/debug.%d.%i.log + + 30 + + + 10MB + + + + + + %d %p (%file:%line\)- %m%n + + + UTF-8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/novel-pay/pom.xml b/novel-pay/pom.xml new file mode 100644 index 0000000..42410dc --- /dev/null +++ b/novel-pay/pom.xml @@ -0,0 +1,20 @@ + + + + novel-cloud + com.java2nb.novel + 1.0.0 + + 4.0.0 + + novel-pay + pom + + pay-service + pay-api + + + + \ No newline at end of file diff --git a/novel-search/pom.xml b/novel-search/pom.xml new file mode 100644 index 0000000..8bdf3ca --- /dev/null +++ b/novel-search/pom.xml @@ -0,0 +1,53 @@ + + + + novel-cloud + com.java2nb.novel + 1.0.0 + + 4.0.0 + + novel-search + + + + com.java2nb.novel + novel-common + + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + org.springframework.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + org.springframework.cloud + spring-cloud-netflix-hystrix + + + + io.searchbox + jest + ${jest.version} + + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + + + + + + + \ No newline at end of file diff --git a/novel-search/src/main/java/com/java2nb/novel/SearchApplication.java b/novel-search/src/main/java/com/java2nb/novel/SearchApplication.java new file mode 100644 index 0000000..3827d48 --- /dev/null +++ b/novel-search/src/main/java/com/java2nb/novel/SearchApplication.java @@ -0,0 +1,20 @@ +package com.java2nb.novel; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * 搜索微服务启动器 + * @author xiongxiaoyang + * @version 1.0 + * @since 2020/5/27 + */ +@SpringBootApplication +@EnableFeignClients +public class SearchApplication { + + public static void main(String[] args) { + SpringApplication.run(SearchApplication.class); + } +} diff --git a/novel-search/src/main/resources/application.yml b/novel-search/src/main/resources/application.yml new file mode 100644 index 0000000..26ec507 --- /dev/null +++ b/novel-search/src/main/resources/application.yml @@ -0,0 +1,4 @@ +spring: + profiles: + include: [common] + diff --git a/novel-search/src/main/resources/bootstrap.yml b/novel-search/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..437a1f9 --- /dev/null +++ b/novel-search/src/main/resources/bootstrap.yml @@ -0,0 +1,5 @@ +spring: + application: + name: novel-search + profiles: + active: dev diff --git a/novel-search/src/main/resources/logback-boot.xml b/novel-search/src/main/resources/logback-boot.xml new file mode 100644 index 0000000..2f570f9 --- /dev/null +++ b/novel-search/src/main/resources/logback-boot.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + + logs/novel-search.log + + + + + + logs/debug.%d.%i.log + + 30 + + + 10MB + + + + + + %d %p (%file:%line\)- %m%n + + + UTF-8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/novel-user/user-api/pom.xml b/novel-user/user-api/pom.xml index 6447298..006889c 100644 --- a/novel-user/user-api/pom.xml +++ b/novel-user/user-api/pom.xml @@ -16,10 +16,6 @@ com.java2nb.novel novel-common - - org.springframework - spring-web - diff --git a/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserBookshelf.java b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserBookshelf.java new file mode 100644 index 0000000..864bb20 --- /dev/null +++ b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserBookshelf.java @@ -0,0 +1,90 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class UserBookshelf { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "上一次阅读的章节内容表ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long preContentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getPreContentId() { + return preContentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPreContentId(Long preContentId) { + this.preContentId = preContentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserBuyRecord.java b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserBuyRecord.java new file mode 100644 index 0000000..586aacb --- /dev/null +++ b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserBuyRecord.java @@ -0,0 +1,120 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class UserBuyRecord { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "购买的小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "购买的小说名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String bookName; + + @ApiModelProperty(value = "购买的章节ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookIndexId; + + @ApiModelProperty(value = "购买的章节名") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String bookIndexName; + + @ApiModelProperty(value = "购买使用的屋币数量") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer buyAmount; + + @ApiModelProperty(value = "购买时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getBookName() { + return bookName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookName(String bookName) { + this.bookName = bookName == null ? null : bookName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookIndexId() { + return bookIndexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookIndexId(Long bookIndexId) { + this.bookIndexId = bookIndexId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getBookIndexName() { + return bookIndexName; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookIndexName(String bookIndexName) { + this.bookIndexName = bookIndexName == null ? null : bookIndexName.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getBuyAmount() { + return buyAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBuyAmount(Integer buyAmount) { + this.buyAmount = buyAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserFeedback.java b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserFeedback.java new file mode 100644 index 0000000..12c5933 --- /dev/null +++ b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserFeedback.java @@ -0,0 +1,64 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class UserFeedback { + @ApiModelProperty(value = "主键id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户id") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "反馈内容") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String content; + + @ApiModelProperty(value = "反馈时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getContent() { + return content; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setContent(String content) { + this.content = content == null ? null : content.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserPayRecord.java b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserPayRecord.java new file mode 100644 index 0000000..cf6d1d1 --- /dev/null +++ b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserPayRecord.java @@ -0,0 +1,106 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class UserPayRecord { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "充值用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "充值方式,1:支付宝,2:微信") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Byte payChannel; + + @ApiModelProperty(value = "商户订单号") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long outTradeNo; + + @ApiModelProperty(value = "充值金额(单位元)") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer totalAmount; + + @ApiModelProperty(value = "获得屋币") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Integer wuAmount; + + @ApiModelProperty(value = "充值时间") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date payTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Byte getPayChannel() { + return payChannel; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPayChannel(Byte payChannel) { + this.payChannel = payChannel; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getOutTradeNo() { + return outTradeNo; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setOutTradeNo(Long outTradeNo) { + this.outTradeNo = outTradeNo; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getTotalAmount() { + return totalAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setTotalAmount(Integer totalAmount) { + this.totalAmount = totalAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Integer getWuAmount() { + return wuAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setWuAmount(Integer wuAmount) { + this.wuAmount = wuAmount; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getPayTime() { + return payTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPayTime(Date payTime) { + this.payTime = payTime; + } +} \ No newline at end of file diff --git a/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserReadHistory.java b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserReadHistory.java new file mode 100644 index 0000000..5e8ea51 --- /dev/null +++ b/novel-user/user-api/src/main/java/com/java2nb/novel/user/entity/UserReadHistory.java @@ -0,0 +1,90 @@ +package com.java2nb.novel.user.entity; + +import io.swagger.annotations.ApiModelProperty; + +import javax.annotation.Generated; +import java.util.Date; + +public class UserReadHistory { + @ApiModelProperty(value = "主键") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @ApiModelProperty(value = "用户ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long userId; + + @ApiModelProperty(value = "小说ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long bookId; + + @ApiModelProperty(value = "上一次阅读的章节内容表ID") + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long preContentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUserId() { + return userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUserId(Long userId) { + this.userId = userId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getBookId() { + return bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setBookId(Long bookId) { + this.bookId = bookId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getPreContentId() { + return preContentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setPreContentId(Long preContentId) { + this.preContentId = preContentId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfDynamicSqlSupport.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfDynamicSqlSupport.java new file mode 100644 index 0000000..fd457f4 --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfDynamicSqlSupport.java @@ -0,0 +1,50 @@ +package com.java2nb.novel.user.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class UserBookshelfDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserBookshelf userBookshelf = new UserBookshelf(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userBookshelf.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userBookshelf.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = userBookshelf.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn preContentId = userBookshelf.preContentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = userBookshelf.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = userBookshelf.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserBookshelf extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn preContentId = column("pre_content_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public UserBookshelf() { + super("user_bookshelf"); + } + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfMapper.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfMapper.java new file mode 100644 index 0000000..c25ad1e --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBookshelfMapper.java @@ -0,0 +1,177 @@ +package com.java2nb.novel.user.mapper; + +import com.java2nb.novel.user.entity.UserBookshelf; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.user.mapper.UserBookshelfDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface UserBookshelfMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserBookshelfResult") + UserBookshelf selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserBookshelfResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="pre_content_id", property="preContentId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userBookshelf); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userBookshelf); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userBookshelf) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserBookshelf record) { + return insert(SqlBuilder.insert(record) + .into(userBookshelf) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(bookId).toProperty("bookId") + .map(preContentId).toProperty("preContentId") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserBookshelf record) { + return insert(SqlBuilder.insert(record) + .into(userBookshelf) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(preContentId).toPropertyWhenPresent("preContentId", record::getPreContentId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, bookId, preContentId, createTime, updateTime) + .from(userBookshelf); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, bookId, preContentId, createTime, updateTime) + .from(userBookshelf); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserBookshelf selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, bookId, preContentId, createTime, updateTime) + .from(userBookshelf) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserBookshelf record) { + return UpdateDSL.updateWithMapper(this::update, userBookshelf) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(preContentId).equalTo(record::getPreContentId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserBookshelf record) { + return UpdateDSL.updateWithMapper(this::update, userBookshelf) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(preContentId).equalToWhenPresent(record::getPreContentId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserBookshelf record) { + return UpdateDSL.updateWithMapper(this::update, userBookshelf) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(preContentId).equalTo(record::getPreContentId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserBookshelf record) { + return UpdateDSL.updateWithMapper(this::update, userBookshelf) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(preContentId).equalToWhenPresent(record::getPreContentId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordDynamicSqlSupport.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordDynamicSqlSupport.java new file mode 100644 index 0000000..390cbc1 --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordDynamicSqlSupport.java @@ -0,0 +1,60 @@ +package com.java2nb.novel.user.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class UserBuyRecordDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserBuyRecord userBuyRecord = new UserBuyRecord(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userBuyRecord.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userBuyRecord.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = userBuyRecord.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookName = userBuyRecord.bookName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookIndexId = userBuyRecord.bookIndexId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookIndexName = userBuyRecord.bookIndexName; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn buyAmount = userBuyRecord.buyAmount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = userBuyRecord.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserBuyRecord extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn bookName = column("book_name", JDBCType.VARCHAR); + + public final SqlColumn bookIndexId = column("book_index_id", JDBCType.BIGINT); + + public final SqlColumn bookIndexName = column("book_index_name", JDBCType.VARCHAR); + + public final SqlColumn buyAmount = column("buy_amount", JDBCType.INTEGER); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public UserBuyRecord() { + super("user_buy_record"); + } + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordMapper.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordMapper.java new file mode 100644 index 0000000..cac61b9 --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserBuyRecordMapper.java @@ -0,0 +1,191 @@ +package com.java2nb.novel.user.mapper; + +import com.java2nb.novel.user.entity.UserBuyRecord; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.user.mapper.UserBuyRecordDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface UserBuyRecordMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserBuyRecordResult") + UserBuyRecord selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserBuyRecordResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="book_name", property="bookName", jdbcType=JdbcType.VARCHAR), + @Result(column="book_index_id", property="bookIndexId", jdbcType=JdbcType.BIGINT), + @Result(column="book_index_name", property="bookIndexName", jdbcType=JdbcType.VARCHAR), + @Result(column="buy_amount", property="buyAmount", jdbcType=JdbcType.INTEGER), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userBuyRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userBuyRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userBuyRecord) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserBuyRecord record) { + return insert(SqlBuilder.insert(record) + .into(userBuyRecord) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(bookId).toProperty("bookId") + .map(bookName).toProperty("bookName") + .map(bookIndexId).toProperty("bookIndexId") + .map(bookIndexName).toProperty("bookIndexName") + .map(buyAmount).toProperty("buyAmount") + .map(createTime).toProperty("createTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserBuyRecord record) { + return insert(SqlBuilder.insert(record) + .into(userBuyRecord) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(bookName).toPropertyWhenPresent("bookName", record::getBookName) + .map(bookIndexId).toPropertyWhenPresent("bookIndexId", record::getBookIndexId) + .map(bookIndexName).toPropertyWhenPresent("bookIndexName", record::getBookIndexName) + .map(buyAmount).toPropertyWhenPresent("buyAmount", record::getBuyAmount) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, bookId, bookName, bookIndexId, bookIndexName, buyAmount, createTime) + .from(userBuyRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, bookId, bookName, bookIndexId, bookIndexName, buyAmount, createTime) + .from(userBuyRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserBuyRecord selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, bookId, bookName, bookIndexId, bookIndexName, buyAmount, createTime) + .from(userBuyRecord) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserBuyRecord record) { + return UpdateDSL.updateWithMapper(this::update, userBuyRecord) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(bookName).equalTo(record::getBookName) + .set(bookIndexId).equalTo(record::getBookIndexId) + .set(bookIndexName).equalTo(record::getBookIndexName) + .set(buyAmount).equalTo(record::getBuyAmount) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserBuyRecord record) { + return UpdateDSL.updateWithMapper(this::update, userBuyRecord) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(bookName).equalToWhenPresent(record::getBookName) + .set(bookIndexId).equalToWhenPresent(record::getBookIndexId) + .set(bookIndexName).equalToWhenPresent(record::getBookIndexName) + .set(buyAmount).equalToWhenPresent(record::getBuyAmount) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserBuyRecord record) { + return UpdateDSL.updateWithMapper(this::update, userBuyRecord) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(bookName).equalTo(record::getBookName) + .set(bookIndexId).equalTo(record::getBookIndexId) + .set(bookIndexName).equalTo(record::getBookIndexName) + .set(buyAmount).equalTo(record::getBuyAmount) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserBuyRecord record) { + return UpdateDSL.updateWithMapper(this::update, userBuyRecord) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(bookName).equalToWhenPresent(record::getBookName) + .set(bookIndexId).equalToWhenPresent(record::getBookIndexId) + .set(bookIndexName).equalToWhenPresent(record::getBookIndexName) + .set(buyAmount).equalToWhenPresent(record::getBuyAmount) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackDynamicSqlSupport.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackDynamicSqlSupport.java new file mode 100644 index 0000000..f6679c0 --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackDynamicSqlSupport.java @@ -0,0 +1,40 @@ +package com.java2nb.novel.user.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class UserFeedbackDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserFeedback userFeedback = new UserFeedback(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userFeedback.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userFeedback.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn content = userFeedback.content; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = userFeedback.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserFeedback extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn content = column("content", JDBCType.VARCHAR); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public UserFeedback() { + super("user_feedback"); + } + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackMapper.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackMapper.java new file mode 100644 index 0000000..b173219 --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserFeedbackMapper.java @@ -0,0 +1,163 @@ +package com.java2nb.novel.user.mapper; + +import com.java2nb.novel.user.entity.UserFeedback; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.user.mapper.UserFeedbackDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface UserFeedbackMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserFeedbackResult") + UserFeedback selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserFeedbackResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="content", property="content", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userFeedback); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userFeedback); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userFeedback) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserFeedback record) { + return insert(SqlBuilder.insert(record) + .into(userFeedback) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(content).toProperty("content") + .map(createTime).toProperty("createTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserFeedback record) { + return insert(SqlBuilder.insert(record) + .into(userFeedback) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(content).toPropertyWhenPresent("content", record::getContent) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, content, createTime) + .from(userFeedback); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, content, createTime) + .from(userFeedback); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserFeedback selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, content, createTime) + .from(userFeedback) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserFeedback record) { + return UpdateDSL.updateWithMapper(this::update, userFeedback) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(content).equalTo(record::getContent) + .set(createTime).equalTo(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserFeedback record) { + return UpdateDSL.updateWithMapper(this::update, userFeedback) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(content).equalToWhenPresent(record::getContent) + .set(createTime).equalToWhenPresent(record::getCreateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserFeedback record) { + return UpdateDSL.updateWithMapper(this::update, userFeedback) + .set(userId).equalTo(record::getUserId) + .set(content).equalTo(record::getContent) + .set(createTime).equalTo(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserFeedback record) { + return UpdateDSL.updateWithMapper(this::update, userFeedback) + .set(userId).equalToWhenPresent(record::getUserId) + .set(content).equalToWhenPresent(record::getContent) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordDynamicSqlSupport.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordDynamicSqlSupport.java new file mode 100644 index 0000000..79fe6f4 --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordDynamicSqlSupport.java @@ -0,0 +1,55 @@ +package com.java2nb.novel.user.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class UserPayRecordDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserPayRecord userPayRecord = new UserPayRecord(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userPayRecord.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userPayRecord.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payChannel = userPayRecord.payChannel; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn outTradeNo = userPayRecord.outTradeNo; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn totalAmount = userPayRecord.totalAmount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn wuAmount = userPayRecord.wuAmount; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn payTime = userPayRecord.payTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserPayRecord extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn payChannel = column("pay_channel", JDBCType.TINYINT); + + public final SqlColumn outTradeNo = column("out_trade_no", JDBCType.BIGINT); + + public final SqlColumn totalAmount = column("total_amount", JDBCType.INTEGER); + + public final SqlColumn wuAmount = column("wu_amount", JDBCType.INTEGER); + + public final SqlColumn payTime = column("pay_time", JDBCType.TIMESTAMP); + + public UserPayRecord() { + super("user_pay_record"); + } + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordMapper.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordMapper.java new file mode 100644 index 0000000..ccb83d2 --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserPayRecordMapper.java @@ -0,0 +1,184 @@ +package com.java2nb.novel.user.mapper; + +import com.java2nb.novel.user.entity.UserPayRecord; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.user.mapper.UserPayRecordDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface UserPayRecordMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserPayRecordResult") + UserPayRecord selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserPayRecordResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="pay_channel", property="payChannel", jdbcType=JdbcType.TINYINT), + @Result(column="out_trade_no", property="outTradeNo", jdbcType=JdbcType.BIGINT), + @Result(column="total_amount", property="totalAmount", jdbcType=JdbcType.INTEGER), + @Result(column="wu_amount", property="wuAmount", jdbcType=JdbcType.INTEGER), + @Result(column="pay_time", property="payTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userPayRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userPayRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userPayRecord) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserPayRecord record) { + return insert(SqlBuilder.insert(record) + .into(userPayRecord) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(payChannel).toProperty("payChannel") + .map(outTradeNo).toProperty("outTradeNo") + .map(totalAmount).toProperty("totalAmount") + .map(wuAmount).toProperty("wuAmount") + .map(payTime).toProperty("payTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserPayRecord record) { + return insert(SqlBuilder.insert(record) + .into(userPayRecord) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(payChannel).toPropertyWhenPresent("payChannel", record::getPayChannel) + .map(outTradeNo).toPropertyWhenPresent("outTradeNo", record::getOutTradeNo) + .map(totalAmount).toPropertyWhenPresent("totalAmount", record::getTotalAmount) + .map(wuAmount).toPropertyWhenPresent("wuAmount", record::getWuAmount) + .map(payTime).toPropertyWhenPresent("payTime", record::getPayTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, payChannel, outTradeNo, totalAmount, wuAmount, payTime) + .from(userPayRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, payChannel, outTradeNo, totalAmount, wuAmount, payTime) + .from(userPayRecord); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserPayRecord selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, payChannel, outTradeNo, totalAmount, wuAmount, payTime) + .from(userPayRecord) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserPayRecord record) { + return UpdateDSL.updateWithMapper(this::update, userPayRecord) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(payChannel).equalTo(record::getPayChannel) + .set(outTradeNo).equalTo(record::getOutTradeNo) + .set(totalAmount).equalTo(record::getTotalAmount) + .set(wuAmount).equalTo(record::getWuAmount) + .set(payTime).equalTo(record::getPayTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserPayRecord record) { + return UpdateDSL.updateWithMapper(this::update, userPayRecord) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(payChannel).equalToWhenPresent(record::getPayChannel) + .set(outTradeNo).equalToWhenPresent(record::getOutTradeNo) + .set(totalAmount).equalToWhenPresent(record::getTotalAmount) + .set(wuAmount).equalToWhenPresent(record::getWuAmount) + .set(payTime).equalToWhenPresent(record::getPayTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserPayRecord record) { + return UpdateDSL.updateWithMapper(this::update, userPayRecord) + .set(userId).equalTo(record::getUserId) + .set(payChannel).equalTo(record::getPayChannel) + .set(outTradeNo).equalTo(record::getOutTradeNo) + .set(totalAmount).equalTo(record::getTotalAmount) + .set(wuAmount).equalTo(record::getWuAmount) + .set(payTime).equalTo(record::getPayTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserPayRecord record) { + return UpdateDSL.updateWithMapper(this::update, userPayRecord) + .set(userId).equalToWhenPresent(record::getUserId) + .set(payChannel).equalToWhenPresent(record::getPayChannel) + .set(outTradeNo).equalToWhenPresent(record::getOutTradeNo) + .set(totalAmount).equalToWhenPresent(record::getTotalAmount) + .set(wuAmount).equalToWhenPresent(record::getWuAmount) + .set(payTime).equalToWhenPresent(record::getPayTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryDynamicSqlSupport.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryDynamicSqlSupport.java new file mode 100644 index 0000000..f17646c --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryDynamicSqlSupport.java @@ -0,0 +1,50 @@ +package com.java2nb.novel.user.mapper; + +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +import javax.annotation.Generated; +import java.sql.JDBCType; +import java.util.Date; + +public final class UserReadHistoryDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final UserReadHistory userReadHistory = new UserReadHistory(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = userReadHistory.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn userId = userReadHistory.userId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn bookId = userReadHistory.bookId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn preContentId = userReadHistory.preContentId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = userReadHistory.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = userReadHistory.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class UserReadHistory extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn userId = column("user_id", JDBCType.BIGINT); + + public final SqlColumn bookId = column("book_id", JDBCType.BIGINT); + + public final SqlColumn preContentId = column("pre_content_id", JDBCType.BIGINT); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public UserReadHistory() { + super("user_read_history"); + } + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryMapper.java b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryMapper.java new file mode 100644 index 0000000..f235c91 --- /dev/null +++ b/novel-user/user-service/src/main/java/com/java2nb/novel/user/mapper/UserReadHistoryMapper.java @@ -0,0 +1,177 @@ +package com.java2nb.novel.user.mapper; + +import com.java2nb.novel.user.entity.UserReadHistory; +import org.apache.ibatis.annotations.*; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.DeleteDSL; +import org.mybatis.dynamic.sql.delete.MyBatis3DeleteModelAdapter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategy; +import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter; +import org.mybatis.dynamic.sql.select.QueryExpressionDSL; +import org.mybatis.dynamic.sql.select.SelectDSL; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.MyBatis3UpdateModelAdapter; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; + +import javax.annotation.Generated; +import java.util.List; + +import static com.java2nb.novel.user.mapper.UserReadHistoryDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; + +@Mapper +public interface UserReadHistoryMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("UserReadHistoryResult") + UserReadHistory selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="UserReadHistoryResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT), + @Result(column="book_id", property="bookId", jdbcType=JdbcType.BIGINT), + @Result(column="pre_content_id", property="preContentId", jdbcType=JdbcType.BIGINT), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL> countByExample() { + return SelectDSL.selectWithMapper(this::count, SqlBuilder.count()) + .from(userReadHistory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default DeleteDSL> deleteByExample() { + return DeleteDSL.deleteFromWithMapper(this::delete, userReadHistory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return DeleteDSL.deleteFromWithMapper(this::delete, userReadHistory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(UserReadHistory record) { + return insert(SqlBuilder.insert(record) + .into(userReadHistory) + .map(id).toProperty("id") + .map(userId).toProperty("userId") + .map(bookId).toProperty("bookId") + .map(preContentId).toProperty("preContentId") + .map(createTime).toProperty("createTime") + .map(updateTime).toProperty("updateTime") + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(UserReadHistory record) { + return insert(SqlBuilder.insert(record) + .into(userReadHistory) + .map(id).toPropertyWhenPresent("id", record::getId) + .map(userId).toPropertyWhenPresent("userId", record::getUserId) + .map(bookId).toPropertyWhenPresent("bookId", record::getBookId) + .map(preContentId).toPropertyWhenPresent("preContentId", record::getPreContentId) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .build() + .render(RenderingStrategy.MYBATIS3)); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectByExample() { + return SelectDSL.selectWithMapper(this::selectMany, id, userId, bookId, preContentId, createTime, updateTime) + .from(userReadHistory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default QueryExpressionDSL>> selectDistinctByExample() { + return SelectDSL.selectDistinctWithMapper(this::selectMany, id, userId, bookId, preContentId, createTime, updateTime) + .from(userReadHistory); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UserReadHistory selectByPrimaryKey(Long id_) { + return SelectDSL.selectWithMapper(this::selectOne, id, userId, bookId, preContentId, createTime, updateTime) + .from(userReadHistory) + .where(id, isEqualTo(id_)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExample(UserReadHistory record) { + return UpdateDSL.updateWithMapper(this::update, userReadHistory) + .set(id).equalTo(record::getId) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(preContentId).equalTo(record::getPreContentId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default UpdateDSL> updateByExampleSelective(UserReadHistory record) { + return UpdateDSL.updateWithMapper(this::update, userReadHistory) + .set(id).equalToWhenPresent(record::getId) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(preContentId).equalToWhenPresent(record::getPreContentId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(UserReadHistory record) { + return UpdateDSL.updateWithMapper(this::update, userReadHistory) + .set(userId).equalTo(record::getUserId) + .set(bookId).equalTo(record::getBookId) + .set(preContentId).equalTo(record::getPreContentId) + .set(createTime).equalTo(record::getCreateTime) + .set(updateTime).equalTo(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(UserReadHistory record) { + return UpdateDSL.updateWithMapper(this::update, userReadHistory) + .set(userId).equalToWhenPresent(record::getUserId) + .set(bookId).equalToWhenPresent(record::getBookId) + .set(preContentId).equalToWhenPresent(record::getPreContentId) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .where(id, isEqualTo(record::getId)) + .build() + .execute(); + } +} \ No newline at end of file diff --git a/novel-user/user-service/src/main/resources/application.yml b/novel-user/user-service/src/main/resources/application.yml index 42c2133..26ec507 100644 --- a/novel-user/user-service/src/main/resources/application.yml +++ b/novel-user/user-service/src/main/resources/application.yml @@ -2,7 +2,3 @@ spring: profiles: include: [common] - cloud: - nacos: - discovery: - server-addr: 47.106.243.172:8848 \ No newline at end of file diff --git a/novel-user/user-service/src/main/resources/bootstrap.yml b/novel-user/user-service/src/main/resources/bootstrap.yml index 5e1e1ef..3b63358 100644 --- a/novel-user/user-service/src/main/resources/bootstrap.yml +++ b/novel-user/user-service/src/main/resources/bootstrap.yml @@ -4,7 +4,10 @@ spring: cloud: nacos: config: - server-addr: 47.106.243.172:8848 - file-extension: yml - group: dev - namespace: a77986d7-c528-4367-afcb-7b9efee75564 + ext‐config[0]: + data‐id: novel-jwt.yml + group: novel-common + refresh: true + profiles: + active: dev + diff --git a/pom.xml b/pom.xml index 425ff21..197aa24 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,13 @@ novel-monitor novel-user novel-gen + novel-book + novel-news + novel-home + novel-pay + novel-search + novel-author + pom @@ -56,6 +63,10 @@ 1.0.0 1.0.0 + 1.0.0 + 1.0.0 + 1.0.0 + 1.0.0 @@ -87,6 +98,26 @@ user-api ${novel-user-api.version} + + com.java2nb.novel + book-api + ${novel-book-api.version} + + + com.java2nb.novel + news-api + ${novel-news-api.version} + + + com.java2nb.novel + pay-api + ${novel-pay-api.version} + + + com.java2nb.novel + author-api + ${novel-author-api.version} + @@ -237,4 +268,6 @@ + + \ No newline at end of file