浏览代码

更新热门推荐接口,使用return_recommand表

tianyunperfect 3 年之前
父节点
当前提交
e5a1bcbb14
共有 18 个文件被更改,包括 7963 次插入14 次删除
  1. 3 7
      book-server/src/main/java/com/book/server/controller/BookController.java
  2. 402 0
      book-server/src/main/java/com/book/server/dao/entity/BookshelfRecommand.java
  3. 402 0
      book-server/src/main/java/com/book/server/dao/entity/ReturnRecommand.java
  4. 494 0
      book-server/src/main/java/com/book/server/dao/entity/SmartRecommand.java
  5. 1221 0
      book-server/src/main/java/com/book/server/dao/entity/example/BookshelfRecommandExample.java
  6. 1221 0
      book-server/src/main/java/com/book/server/dao/entity/example/ReturnRecommandExample.java
  7. 1621 0
      book-server/src/main/java/com/book/server/dao/entity/example/SmartRecommandExample.java
  8. 1 0
      book-server/src/main/java/com/book/server/dao/mapper/BookMapper2.java
  9. 164 0
      book-server/src/main/java/com/book/server/dao/mapper/BookshelfRecommandMapper.java
  10. 164 0
      book-server/src/main/java/com/book/server/dao/mapper/ReturnRecommandMapper.java
  11. 164 0
      book-server/src/main/java/com/book/server/dao/mapper/SmartRecommandMapper.java
  12. 2 0
      book-server/src/main/java/com/book/server/service/BookService.java
  13. 15 0
      book-server/src/main/java/com/book/server/service/impl/BookServiceImpl.java
  14. 18 3
      book-server/src/main/resources/mapper/Book2Mapper.xml
  15. 648 0
      book-server/src/main/resources/mapper/BookshelfRecommandMapper.xml
  16. 648 0
      book-server/src/main/resources/mapper/ReturnRecommandMapper.xml
  17. 767 0
      book-server/src/main/resources/mapper/SmartRecommandMapper.xml
  18. 8 4
      book-server/src/main/resources/mybatis-generator.xml

+ 3 - 7
book-server/src/main/java/com/book/server/controller/BookController.java

@@ -61,13 +61,9 @@ public class BookController extends BaseController {
      * @return
      */
     @PostMapping("/topRecommend")
-    public Result<List<Book>> topRecommend(@RequestBody QueryVO queryVO) {
-        queryVO.setPage(0);
-        queryVO.setSize(10);
-        queryVO.setPageId(queryVO.getSex()); // 为了复用recommendByRead的代码
-        List<Book> books = bookService.recommendByRead(queryVO);
-        Collections.shuffle(books);
-        return Result.success(books.subList(0, 4));
+    public Result<List<BookRes>> topRecommend(@RequestBody QueryVO queryVO) {
+        List<BookRes> books = bookService.topRecommend(queryVO);
+        return Result.success(books);
     }
 
     /**

+ 402 - 0
book-server/src/main/java/com/book/server/dao/entity/BookshelfRecommand.java

@@ -0,0 +1,402 @@
+package com.book.server.dao.entity;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import lombok.Data;
+
+@Data
+public class BookshelfRecommand implements Serializable {
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column bookshelf_recommand.id
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer id;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column bookshelf_recommand.book_id
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Long bookId;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column bookshelf_recommand.book_name
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String bookName;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column bookshelf_recommand.sex
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String sex;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column bookshelf_recommand.status
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String status;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column bookshelf_recommand.createtime
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer createtime;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column bookshelf_recommand.updatetime
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer updatetime;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static BookshelfRecommand.Builder builder() {
+        return new BookshelfRecommand.Builder();
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Builder {
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private BookshelfRecommand obj;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder() {
+            this.obj = new BookshelfRecommand();
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column bookshelf_recommand.id
+         *
+         * @param id the value for bookshelf_recommand.id
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column bookshelf_recommand.book_id
+         *
+         * @param bookId the value for bookshelf_recommand.book_id
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder bookId(Long bookId) {
+            obj.setBookId(bookId);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column bookshelf_recommand.book_name
+         *
+         * @param bookName the value for bookshelf_recommand.book_name
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder bookName(String bookName) {
+            obj.setBookName(bookName);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column bookshelf_recommand.sex
+         *
+         * @param sex the value for bookshelf_recommand.sex
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder sex(String sex) {
+            obj.setSex(sex);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column bookshelf_recommand.status
+         *
+         * @param status the value for bookshelf_recommand.status
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder status(String status) {
+            obj.setStatus(status);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column bookshelf_recommand.createtime
+         *
+         * @param createtime the value for bookshelf_recommand.createtime
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder createtime(Integer createtime) {
+            obj.setCreatetime(createtime);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column bookshelf_recommand.updatetime
+         *
+         * @param updatetime the value for bookshelf_recommand.updatetime
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder updatetime(Integer updatetime) {
+            obj.setUpdatetime(updatetime);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public BookshelfRecommand build() {
+            return this.obj;
+        }
+    }
+
+    /**
+     * This enum was generated by MyBatis Generator.
+     * This enum corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public enum Column {
+        id("id", "id", "INTEGER", false),
+        bookId("book_id", "bookId", "BIGINT", false),
+        bookName("book_name", "bookName", "VARCHAR", false),
+        sex("sex", "sex", "CHAR", false),
+        status("status", "status", "CHAR", false),
+        createtime("createtime", "createtime", "INTEGER", false),
+        updatetime("updatetime", "updatetime", "INTEGER", false);
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private static final String BEGINNING_DELIMITER = "\"";
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private static final String ENDING_DELIMITER = "\"";
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String column;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final boolean isColumnNameDelimited;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String javaProperty;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String jdbcType;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String value() {
+            return this.column;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getValue() {
+            return this.column;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getJavaProperty() {
+            return this.javaProperty;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getJdbcType() {
+            return this.jdbcType;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) {
+            this.column = column;
+            this.javaProperty = javaProperty;
+            this.jdbcType = jdbcType;
+            this.isColumnNameDelimited = isColumnNameDelimited;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String desc() {
+            return this.getEscapedColumnName() + " DESC";
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String asc() {
+            return this.getEscapedColumnName() + " ASC";
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public static Column[] excludes(Column ... excludes) {
+            ArrayList<Column> columns = new ArrayList<>(Arrays.asList(Column.values()));
+            if (excludes != null && excludes.length > 0) {
+                columns.removeAll(new ArrayList<>(Arrays.asList(excludes)));
+            }
+            return columns.toArray(new Column[]{});
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public static Column[] all() {
+            return Column.values();
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getEscapedColumnName() {
+            if (this.isColumnNameDelimited) {
+                return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString();
+            } else {
+                return this.column;
+            }
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getAliasedEscapedColumnName() {
+            return this.getEscapedColumnName();
+        }
+    }
+}

+ 402 - 0
book-server/src/main/java/com/book/server/dao/entity/ReturnRecommand.java

@@ -0,0 +1,402 @@
+package com.book.server.dao.entity;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import lombok.Data;
+
+@Data
+public class ReturnRecommand implements Serializable {
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column return_recommand.id
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer id;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column return_recommand.book_id
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Long bookId;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column return_recommand.book_name
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String bookName;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column return_recommand.sex
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String sex;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column return_recommand.status
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String status;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column return_recommand.createtime
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer createtime;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column return_recommand.updatetime
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer updatetime;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static ReturnRecommand.Builder builder() {
+        return new ReturnRecommand.Builder();
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Builder {
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private ReturnRecommand obj;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder() {
+            this.obj = new ReturnRecommand();
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column return_recommand.id
+         *
+         * @param id the value for return_recommand.id
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column return_recommand.book_id
+         *
+         * @param bookId the value for return_recommand.book_id
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder bookId(Long bookId) {
+            obj.setBookId(bookId);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column return_recommand.book_name
+         *
+         * @param bookName the value for return_recommand.book_name
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder bookName(String bookName) {
+            obj.setBookName(bookName);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column return_recommand.sex
+         *
+         * @param sex the value for return_recommand.sex
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder sex(String sex) {
+            obj.setSex(sex);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column return_recommand.status
+         *
+         * @param status the value for return_recommand.status
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder status(String status) {
+            obj.setStatus(status);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column return_recommand.createtime
+         *
+         * @param createtime the value for return_recommand.createtime
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder createtime(Integer createtime) {
+            obj.setCreatetime(createtime);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column return_recommand.updatetime
+         *
+         * @param updatetime the value for return_recommand.updatetime
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder updatetime(Integer updatetime) {
+            obj.setUpdatetime(updatetime);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public ReturnRecommand build() {
+            return this.obj;
+        }
+    }
+
+    /**
+     * This enum was generated by MyBatis Generator.
+     * This enum corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public enum Column {
+        id("id", "id", "INTEGER", false),
+        bookId("book_id", "bookId", "BIGINT", false),
+        bookName("book_name", "bookName", "VARCHAR", false),
+        sex("sex", "sex", "CHAR", false),
+        status("status", "status", "CHAR", false),
+        createtime("createtime", "createtime", "INTEGER", false),
+        updatetime("updatetime", "updatetime", "INTEGER", false);
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private static final String BEGINNING_DELIMITER = "\"";
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private static final String ENDING_DELIMITER = "\"";
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String column;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final boolean isColumnNameDelimited;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String javaProperty;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String jdbcType;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String value() {
+            return this.column;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getValue() {
+            return this.column;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getJavaProperty() {
+            return this.javaProperty;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getJdbcType() {
+            return this.jdbcType;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) {
+            this.column = column;
+            this.javaProperty = javaProperty;
+            this.jdbcType = jdbcType;
+            this.isColumnNameDelimited = isColumnNameDelimited;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String desc() {
+            return this.getEscapedColumnName() + " DESC";
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String asc() {
+            return this.getEscapedColumnName() + " ASC";
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public static Column[] excludes(Column ... excludes) {
+            ArrayList<Column> columns = new ArrayList<>(Arrays.asList(Column.values()));
+            if (excludes != null && excludes.length > 0) {
+                columns.removeAll(new ArrayList<>(Arrays.asList(excludes)));
+            }
+            return columns.toArray(new Column[]{});
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public static Column[] all() {
+            return Column.values();
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getEscapedColumnName() {
+            if (this.isColumnNameDelimited) {
+                return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString();
+            } else {
+                return this.column;
+            }
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getAliasedEscapedColumnName() {
+            return this.getEscapedColumnName();
+        }
+    }
+}

+ 494 - 0
book-server/src/main/java/com/book/server/dao/entity/SmartRecommand.java

@@ -0,0 +1,494 @@
+package com.book.server.dao.entity;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import lombok.Data;
+
+@Data
+public class SmartRecommand implements Serializable {
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.id
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer id;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.book_id
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Long bookId;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.book_name
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String bookName;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.title
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String title;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.description
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String description;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.image
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String image;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.sex
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String sex;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.status
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String status;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.location
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private String location;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.createtime
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer createtime;
+
+    /**
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column smart_recommand.updatetime
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private Integer updatetime;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static SmartRecommand.Builder builder() {
+        return new SmartRecommand.Builder();
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Builder {
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private SmartRecommand obj;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder() {
+            this.obj = new SmartRecommand();
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.id
+         *
+         * @param id the value for smart_recommand.id
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder id(Integer id) {
+            obj.setId(id);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.book_id
+         *
+         * @param bookId the value for smart_recommand.book_id
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder bookId(Long bookId) {
+            obj.setBookId(bookId);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.book_name
+         *
+         * @param bookName the value for smart_recommand.book_name
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder bookName(String bookName) {
+            obj.setBookName(bookName);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.title
+         *
+         * @param title the value for smart_recommand.title
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder title(String title) {
+            obj.setTitle(title);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.description
+         *
+         * @param description the value for smart_recommand.description
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder description(String description) {
+            obj.setDescription(description);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.image
+         *
+         * @param image the value for smart_recommand.image
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder image(String image) {
+            obj.setImage(image);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.sex
+         *
+         * @param sex the value for smart_recommand.sex
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder sex(String sex) {
+            obj.setSex(sex);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.status
+         *
+         * @param status the value for smart_recommand.status
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder status(String status) {
+            obj.setStatus(status);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.location
+         *
+         * @param location the value for smart_recommand.location
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder location(String location) {
+            obj.setLocation(location);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.createtime
+         *
+         * @param createtime the value for smart_recommand.createtime
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder createtime(Integer createtime) {
+            obj.setCreatetime(createtime);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method sets the value of the database column smart_recommand.updatetime
+         *
+         * @param updatetime the value for smart_recommand.updatetime
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Builder updatetime(Integer updatetime) {
+            obj.setUpdatetime(updatetime);
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public SmartRecommand build() {
+            return this.obj;
+        }
+    }
+
+    /**
+     * This enum was generated by MyBatis Generator.
+     * This enum corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public enum Column {
+        id("id", "id", "INTEGER", false),
+        bookId("book_id", "bookId", "BIGINT", false),
+        bookName("book_name", "bookName", "VARCHAR", false),
+        title("title", "title", "VARCHAR", false),
+        description("description", "description", "VARCHAR", false),
+        image("image", "image", "VARCHAR", false),
+        sex("sex", "sex", "CHAR", false),
+        status("status", "status", "CHAR", false),
+        location("location", "location", "CHAR", false),
+        createtime("createtime", "createtime", "INTEGER", false),
+        updatetime("updatetime", "updatetime", "INTEGER", false);
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private static final String BEGINNING_DELIMITER = "\"";
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private static final String ENDING_DELIMITER = "\"";
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String column;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final boolean isColumnNameDelimited;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String javaProperty;
+
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private final String jdbcType;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String value() {
+            return this.column;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getValue() {
+            return this.column;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getJavaProperty() {
+            return this.javaProperty;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getJdbcType() {
+            return this.jdbcType;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        Column(String column, String javaProperty, String jdbcType, boolean isColumnNameDelimited) {
+            this.column = column;
+            this.javaProperty = javaProperty;
+            this.jdbcType = jdbcType;
+            this.isColumnNameDelimited = isColumnNameDelimited;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String desc() {
+            return this.getEscapedColumnName() + " DESC";
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String asc() {
+            return this.getEscapedColumnName() + " ASC";
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public static Column[] excludes(Column ... excludes) {
+            ArrayList<Column> columns = new ArrayList<>(Arrays.asList(Column.values()));
+            if (excludes != null && excludes.length > 0) {
+                columns.removeAll(new ArrayList<>(Arrays.asList(excludes)));
+            }
+            return columns.toArray(new Column[]{});
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public static Column[] all() {
+            return Column.values();
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getEscapedColumnName() {
+            if (this.isColumnNameDelimited) {
+                return new StringBuilder().append(BEGINNING_DELIMITER).append(this.column).append(ENDING_DELIMITER).toString();
+            } else {
+                return this.column;
+            }
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public String getAliasedEscapedColumnName() {
+            return this.getEscapedColumnName();
+        }
+    }
+}

+ 1221 - 0
book-server/src/main/java/com/book/server/dao/entity/example/BookshelfRecommandExample.java

@@ -0,0 +1,1221 @@
+package com.book.server.dao.entity.example;
+
+import com.book.server.dao.entity.BookshelfRecommand;
+import java.util.ArrayList;
+import java.util.List;
+
+public class BookshelfRecommandExample {
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected String orderByClause;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected boolean distinct;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected List<Criteria> oredCriteria;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Integer offset;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Integer rows;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public BookshelfRecommandExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public BookshelfRecommandExample orderBy(String orderByClause) {
+        this.setOrderByClause(orderByClause);
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public BookshelfRecommandExample orderBy(String ... orderByClauses) {
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < orderByClauses.length; i++) {
+            sb.append(orderByClauses[i]);
+            if (i < orderByClauses.length - 1) {
+                sb.append(" , ");
+            }
+        }
+        this.setOrderByClause(sb.toString());
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria(this);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+        rows = null;
+        offset = null;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setOffset(Integer offset) {
+        this.offset = offset;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Integer getOffset() {
+        return this.offset;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setRows(Integer rows) {
+        this.rows = rows;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Integer getRows() {
+        return this.rows;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public BookshelfRecommandExample limit(Integer rows) {
+        this.rows = rows;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public BookshelfRecommandExample limit(Integer offset, Integer rows) {
+        this.offset = offset;
+        this.rows = rows;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public BookshelfRecommandExample page(Integer page, Integer pageSize) {
+        this.offset = page * pageSize;
+        this.rows = pageSize;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static Criteria newAndCreateCriteria() {
+        BookshelfRecommandExample example = new BookshelfRecommandExample();
+        return example.createCriteria();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public BookshelfRecommandExample when(boolean condition, IExampleWhen then) {
+        if (condition) {
+            then.example(this);
+        }
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public BookshelfRecommandExample when(boolean condition, IExampleWhen then, IExampleWhen otherwise) {
+        if (condition) {
+            then.example(this);
+        } else {
+            otherwise.example(this);
+        }
+        return this;
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("id = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("id <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("id > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("id >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("id < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("id <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIsNull() {
+            addCriterion("book_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIsNotNull() {
+            addCriterion("book_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdEqualTo(Long value) {
+            addCriterion("book_id =", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotEqualTo(Long value) {
+            addCriterion("book_id <>", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThan(Long value) {
+            addCriterion("book_id >", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("book_id >=", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThan(Long value) {
+            addCriterion("book_id <", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanOrEqualTo(Long value) {
+            addCriterion("book_id <=", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIn(List<Long> values) {
+            addCriterion("book_id in", values, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotIn(List<Long> values) {
+            addCriterion("book_id not in", values, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdBetween(Long value1, Long value2) {
+            addCriterion("book_id between", value1, value2, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotBetween(Long value1, Long value2) {
+            addCriterion("book_id not between", value1, value2, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIsNull() {
+            addCriterion("book_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIsNotNull() {
+            addCriterion("book_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameEqualTo(String value) {
+            addCriterion("book_name =", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotEqualTo(String value) {
+            addCriterion("book_name <>", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThan(String value) {
+            addCriterion("book_name >", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanOrEqualTo(String value) {
+            addCriterion("book_name >=", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThan(String value) {
+            addCriterion("book_name <", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanOrEqualTo(String value) {
+            addCriterion("book_name <=", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLike(String value) {
+            addCriterion("book_name like", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotLike(String value) {
+            addCriterion("book_name not like", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIn(List<String> values) {
+            addCriterion("book_name in", values, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotIn(List<String> values) {
+            addCriterion("book_name not in", values, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameBetween(String value1, String value2) {
+            addCriterion("book_name between", value1, value2, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotBetween(String value1, String value2) {
+            addCriterion("book_name not between", value1, value2, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIsNull() {
+            addCriterion("sex is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIsNotNull() {
+            addCriterion("sex is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexEqualTo(String value) {
+            addCriterion("sex =", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("sex = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotEqualTo(String value) {
+            addCriterion("sex <>", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("sex <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThan(String value) {
+            addCriterion("sex >", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("sex > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanOrEqualTo(String value) {
+            addCriterion("sex >=", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("sex >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThan(String value) {
+            addCriterion("sex <", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("sex < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanOrEqualTo(String value) {
+            addCriterion("sex <=", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("sex <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLike(String value) {
+            addCriterion("sex like", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotLike(String value) {
+            addCriterion("sex not like", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIn(List<String> values) {
+            addCriterion("sex in", values, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotIn(List<String> values) {
+            addCriterion("sex not in", values, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexBetween(String value1, String value2) {
+            addCriterion("sex between", value1, value2, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotBetween(String value1, String value2) {
+            addCriterion("sex not between", value1, value2, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(String value) {
+            addCriterion("status =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("status = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(String value) {
+            addCriterion("status <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("status <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(String value) {
+            addCriterion("status >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("status > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("status >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("status >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(String value) {
+            addCriterion("status <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("status < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(String value) {
+            addCriterion("status <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("status <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLike(String value) {
+            addCriterion("status like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotLike(String value) {
+            addCriterion("status not like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<String> values) {
+            addCriterion("status in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<String> values) {
+            addCriterion("status not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(String value1, String value2) {
+            addCriterion("status between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(String value1, String value2) {
+            addCriterion("status not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIsNull() {
+            addCriterion("createtime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIsNotNull() {
+            addCriterion("createtime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeEqualTo(Integer value) {
+            addCriterion("createtime =", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotEqualTo(Integer value) {
+            addCriterion("createtime <>", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThan(Integer value) {
+            addCriterion("createtime >", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("createtime >=", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThan(Integer value) {
+            addCriterion("createtime <", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanOrEqualTo(Integer value) {
+            addCriterion("createtime <=", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIn(List<Integer> values) {
+            addCriterion("createtime in", values, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotIn(List<Integer> values) {
+            addCriterion("createtime not in", values, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeBetween(Integer value1, Integer value2) {
+            addCriterion("createtime between", value1, value2, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotBetween(Integer value1, Integer value2) {
+            addCriterion("createtime not between", value1, value2, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNull() {
+            addCriterion("updatetime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNotNull() {
+            addCriterion("updatetime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeEqualTo(Integer value) {
+            addCriterion("updatetime =", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotEqualTo(Integer value) {
+            addCriterion("updatetime <>", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThan(Integer value) {
+            addCriterion("updatetime >", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("updatetime >=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThan(Integer value) {
+            addCriterion("updatetime <", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanOrEqualTo(Integer value) {
+            addCriterion("updatetime <=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanOrEqualToColumn(BookshelfRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIn(List<Integer> values) {
+            addCriterion("updatetime in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotIn(List<Integer> values) {
+            addCriterion("updatetime not in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeBetween(Integer value1, Integer value2) {
+            addCriterion("updatetime between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotBetween(Integer value1, Integer value2) {
+            addCriterion("updatetime not between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated do_not_delete_during_merge Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Criteria extends GeneratedCriteria {
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private BookshelfRecommandExample example;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        protected Criteria(BookshelfRecommandExample example) {
+            super();
+            this.example = example;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public BookshelfRecommandExample example() {
+            return this.example;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        @Deprecated
+        public Criteria andIf(boolean ifAdd, ICriteriaAdd add) {
+            if (ifAdd) {
+                add.add(this);
+            }
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Criteria when(boolean condition, ICriteriaWhen then) {
+            if (condition) {
+                then.criteria(this);
+            }
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Criteria when(boolean condition, ICriteriaWhen then, ICriteriaWhen otherwise) {
+            if (condition) {
+                then.criteria(this);
+            } else {
+                otherwise.criteria(this);
+            }
+            return this;
+        }
+
+        @Deprecated
+        public interface ICriteriaAdd {
+            /**
+             * This method was generated by MyBatis Generator.
+             * This method corresponds to the database table bookshelf_recommand
+             *
+             * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+             */
+            Criteria add(Criteria add);
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+
+    public interface ICriteriaWhen {
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        void criteria(Criteria criteria);
+    }
+
+    public interface IExampleWhen {
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table bookshelf_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        void example(com.book.server.dao.entity.example.BookshelfRecommandExample example);
+    }
+}

+ 1221 - 0
book-server/src/main/java/com/book/server/dao/entity/example/ReturnRecommandExample.java

@@ -0,0 +1,1221 @@
+package com.book.server.dao.entity.example;
+
+import com.book.server.dao.entity.ReturnRecommand;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ReturnRecommandExample {
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected String orderByClause;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected boolean distinct;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected List<Criteria> oredCriteria;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Integer offset;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Integer rows;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public ReturnRecommandExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public ReturnRecommandExample orderBy(String orderByClause) {
+        this.setOrderByClause(orderByClause);
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public ReturnRecommandExample orderBy(String ... orderByClauses) {
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < orderByClauses.length; i++) {
+            sb.append(orderByClauses[i]);
+            if (i < orderByClauses.length - 1) {
+                sb.append(" , ");
+            }
+        }
+        this.setOrderByClause(sb.toString());
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria(this);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+        rows = null;
+        offset = null;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setOffset(Integer offset) {
+        this.offset = offset;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Integer getOffset() {
+        return this.offset;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setRows(Integer rows) {
+        this.rows = rows;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Integer getRows() {
+        return this.rows;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public ReturnRecommandExample limit(Integer rows) {
+        this.rows = rows;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public ReturnRecommandExample limit(Integer offset, Integer rows) {
+        this.offset = offset;
+        this.rows = rows;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public ReturnRecommandExample page(Integer page, Integer pageSize) {
+        this.offset = page * pageSize;
+        this.rows = pageSize;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static Criteria newAndCreateCriteria() {
+        ReturnRecommandExample example = new ReturnRecommandExample();
+        return example.createCriteria();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public ReturnRecommandExample when(boolean condition, IExampleWhen then) {
+        if (condition) {
+            then.example(this);
+        }
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public ReturnRecommandExample when(boolean condition, IExampleWhen then, IExampleWhen otherwise) {
+        if (condition) {
+            then.example(this);
+        } else {
+            otherwise.example(this);
+        }
+        return this;
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("id = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("id <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("id > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("id >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("id < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("id <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIsNull() {
+            addCriterion("book_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIsNotNull() {
+            addCriterion("book_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdEqualTo(Long value) {
+            addCriterion("book_id =", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotEqualTo(Long value) {
+            addCriterion("book_id <>", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThan(Long value) {
+            addCriterion("book_id >", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("book_id >=", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThan(Long value) {
+            addCriterion("book_id <", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanOrEqualTo(Long value) {
+            addCriterion("book_id <=", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIn(List<Long> values) {
+            addCriterion("book_id in", values, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotIn(List<Long> values) {
+            addCriterion("book_id not in", values, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdBetween(Long value1, Long value2) {
+            addCriterion("book_id between", value1, value2, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotBetween(Long value1, Long value2) {
+            addCriterion("book_id not between", value1, value2, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIsNull() {
+            addCriterion("book_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIsNotNull() {
+            addCriterion("book_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameEqualTo(String value) {
+            addCriterion("book_name =", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotEqualTo(String value) {
+            addCriterion("book_name <>", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThan(String value) {
+            addCriterion("book_name >", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanOrEqualTo(String value) {
+            addCriterion("book_name >=", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThan(String value) {
+            addCriterion("book_name <", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanOrEqualTo(String value) {
+            addCriterion("book_name <=", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLike(String value) {
+            addCriterion("book_name like", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotLike(String value) {
+            addCriterion("book_name not like", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIn(List<String> values) {
+            addCriterion("book_name in", values, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotIn(List<String> values) {
+            addCriterion("book_name not in", values, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameBetween(String value1, String value2) {
+            addCriterion("book_name between", value1, value2, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotBetween(String value1, String value2) {
+            addCriterion("book_name not between", value1, value2, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIsNull() {
+            addCriterion("sex is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIsNotNull() {
+            addCriterion("sex is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexEqualTo(String value) {
+            addCriterion("sex =", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("sex = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotEqualTo(String value) {
+            addCriterion("sex <>", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("sex <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThan(String value) {
+            addCriterion("sex >", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("sex > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanOrEqualTo(String value) {
+            addCriterion("sex >=", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("sex >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThan(String value) {
+            addCriterion("sex <", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("sex < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanOrEqualTo(String value) {
+            addCriterion("sex <=", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("sex <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLike(String value) {
+            addCriterion("sex like", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotLike(String value) {
+            addCriterion("sex not like", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIn(List<String> values) {
+            addCriterion("sex in", values, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotIn(List<String> values) {
+            addCriterion("sex not in", values, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexBetween(String value1, String value2) {
+            addCriterion("sex between", value1, value2, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotBetween(String value1, String value2) {
+            addCriterion("sex not between", value1, value2, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(String value) {
+            addCriterion("status =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("status = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(String value) {
+            addCriterion("status <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("status <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(String value) {
+            addCriterion("status >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("status > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("status >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("status >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(String value) {
+            addCriterion("status <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("status < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(String value) {
+            addCriterion("status <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("status <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLike(String value) {
+            addCriterion("status like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotLike(String value) {
+            addCriterion("status not like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<String> values) {
+            addCriterion("status in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<String> values) {
+            addCriterion("status not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(String value1, String value2) {
+            addCriterion("status between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(String value1, String value2) {
+            addCriterion("status not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIsNull() {
+            addCriterion("createtime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIsNotNull() {
+            addCriterion("createtime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeEqualTo(Integer value) {
+            addCriterion("createtime =", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotEqualTo(Integer value) {
+            addCriterion("createtime <>", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThan(Integer value) {
+            addCriterion("createtime >", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("createtime >=", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThan(Integer value) {
+            addCriterion("createtime <", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanOrEqualTo(Integer value) {
+            addCriterion("createtime <=", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIn(List<Integer> values) {
+            addCriterion("createtime in", values, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotIn(List<Integer> values) {
+            addCriterion("createtime not in", values, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeBetween(Integer value1, Integer value2) {
+            addCriterion("createtime between", value1, value2, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotBetween(Integer value1, Integer value2) {
+            addCriterion("createtime not between", value1, value2, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNull() {
+            addCriterion("updatetime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNotNull() {
+            addCriterion("updatetime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeEqualTo(Integer value) {
+            addCriterion("updatetime =", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotEqualTo(Integer value) {
+            addCriterion("updatetime <>", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThan(Integer value) {
+            addCriterion("updatetime >", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("updatetime >=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThan(Integer value) {
+            addCriterion("updatetime <", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanOrEqualTo(Integer value) {
+            addCriterion("updatetime <=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanOrEqualToColumn(ReturnRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIn(List<Integer> values) {
+            addCriterion("updatetime in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotIn(List<Integer> values) {
+            addCriterion("updatetime not in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeBetween(Integer value1, Integer value2) {
+            addCriterion("updatetime between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotBetween(Integer value1, Integer value2) {
+            addCriterion("updatetime not between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table return_recommand
+     *
+     * @mbg.generated do_not_delete_during_merge Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Criteria extends GeneratedCriteria {
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private ReturnRecommandExample example;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        protected Criteria(ReturnRecommandExample example) {
+            super();
+            this.example = example;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public ReturnRecommandExample example() {
+            return this.example;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        @Deprecated
+        public Criteria andIf(boolean ifAdd, ICriteriaAdd add) {
+            if (ifAdd) {
+                add.add(this);
+            }
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Criteria when(boolean condition, ICriteriaWhen then) {
+            if (condition) {
+                then.criteria(this);
+            }
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Criteria when(boolean condition, ICriteriaWhen then, ICriteriaWhen otherwise) {
+            if (condition) {
+                then.criteria(this);
+            } else {
+                otherwise.criteria(this);
+            }
+            return this;
+        }
+
+        @Deprecated
+        public interface ICriteriaAdd {
+            /**
+             * This method was generated by MyBatis Generator.
+             * This method corresponds to the database table return_recommand
+             *
+             * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+             */
+            Criteria add(Criteria add);
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+
+    public interface ICriteriaWhen {
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        void criteria(Criteria criteria);
+    }
+
+    public interface IExampleWhen {
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table return_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        void example(com.book.server.dao.entity.example.ReturnRecommandExample example);
+    }
+}

+ 1621 - 0
book-server/src/main/java/com/book/server/dao/entity/example/SmartRecommandExample.java

@@ -0,0 +1,1621 @@
+package com.book.server.dao.entity.example;
+
+import com.book.server.dao.entity.SmartRecommand;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SmartRecommandExample {
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected String orderByClause;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected boolean distinct;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected List<Criteria> oredCriteria;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Integer offset;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Integer rows;
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public SmartRecommandExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public SmartRecommandExample orderBy(String orderByClause) {
+        this.setOrderByClause(orderByClause);
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public SmartRecommandExample orderBy(String ... orderByClauses) {
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < orderByClauses.length; i++) {
+            sb.append(orderByClauses[i]);
+            if (i < orderByClauses.length - 1) {
+                sb.append(" , ");
+            }
+        }
+        this.setOrderByClause(sb.toString());
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria(this);
+        return criteria;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+        rows = null;
+        offset = null;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setOffset(Integer offset) {
+        this.offset = offset;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Integer getOffset() {
+        return this.offset;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public void setRows(Integer rows) {
+        this.rows = rows;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public Integer getRows() {
+        return this.rows;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public SmartRecommandExample limit(Integer rows) {
+        this.rows = rows;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public SmartRecommandExample limit(Integer offset, Integer rows) {
+        this.offset = offset;
+        this.rows = rows;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public SmartRecommandExample page(Integer page, Integer pageSize) {
+        this.offset = page * pageSize;
+        this.rows = pageSize;
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static Criteria newAndCreateCriteria() {
+        SmartRecommandExample example = new SmartRecommandExample();
+        return example.createCriteria();
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public SmartRecommandExample when(boolean condition, IExampleWhen then) {
+        if (condition) {
+            then.example(this);
+        }
+        return this;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public SmartRecommandExample when(boolean condition, IExampleWhen then, IExampleWhen otherwise) {
+        if (condition) {
+            then.example(this);
+        } else {
+            otherwise.example(this);
+        }
+        return this;
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("id = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("id <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("id > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("id >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("id < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("id <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIsNull() {
+            addCriterion("book_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIsNotNull() {
+            addCriterion("book_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdEqualTo(Long value) {
+            addCriterion("book_id =", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotEqualTo(Long value) {
+            addCriterion("book_id <>", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThan(Long value) {
+            addCriterion("book_id >", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("book_id >=", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThan(Long value) {
+            addCriterion("book_id <", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanOrEqualTo(Long value) {
+            addCriterion("book_id <=", value, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_id <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdIn(List<Long> values) {
+            addCriterion("book_id in", values, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotIn(List<Long> values) {
+            addCriterion("book_id not in", values, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdBetween(Long value1, Long value2) {
+            addCriterion("book_id between", value1, value2, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookIdNotBetween(Long value1, Long value2) {
+            addCriterion("book_id not between", value1, value2, "bookId");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIsNull() {
+            addCriterion("book_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIsNotNull() {
+            addCriterion("book_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameEqualTo(String value) {
+            addCriterion("book_name =", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotEqualTo(String value) {
+            addCriterion("book_name <>", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThan(String value) {
+            addCriterion("book_name >", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanOrEqualTo(String value) {
+            addCriterion("book_name >=", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThan(String value) {
+            addCriterion("book_name <", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanOrEqualTo(String value) {
+            addCriterion("book_name <=", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("book_name <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameLike(String value) {
+            addCriterion("book_name like", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotLike(String value) {
+            addCriterion("book_name not like", value, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameIn(List<String> values) {
+            addCriterion("book_name in", values, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotIn(List<String> values) {
+            addCriterion("book_name not in", values, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameBetween(String value1, String value2) {
+            addCriterion("book_name between", value1, value2, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andBookNameNotBetween(String value1, String value2) {
+            addCriterion("book_name not between", value1, value2, "bookName");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIsNull() {
+            addCriterion("title is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIsNotNull() {
+            addCriterion("title is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleEqualTo(String value) {
+            addCriterion("title =", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("title = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotEqualTo(String value) {
+            addCriterion("title <>", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("title <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThan(String value) {
+            addCriterion("title >", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("title > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThanOrEqualTo(String value) {
+            addCriterion("title >=", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("title >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThan(String value) {
+            addCriterion("title <", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("title < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThanOrEqualTo(String value) {
+            addCriterion("title <=", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("title <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLike(String value) {
+            addCriterion("title like", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotLike(String value) {
+            addCriterion("title not like", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIn(List<String> values) {
+            addCriterion("title in", values, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotIn(List<String> values) {
+            addCriterion("title not in", values, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleBetween(String value1, String value2) {
+            addCriterion("title between", value1, value2, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotBetween(String value1, String value2) {
+            addCriterion("title not between", value1, value2, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIsNull() {
+            addCriterion("description is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIsNotNull() {
+            addCriterion("description is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionEqualTo(String value) {
+            addCriterion("description =", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("description = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotEqualTo(String value) {
+            addCriterion("description <>", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("description <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionGreaterThan(String value) {
+            addCriterion("description >", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("description > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionGreaterThanOrEqualTo(String value) {
+            addCriterion("description >=", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("description >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLessThan(String value) {
+            addCriterion("description <", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("description < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLessThanOrEqualTo(String value) {
+            addCriterion("description <=", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("description <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionLike(String value) {
+            addCriterion("description like", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotLike(String value) {
+            addCriterion("description not like", value, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionIn(List<String> values) {
+            addCriterion("description in", values, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotIn(List<String> values) {
+            addCriterion("description not in", values, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionBetween(String value1, String value2) {
+            addCriterion("description between", value1, value2, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andDescriptionNotBetween(String value1, String value2) {
+            addCriterion("description not between", value1, value2, "description");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageIsNull() {
+            addCriterion("image is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageIsNotNull() {
+            addCriterion("image is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageEqualTo(String value) {
+            addCriterion("image =", value, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("image = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andImageNotEqualTo(String value) {
+            addCriterion("image <>", value, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("image <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andImageGreaterThan(String value) {
+            addCriterion("image >", value, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("image > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andImageGreaterThanOrEqualTo(String value) {
+            addCriterion("image >=", value, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("image >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andImageLessThan(String value) {
+            addCriterion("image <", value, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("image < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andImageLessThanOrEqualTo(String value) {
+            addCriterion("image <=", value, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("image <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andImageLike(String value) {
+            addCriterion("image like", value, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageNotLike(String value) {
+            addCriterion("image not like", value, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageIn(List<String> values) {
+            addCriterion("image in", values, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageNotIn(List<String> values) {
+            addCriterion("image not in", values, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageBetween(String value1, String value2) {
+            addCriterion("image between", value1, value2, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andImageNotBetween(String value1, String value2) {
+            addCriterion("image not between", value1, value2, "image");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIsNull() {
+            addCriterion("sex is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIsNotNull() {
+            addCriterion("sex is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexEqualTo(String value) {
+            addCriterion("sex =", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("sex = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotEqualTo(String value) {
+            addCriterion("sex <>", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("sex <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThan(String value) {
+            addCriterion("sex >", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("sex > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanOrEqualTo(String value) {
+            addCriterion("sex >=", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("sex >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThan(String value) {
+            addCriterion("sex <", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("sex < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanOrEqualTo(String value) {
+            addCriterion("sex <=", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("sex <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andSexLike(String value) {
+            addCriterion("sex like", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotLike(String value) {
+            addCriterion("sex not like", value, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexIn(List<String> values) {
+            addCriterion("sex in", values, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotIn(List<String> values) {
+            addCriterion("sex not in", values, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexBetween(String value1, String value2) {
+            addCriterion("sex between", value1, value2, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andSexNotBetween(String value1, String value2) {
+            addCriterion("sex not between", value1, value2, "sex");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(String value) {
+            addCriterion("status =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("status = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(String value) {
+            addCriterion("status <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("status <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(String value) {
+            addCriterion("status >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("status > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("status >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("status >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(String value) {
+            addCriterion("status <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("status < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(String value) {
+            addCriterion("status <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("status <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLike(String value) {
+            addCriterion("status like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotLike(String value) {
+            addCriterion("status not like", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<String> values) {
+            addCriterion("status in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<String> values) {
+            addCriterion("status not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(String value1, String value2) {
+            addCriterion("status between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(String value1, String value2) {
+            addCriterion("status not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationIsNull() {
+            addCriterion("location is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationIsNotNull() {
+            addCriterion("location is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationEqualTo(String value) {
+            addCriterion("location =", value, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("location = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationNotEqualTo(String value) {
+            addCriterion("location <>", value, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("location <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationGreaterThan(String value) {
+            addCriterion("location >", value, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("location > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationGreaterThanOrEqualTo(String value) {
+            addCriterion("location >=", value, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("location >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationLessThan(String value) {
+            addCriterion("location <", value, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("location < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationLessThanOrEqualTo(String value) {
+            addCriterion("location <=", value, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("location <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationLike(String value) {
+            addCriterion("location like", value, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationNotLike(String value) {
+            addCriterion("location not like", value, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationIn(List<String> values) {
+            addCriterion("location in", values, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationNotIn(List<String> values) {
+            addCriterion("location not in", values, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationBetween(String value1, String value2) {
+            addCriterion("location between", value1, value2, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andLocationNotBetween(String value1, String value2) {
+            addCriterion("location not between", value1, value2, "location");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIsNull() {
+            addCriterion("createtime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIsNotNull() {
+            addCriterion("createtime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeEqualTo(Integer value) {
+            addCriterion("createtime =", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotEqualTo(Integer value) {
+            addCriterion("createtime <>", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThan(Integer value) {
+            addCriterion("createtime >", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("createtime >=", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThan(Integer value) {
+            addCriterion("createtime <", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanOrEqualTo(Integer value) {
+            addCriterion("createtime <=", value, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("createtime <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeIn(List<Integer> values) {
+            addCriterion("createtime in", values, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotIn(List<Integer> values) {
+            addCriterion("createtime not in", values, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeBetween(Integer value1, Integer value2) {
+            addCriterion("createtime between", value1, value2, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreatetimeNotBetween(Integer value1, Integer value2) {
+            addCriterion("createtime not between", value1, value2, "createtime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNull() {
+            addCriterion("updatetime is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIsNotNull() {
+            addCriterion("updatetime is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeEqualTo(Integer value) {
+            addCriterion("updatetime =", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime = ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotEqualTo(Integer value) {
+            addCriterion("updatetime <>", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime <> ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThan(Integer value) {
+            addCriterion("updatetime >", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime > ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("updatetime >=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeGreaterThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime >= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThan(Integer value) {
+            addCriterion("updatetime <", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime < ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanOrEqualTo(Integer value) {
+            addCriterion("updatetime <=", value, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeLessThanOrEqualToColumn(SmartRecommand.Column column) {
+            addCriterion(new StringBuilder("updatetime <= ").append(column.getEscapedColumnName()).toString());
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeIn(List<Integer> values) {
+            addCriterion("updatetime in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotIn(List<Integer> values) {
+            addCriterion("updatetime not in", values, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeBetween(Integer value1, Integer value2) {
+            addCriterion("updatetime between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdatetimeNotBetween(Integer value1, Integer value2) {
+            addCriterion("updatetime not between", value1, value2, "updatetime");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table smart_recommand
+     *
+     * @mbg.generated do_not_delete_during_merge Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Criteria extends GeneratedCriteria {
+        /**
+         * This field was generated by MyBatis Generator.
+         * This field corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        private SmartRecommandExample example;
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        protected Criteria(SmartRecommandExample example) {
+            super();
+            this.example = example;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public SmartRecommandExample example() {
+            return this.example;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        @Deprecated
+        public Criteria andIf(boolean ifAdd, ICriteriaAdd add) {
+            if (ifAdd) {
+                add.add(this);
+            }
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Criteria when(boolean condition, ICriteriaWhen then) {
+            if (condition) {
+                then.criteria(this);
+            }
+            return this;
+        }
+
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        public Criteria when(boolean condition, ICriteriaWhen then, ICriteriaWhen otherwise) {
+            if (condition) {
+                then.criteria(this);
+            } else {
+                otherwise.criteria(this);
+            }
+            return this;
+        }
+
+        @Deprecated
+        public interface ICriteriaAdd {
+            /**
+             * This method was generated by MyBatis Generator.
+             * This method corresponds to the database table smart_recommand
+             *
+             * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+             */
+            Criteria add(Criteria add);
+        }
+    }
+
+    /**
+     * This class was generated by MyBatis Generator.
+     * This class corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+
+    public interface ICriteriaWhen {
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        void criteria(Criteria criteria);
+    }
+
+    public interface IExampleWhen {
+        /**
+         * This method was generated by MyBatis Generator.
+         * This method corresponds to the database table smart_recommand
+         *
+         * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+         */
+        void example(com.book.server.dao.entity.example.SmartRecommandExample example);
+    }
+}

+ 1 - 0
book-server/src/main/java/com/book/server/dao/mapper/BookMapper2.java

@@ -12,4 +12,5 @@ import java.util.List;
 @Repository
 public interface BookMapper2 {
     List<BookRes> queryBookRes(@Param("queryVO") QueryVO queryVO, @Param("page") int page, @Param("size") int size);
+    List<BookRes> queryReturnRecommand(@Param("queryVO") QueryVO queryVO, @Param("page") int page, @Param("size") int size);
 }

+ 164 - 0
book-server/src/main/java/com/book/server/dao/mapper/BookshelfRecommandMapper.java

@@ -0,0 +1,164 @@
+package com.book.server.dao.mapper;
+
+import com.book.server.dao.entity.BookshelfRecommand;
+import com.book.server.dao.entity.example.BookshelfRecommandExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BookshelfRecommandMapper {
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    long countByExample(BookshelfRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int deleteByExample(BookshelfRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int deleteByPrimaryKey(Integer id);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int insert(BookshelfRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int insertSelective(@Param("record") BookshelfRecommand record, @Param("selective") BookshelfRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    BookshelfRecommand selectOneByExample(BookshelfRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    BookshelfRecommand selectOneByExampleSelective(@Param("example") BookshelfRecommandExample example, @Param("selective") BookshelfRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    List<BookshelfRecommand> selectByExampleSelective(@Param("example") BookshelfRecommandExample example, @Param("selective") BookshelfRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    List<BookshelfRecommand> selectByExample(BookshelfRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    BookshelfRecommand selectByPrimaryKeySelective(@Param("id") Integer id, @Param("selective") BookshelfRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    BookshelfRecommand selectByPrimaryKey(Integer id);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByExampleSelective(@Param("record") BookshelfRecommand record, @Param("example") BookshelfRecommandExample example, @Param("selective") BookshelfRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByExample(@Param("record") BookshelfRecommand record, @Param("example") BookshelfRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByPrimaryKeySelective(@Param("record") BookshelfRecommand record, @Param("selective") BookshelfRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByPrimaryKey(BookshelfRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int batchInsert(@Param("list") List<BookshelfRecommand> list);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int batchInsertSelective(@Param("list") List<BookshelfRecommand> list, @Param("selective") BookshelfRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int upsert(BookshelfRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table bookshelf_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int upsertSelective(@Param("record") BookshelfRecommand record, @Param("selective") BookshelfRecommand.Column ... selective);
+}

+ 164 - 0
book-server/src/main/java/com/book/server/dao/mapper/ReturnRecommandMapper.java

@@ -0,0 +1,164 @@
+package com.book.server.dao.mapper;
+
+import com.book.server.dao.entity.ReturnRecommand;
+import com.book.server.dao.entity.example.ReturnRecommandExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface ReturnRecommandMapper {
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    long countByExample(ReturnRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int deleteByExample(ReturnRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int deleteByPrimaryKey(Integer id);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int insert(ReturnRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int insertSelective(@Param("record") ReturnRecommand record, @Param("selective") ReturnRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    ReturnRecommand selectOneByExample(ReturnRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    ReturnRecommand selectOneByExampleSelective(@Param("example") ReturnRecommandExample example, @Param("selective") ReturnRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    List<ReturnRecommand> selectByExampleSelective(@Param("example") ReturnRecommandExample example, @Param("selective") ReturnRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    List<ReturnRecommand> selectByExample(ReturnRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    ReturnRecommand selectByPrimaryKeySelective(@Param("id") Integer id, @Param("selective") ReturnRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    ReturnRecommand selectByPrimaryKey(Integer id);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByExampleSelective(@Param("record") ReturnRecommand record, @Param("example") ReturnRecommandExample example, @Param("selective") ReturnRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByExample(@Param("record") ReturnRecommand record, @Param("example") ReturnRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByPrimaryKeySelective(@Param("record") ReturnRecommand record, @Param("selective") ReturnRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByPrimaryKey(ReturnRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int batchInsert(@Param("list") List<ReturnRecommand> list);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int batchInsertSelective(@Param("list") List<ReturnRecommand> list, @Param("selective") ReturnRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int upsert(ReturnRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table return_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int upsertSelective(@Param("record") ReturnRecommand record, @Param("selective") ReturnRecommand.Column ... selective);
+}

+ 164 - 0
book-server/src/main/java/com/book/server/dao/mapper/SmartRecommandMapper.java

@@ -0,0 +1,164 @@
+package com.book.server.dao.mapper;
+
+import com.book.server.dao.entity.SmartRecommand;
+import com.book.server.dao.entity.example.SmartRecommandExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface SmartRecommandMapper {
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    long countByExample(SmartRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int deleteByExample(SmartRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int deleteByPrimaryKey(Integer id);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int insert(SmartRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int insertSelective(@Param("record") SmartRecommand record, @Param("selective") SmartRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    SmartRecommand selectOneByExample(SmartRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    SmartRecommand selectOneByExampleSelective(@Param("example") SmartRecommandExample example, @Param("selective") SmartRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    List<SmartRecommand> selectByExampleSelective(@Param("example") SmartRecommandExample example, @Param("selective") SmartRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    List<SmartRecommand> selectByExample(SmartRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    SmartRecommand selectByPrimaryKeySelective(@Param("id") Integer id, @Param("selective") SmartRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    SmartRecommand selectByPrimaryKey(Integer id);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByExampleSelective(@Param("record") SmartRecommand record, @Param("example") SmartRecommandExample example, @Param("selective") SmartRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByExample(@Param("record") SmartRecommand record, @Param("example") SmartRecommandExample example);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByPrimaryKeySelective(@Param("record") SmartRecommand record, @Param("selective") SmartRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int updateByPrimaryKey(SmartRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int batchInsert(@Param("list") List<SmartRecommand> list);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int batchInsertSelective(@Param("list") List<SmartRecommand> list, @Param("selective") SmartRecommand.Column ... selective);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int upsert(SmartRecommand record);
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method corresponds to the database table smart_recommand
+     *
+     * @mbg.generated Fri Aug 20 19:52:17 CST 2021
+     */
+    int upsertSelective(@Param("record") SmartRecommand record, @Param("selective") SmartRecommand.Column ... selective);
+}

+ 2 - 0
book-server/src/main/java/com/book/server/service/BookService.java

@@ -21,4 +21,6 @@ public interface BookService {
     List<Chapter> getChaptersByBookId(String bookId);
 
     List<SearchKeyword> getSearchKeywordBySex(String sex);
+
+    List<BookRes> topRecommend(QueryVO queryVO);
 }

+ 15 - 0
book-server/src/main/java/com/book/server/service/impl/BookServiceImpl.java

@@ -1,6 +1,7 @@
 package com.book.server.service.impl;
 
 
+import com.book.server.common.entity.Result;
 import com.book.server.common.util.JsonUtils;
 import com.book.server.dao.entity.*;
 import com.book.server.dao.entity.example.*;
@@ -275,5 +276,19 @@ public class BookServiceImpl implements BookService {
         return searchKeywords;
     }
 
+    @Override
+    public List<BookRes> topRecommend(QueryVO queryVO) {
+        List<BookRes> bookRes = bookMapper2.queryReturnRecommand(queryVO, 0, 20);
+        return getRandom(bookRes);
+    }
+
+    private List<BookRes> getRandom(List<BookRes> bookRes) {
+        if (bookRes.size() <= 4) {
+            return bookRes;
+        }
+        Collections.shuffle(bookRes);
+        return bookRes.subList(0, 4);
+    }
+
 
 }

+ 18 - 3
book-server/src/main/resources/mapper/Book2Mapper.xml

@@ -62,10 +62,25 @@
     </resultMap>
 
     <select id="queryBookRes" resultMap="BaseResultMap">
-        SELECT t.*,c.`name` as "categoryName"
-        from book t left join book_category c on t.`book_category_id`=c.`id`
+        SELECT t.*, c.`name` as "categoryName"
+        from book t
+                 left join book_category c on t.`book_category_id` = c.`id`
         where t.state = '1'
-          and (t.`name` like #{queryVO.query} or t.author like #{queryVO.query}) limit #{page}, #{size};
+          and (t.`name` like #{queryVO.query} or t.author like #{queryVO.query}) limit #{page}
+            , #{size};
+    </select>
+    <select id="queryReturnRecommand" resultMap="BaseResultMap">
+        SELECT t.*,
+               c.`name`  as "categoryName"
+        FROM book t
+                 LEFT JOIN book_category c ON t.`book_category_id` = c.`id`
+        WHERE t.id IN (
+            SELECT book_id
+            FROM return_recommand
+            WHERE sex = #{queryVO.sex}
+              AND STATUS = 'normal'
+        ) LIMIT #{page},
+            #{size}
     </select>
 
 </mapper>

+ 648 - 0
book-server/src/main/resources/mapper/BookshelfRecommandMapper.xml

@@ -0,0 +1,648 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.book.server.dao.mapper.BookshelfRecommandMapper">
+  <resultMap id="BaseResultMap" type="com.book.server.dao.entity.BookshelfRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="book_id" jdbcType="BIGINT" property="bookId" />
+    <result column="book_name" jdbcType="VARCHAR" property="bookName" />
+    <result column="sex" jdbcType="CHAR" property="sex" />
+    <result column="status" jdbcType="CHAR" property="status" />
+    <result column="createtime" jdbcType="INTEGER" property="createtime" />
+    <result column="updatetime" jdbcType="INTEGER" property="updatetime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    id, book_id, book_name, sex, status, createtime, updatetime
+  </sql>
+  <select id="selectByExample" parameterType="com.book.server.dao.entity.example.BookshelfRecommandExample" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from bookshelf_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="rows != null">
+      <if test="offset != null">
+        limit ${offset}, ${rows}
+      </if>
+      <if test="offset == null">
+        limit ${rows}
+      </if>
+    </if>
+  </select>
+  <select id="selectByExampleSelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <if test="example != null and example.distinct">
+      distinct
+    </if>
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from bookshelf_recommand
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+    <if test="example != null and example.orderByClause != null">
+      order by ${example.orderByClause}
+    </if>
+    <if test="example != null and example.rows != null">
+      <if test="example.offset != null">
+        limit ${example.offset}, ${example.rows}
+      </if>
+      <if test="example.offset == null">
+        limit ${example.rows}
+      </if>
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select 
+    <include refid="Base_Column_List" />
+    from bookshelf_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectByPrimaryKeySelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from bookshelf_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    delete from bookshelf_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.book.server.dao.entity.example.BookshelfRecommandExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    delete from bookshelf_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.book.server.dao.entity.BookshelfRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into bookshelf_recommand (id, book_id, book_name, 
+      sex, status, createtime, 
+      updatetime)
+    values (#{id,jdbcType=INTEGER}, #{bookId,jdbcType=BIGINT}, #{bookName,jdbcType=VARCHAR}, 
+      #{sex,jdbcType=CHAR}, #{status,jdbcType=CHAR}, #{createtime,jdbcType=INTEGER}, 
+      #{updatetime,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into bookshelf_recommand
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          ${column.escapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            id,
+          </if>
+          <if test="record.bookId != null">
+            book_id,
+          </if>
+          <if test="record.bookName != null">
+            book_name,
+          </if>
+          <if test="record.sex != null">
+            sex,
+          </if>
+          <if test="record.status != null">
+            status,
+          </if>
+          <if test="record.createtime != null">
+            createtime,
+          </if>
+          <if test="record.updatetime != null">
+            updatetime,
+          </if>
+        </trim>
+        <trim prefix="(" suffix=")" suffixOverrides="," />
+      </otherwise>
+    </choose>
+    values
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+  </insert>
+  <select id="countByExample" parameterType="com.book.server.dao.entity.example.BookshelfRecommandExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select count(*) from bookshelf_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update bookshelf_recommand
+    SET
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.id != null">
+            id = #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update bookshelf_recommand
+    set id = #{record.id,jdbcType=INTEGER},
+      book_id = #{record.bookId,jdbcType=BIGINT},
+      book_name = #{record.bookName,jdbcType=VARCHAR},
+      sex = #{record.sex,jdbcType=CHAR},
+      status = #{record.status,jdbcType=CHAR},
+      createtime = #{record.createtime,jdbcType=INTEGER},
+      updatetime = #{record.updatetime,jdbcType=INTEGER}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update bookshelf_recommand
+    SET
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    where id = #{record.id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.book.server.dao.entity.BookshelfRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update bookshelf_recommand
+    set book_id = #{bookId,jdbcType=BIGINT},
+      book_name = #{bookName,jdbcType=VARCHAR},
+      sex = #{sex,jdbcType=CHAR},
+      status = #{status,jdbcType=CHAR},
+      createtime = #{createtime,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <select id="selectOneByExample" parameterType="com.book.server.dao.entity.example.BookshelfRecommandExample" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <include refid="Base_Column_List" />
+    from bookshelf_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    limit 1
+  </select>
+  <select id="selectOneByExampleSelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from bookshelf_recommand
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+    <if test="example != null and example.orderByClause != null">
+      order by ${example.orderByClause}
+    </if>
+    limit 1
+  </select>
+  <insert id="batchInsert" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into bookshelf_recommand
+    (id, book_id, book_name, sex, status, createtime, updatetime)
+    values
+    <foreach collection="list" item="item" separator=",">
+      (#{item.id,jdbcType=INTEGER}, #{item.bookId,jdbcType=BIGINT}, #{item.bookName,jdbcType=VARCHAR}, 
+        #{item.sex,jdbcType=CHAR}, #{item.status,jdbcType=CHAR}, #{item.createtime,jdbcType=INTEGER}, 
+        #{item.updatetime,jdbcType=INTEGER})
+    </foreach>
+  </insert>
+  <insert id="batchInsertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into bookshelf_recommand (
+    <foreach collection="selective" item="column" separator=",">
+      ${column.escapedColumnName}
+    </foreach>
+    )
+    values
+    <foreach collection="list" item="item" separator=",">
+      (
+      <foreach collection="selective" item="column" separator=",">
+        <if test="'id'.toString() == column.value">
+          #{item.id,jdbcType=INTEGER}
+        </if>
+        <if test="'book_id'.toString() == column.value">
+          #{item.bookId,jdbcType=BIGINT}
+        </if>
+        <if test="'book_name'.toString() == column.value">
+          #{item.bookName,jdbcType=VARCHAR}
+        </if>
+        <if test="'sex'.toString() == column.value">
+          #{item.sex,jdbcType=CHAR}
+        </if>
+        <if test="'status'.toString() == column.value">
+          #{item.status,jdbcType=CHAR}
+        </if>
+        <if test="'createtime'.toString() == column.value">
+          #{item.createtime,jdbcType=INTEGER}
+        </if>
+        <if test="'updatetime'.toString() == column.value">
+          #{item.updatetime,jdbcType=INTEGER}
+        </if>
+      </foreach>
+      )
+    </foreach>
+  </insert>
+  <insert id="upsertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into bookshelf_recommand
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          ${column.escapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            id,
+          </if>
+          <if test="record.bookId != null">
+            book_id,
+          </if>
+          <if test="record.bookName != null">
+            book_name,
+          </if>
+          <if test="record.sex != null">
+            sex,
+          </if>
+          <if test="record.status != null">
+            status,
+          </if>
+          <if test="record.createtime != null">
+            createtime,
+          </if>
+          <if test="record.updatetime != null">
+            updatetime,
+          </if>
+        </trim>
+        <trim prefix="(" suffix=")" suffixOverrides="," />
+      </otherwise>
+    </choose>
+    values
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    on duplicate key update 
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.id != null">
+            id = #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+  </insert>
+  <insert id="upsert" parameterType="com.book.server.dao.entity.BookshelfRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into bookshelf_recommand
+    (id, book_id, book_name, sex, status, createtime, updatetime)
+    values
+    (#{id,jdbcType=INTEGER}, #{bookId,jdbcType=BIGINT}, #{bookName,jdbcType=VARCHAR}, 
+      #{sex,jdbcType=CHAR}, #{status,jdbcType=CHAR}, #{createtime,jdbcType=INTEGER}, 
+      #{updatetime,jdbcType=INTEGER})
+    on duplicate key update 
+    id = #{id,jdbcType=INTEGER}, 
+    book_id = #{bookId,jdbcType=BIGINT}, 
+    book_name = #{bookName,jdbcType=VARCHAR}, 
+    sex = #{sex,jdbcType=CHAR}, 
+    status = #{status,jdbcType=CHAR}, 
+    createtime = #{createtime,jdbcType=INTEGER}, 
+    updatetime = #{updatetime,jdbcType=INTEGER}
+  </insert>
+</mapper>

+ 648 - 0
book-server/src/main/resources/mapper/ReturnRecommandMapper.xml

@@ -0,0 +1,648 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.book.server.dao.mapper.ReturnRecommandMapper">
+  <resultMap id="BaseResultMap" type="com.book.server.dao.entity.ReturnRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="book_id" jdbcType="BIGINT" property="bookId" />
+    <result column="book_name" jdbcType="VARCHAR" property="bookName" />
+    <result column="sex" jdbcType="CHAR" property="sex" />
+    <result column="status" jdbcType="CHAR" property="status" />
+    <result column="createtime" jdbcType="INTEGER" property="createtime" />
+    <result column="updatetime" jdbcType="INTEGER" property="updatetime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    id, book_id, book_name, sex, status, createtime, updatetime
+  </sql>
+  <select id="selectByExample" parameterType="com.book.server.dao.entity.example.ReturnRecommandExample" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from return_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="rows != null">
+      <if test="offset != null">
+        limit ${offset}, ${rows}
+      </if>
+      <if test="offset == null">
+        limit ${rows}
+      </if>
+    </if>
+  </select>
+  <select id="selectByExampleSelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <if test="example != null and example.distinct">
+      distinct
+    </if>
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from return_recommand
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+    <if test="example != null and example.orderByClause != null">
+      order by ${example.orderByClause}
+    </if>
+    <if test="example != null and example.rows != null">
+      <if test="example.offset != null">
+        limit ${example.offset}, ${example.rows}
+      </if>
+      <if test="example.offset == null">
+        limit ${example.rows}
+      </if>
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select 
+    <include refid="Base_Column_List" />
+    from return_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectByPrimaryKeySelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from return_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    delete from return_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.book.server.dao.entity.example.ReturnRecommandExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    delete from return_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.book.server.dao.entity.ReturnRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into return_recommand (id, book_id, book_name, 
+      sex, status, createtime, 
+      updatetime)
+    values (#{id,jdbcType=INTEGER}, #{bookId,jdbcType=BIGINT}, #{bookName,jdbcType=VARCHAR}, 
+      #{sex,jdbcType=CHAR}, #{status,jdbcType=CHAR}, #{createtime,jdbcType=INTEGER}, 
+      #{updatetime,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into return_recommand
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          ${column.escapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            id,
+          </if>
+          <if test="record.bookId != null">
+            book_id,
+          </if>
+          <if test="record.bookName != null">
+            book_name,
+          </if>
+          <if test="record.sex != null">
+            sex,
+          </if>
+          <if test="record.status != null">
+            status,
+          </if>
+          <if test="record.createtime != null">
+            createtime,
+          </if>
+          <if test="record.updatetime != null">
+            updatetime,
+          </if>
+        </trim>
+        <trim prefix="(" suffix=")" suffixOverrides="," />
+      </otherwise>
+    </choose>
+    values
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+  </insert>
+  <select id="countByExample" parameterType="com.book.server.dao.entity.example.ReturnRecommandExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select count(*) from return_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update return_recommand
+    SET
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.id != null">
+            id = #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update return_recommand
+    set id = #{record.id,jdbcType=INTEGER},
+      book_id = #{record.bookId,jdbcType=BIGINT},
+      book_name = #{record.bookName,jdbcType=VARCHAR},
+      sex = #{record.sex,jdbcType=CHAR},
+      status = #{record.status,jdbcType=CHAR},
+      createtime = #{record.createtime,jdbcType=INTEGER},
+      updatetime = #{record.updatetime,jdbcType=INTEGER}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update return_recommand
+    SET
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    where id = #{record.id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.book.server.dao.entity.ReturnRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update return_recommand
+    set book_id = #{bookId,jdbcType=BIGINT},
+      book_name = #{bookName,jdbcType=VARCHAR},
+      sex = #{sex,jdbcType=CHAR},
+      status = #{status,jdbcType=CHAR},
+      createtime = #{createtime,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <select id="selectOneByExample" parameterType="com.book.server.dao.entity.example.ReturnRecommandExample" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <include refid="Base_Column_List" />
+    from return_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    limit 1
+  </select>
+  <select id="selectOneByExampleSelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from return_recommand
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+    <if test="example != null and example.orderByClause != null">
+      order by ${example.orderByClause}
+    </if>
+    limit 1
+  </select>
+  <insert id="batchInsert" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into return_recommand
+    (id, book_id, book_name, sex, status, createtime, updatetime)
+    values
+    <foreach collection="list" item="item" separator=",">
+      (#{item.id,jdbcType=INTEGER}, #{item.bookId,jdbcType=BIGINT}, #{item.bookName,jdbcType=VARCHAR}, 
+        #{item.sex,jdbcType=CHAR}, #{item.status,jdbcType=CHAR}, #{item.createtime,jdbcType=INTEGER}, 
+        #{item.updatetime,jdbcType=INTEGER})
+    </foreach>
+  </insert>
+  <insert id="batchInsertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into return_recommand (
+    <foreach collection="selective" item="column" separator=",">
+      ${column.escapedColumnName}
+    </foreach>
+    )
+    values
+    <foreach collection="list" item="item" separator=",">
+      (
+      <foreach collection="selective" item="column" separator=",">
+        <if test="'id'.toString() == column.value">
+          #{item.id,jdbcType=INTEGER}
+        </if>
+        <if test="'book_id'.toString() == column.value">
+          #{item.bookId,jdbcType=BIGINT}
+        </if>
+        <if test="'book_name'.toString() == column.value">
+          #{item.bookName,jdbcType=VARCHAR}
+        </if>
+        <if test="'sex'.toString() == column.value">
+          #{item.sex,jdbcType=CHAR}
+        </if>
+        <if test="'status'.toString() == column.value">
+          #{item.status,jdbcType=CHAR}
+        </if>
+        <if test="'createtime'.toString() == column.value">
+          #{item.createtime,jdbcType=INTEGER}
+        </if>
+        <if test="'updatetime'.toString() == column.value">
+          #{item.updatetime,jdbcType=INTEGER}
+        </if>
+      </foreach>
+      )
+    </foreach>
+  </insert>
+  <insert id="upsertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into return_recommand
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          ${column.escapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            id,
+          </if>
+          <if test="record.bookId != null">
+            book_id,
+          </if>
+          <if test="record.bookName != null">
+            book_name,
+          </if>
+          <if test="record.sex != null">
+            sex,
+          </if>
+          <if test="record.status != null">
+            status,
+          </if>
+          <if test="record.createtime != null">
+            createtime,
+          </if>
+          <if test="record.updatetime != null">
+            updatetime,
+          </if>
+        </trim>
+        <trim prefix="(" suffix=")" suffixOverrides="," />
+      </otherwise>
+    </choose>
+    values
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    on duplicate key update 
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.id != null">
+            id = #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+  </insert>
+  <insert id="upsert" parameterType="com.book.server.dao.entity.ReturnRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into return_recommand
+    (id, book_id, book_name, sex, status, createtime, updatetime)
+    values
+    (#{id,jdbcType=INTEGER}, #{bookId,jdbcType=BIGINT}, #{bookName,jdbcType=VARCHAR}, 
+      #{sex,jdbcType=CHAR}, #{status,jdbcType=CHAR}, #{createtime,jdbcType=INTEGER}, 
+      #{updatetime,jdbcType=INTEGER})
+    on duplicate key update 
+    id = #{id,jdbcType=INTEGER}, 
+    book_id = #{bookId,jdbcType=BIGINT}, 
+    book_name = #{bookName,jdbcType=VARCHAR}, 
+    sex = #{sex,jdbcType=CHAR}, 
+    status = #{status,jdbcType=CHAR}, 
+    createtime = #{createtime,jdbcType=INTEGER}, 
+    updatetime = #{updatetime,jdbcType=INTEGER}
+  </insert>
+</mapper>

+ 767 - 0
book-server/src/main/resources/mapper/SmartRecommandMapper.xml

@@ -0,0 +1,767 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.book.server.dao.mapper.SmartRecommandMapper">
+  <resultMap id="BaseResultMap" type="com.book.server.dao.entity.SmartRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="book_id" jdbcType="BIGINT" property="bookId" />
+    <result column="book_name" jdbcType="VARCHAR" property="bookName" />
+    <result column="title" jdbcType="VARCHAR" property="title" />
+    <result column="description" jdbcType="VARCHAR" property="description" />
+    <result column="image" jdbcType="VARCHAR" property="image" />
+    <result column="sex" jdbcType="CHAR" property="sex" />
+    <result column="status" jdbcType="CHAR" property="status" />
+    <result column="location" jdbcType="CHAR" property="location" />
+    <result column="createtime" jdbcType="INTEGER" property="createtime" />
+    <result column="updatetime" jdbcType="INTEGER" property="updatetime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    id, book_id, book_name, title, description, image, sex, status, location, createtime, 
+    updatetime
+  </sql>
+  <select id="selectByExample" parameterType="com.book.server.dao.entity.example.SmartRecommandExample" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from smart_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="rows != null">
+      <if test="offset != null">
+        limit ${offset}, ${rows}
+      </if>
+      <if test="offset == null">
+        limit ${rows}
+      </if>
+    </if>
+  </select>
+  <select id="selectByExampleSelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <if test="example != null and example.distinct">
+      distinct
+    </if>
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from smart_recommand
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+    <if test="example != null and example.orderByClause != null">
+      order by ${example.orderByClause}
+    </if>
+    <if test="example != null and example.rows != null">
+      <if test="example.offset != null">
+        limit ${example.offset}, ${example.rows}
+      </if>
+      <if test="example.offset == null">
+        limit ${example.rows}
+      </if>
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select 
+    <include refid="Base_Column_List" />
+    from smart_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectByPrimaryKeySelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from smart_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    delete from smart_recommand
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.book.server.dao.entity.example.SmartRecommandExample">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    delete from smart_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.book.server.dao.entity.SmartRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into smart_recommand (id, book_id, book_name, 
+      title, description, image, 
+      sex, status, location, createtime, 
+      updatetime)
+    values (#{id,jdbcType=INTEGER}, #{bookId,jdbcType=BIGINT}, #{bookName,jdbcType=VARCHAR}, 
+      #{title,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{image,jdbcType=VARCHAR}, 
+      #{sex,jdbcType=CHAR}, #{status,jdbcType=CHAR}, #{location,jdbcType=CHAR}, #{createtime,jdbcType=INTEGER}, 
+      #{updatetime,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into smart_recommand
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          ${column.escapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            id,
+          </if>
+          <if test="record.bookId != null">
+            book_id,
+          </if>
+          <if test="record.bookName != null">
+            book_name,
+          </if>
+          <if test="record.title != null">
+            title,
+          </if>
+          <if test="record.description != null">
+            description,
+          </if>
+          <if test="record.image != null">
+            image,
+          </if>
+          <if test="record.sex != null">
+            sex,
+          </if>
+          <if test="record.status != null">
+            status,
+          </if>
+          <if test="record.location != null">
+            location,
+          </if>
+          <if test="record.createtime != null">
+            createtime,
+          </if>
+          <if test="record.updatetime != null">
+            updatetime,
+          </if>
+        </trim>
+        <trim prefix="(" suffix=")" suffixOverrides="," />
+      </otherwise>
+    </choose>
+    values
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.title != null">
+            #{record.title,jdbcType=VARCHAR},
+          </if>
+          <if test="record.description != null">
+            #{record.description,jdbcType=VARCHAR},
+          </if>
+          <if test="record.image != null">
+            #{record.image,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.location != null">
+            #{record.location,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+  </insert>
+  <select id="countByExample" parameterType="com.book.server.dao.entity.example.SmartRecommandExample" resultType="java.lang.Long">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select count(*) from smart_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update smart_recommand
+    SET
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.id != null">
+            id = #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.title != null">
+            title = #{record.title,jdbcType=VARCHAR},
+          </if>
+          <if test="record.description != null">
+            description = #{record.description,jdbcType=VARCHAR},
+          </if>
+          <if test="record.image != null">
+            image = #{record.image,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.location != null">
+            location = #{record.location,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update smart_recommand
+    set id = #{record.id,jdbcType=INTEGER},
+      book_id = #{record.bookId,jdbcType=BIGINT},
+      book_name = #{record.bookName,jdbcType=VARCHAR},
+      title = #{record.title,jdbcType=VARCHAR},
+      description = #{record.description,jdbcType=VARCHAR},
+      image = #{record.image,jdbcType=VARCHAR},
+      sex = #{record.sex,jdbcType=CHAR},
+      status = #{record.status,jdbcType=CHAR},
+      location = #{record.location,jdbcType=CHAR},
+      createtime = #{record.createtime,jdbcType=INTEGER},
+      updatetime = #{record.updatetime,jdbcType=INTEGER}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update smart_recommand
+    SET
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.title != null">
+            title = #{record.title,jdbcType=VARCHAR},
+          </if>
+          <if test="record.description != null">
+            description = #{record.description,jdbcType=VARCHAR},
+          </if>
+          <if test="record.image != null">
+            image = #{record.image,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.location != null">
+            location = #{record.location,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    where id = #{record.id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.book.server.dao.entity.SmartRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    update smart_recommand
+    set book_id = #{bookId,jdbcType=BIGINT},
+      book_name = #{bookName,jdbcType=VARCHAR},
+      title = #{title,jdbcType=VARCHAR},
+      description = #{description,jdbcType=VARCHAR},
+      image = #{image,jdbcType=VARCHAR},
+      sex = #{sex,jdbcType=CHAR},
+      status = #{status,jdbcType=CHAR},
+      location = #{location,jdbcType=CHAR},
+      createtime = #{createtime,jdbcType=INTEGER},
+      updatetime = #{updatetime,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <select id="selectOneByExample" parameterType="com.book.server.dao.entity.example.SmartRecommandExample" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <include refid="Base_Column_List" />
+    from smart_recommand
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    limit 1
+  </select>
+  <select id="selectOneByExampleSelective" parameterType="map" resultMap="BaseResultMap">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    select
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.aliasedEscapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <include refid="Base_Column_List" />
+      </otherwise>
+    </choose>
+    from smart_recommand
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+    <if test="example != null and example.orderByClause != null">
+      order by ${example.orderByClause}
+    </if>
+    limit 1
+  </select>
+  <insert id="batchInsert" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into smart_recommand
+    (id, book_id, book_name, title, description, image, sex, status, location, createtime, 
+      updatetime)
+    values
+    <foreach collection="list" item="item" separator=",">
+      (#{item.id,jdbcType=INTEGER}, #{item.bookId,jdbcType=BIGINT}, #{item.bookName,jdbcType=VARCHAR}, 
+        #{item.title,jdbcType=VARCHAR}, #{item.description,jdbcType=VARCHAR}, #{item.image,jdbcType=VARCHAR}, 
+        #{item.sex,jdbcType=CHAR}, #{item.status,jdbcType=CHAR}, #{item.location,jdbcType=CHAR}, 
+        #{item.createtime,jdbcType=INTEGER}, #{item.updatetime,jdbcType=INTEGER})
+    </foreach>
+  </insert>
+  <insert id="batchInsertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into smart_recommand (
+    <foreach collection="selective" item="column" separator=",">
+      ${column.escapedColumnName}
+    </foreach>
+    )
+    values
+    <foreach collection="list" item="item" separator=",">
+      (
+      <foreach collection="selective" item="column" separator=",">
+        <if test="'id'.toString() == column.value">
+          #{item.id,jdbcType=INTEGER}
+        </if>
+        <if test="'book_id'.toString() == column.value">
+          #{item.bookId,jdbcType=BIGINT}
+        </if>
+        <if test="'book_name'.toString() == column.value">
+          #{item.bookName,jdbcType=VARCHAR}
+        </if>
+        <if test="'title'.toString() == column.value">
+          #{item.title,jdbcType=VARCHAR}
+        </if>
+        <if test="'description'.toString() == column.value">
+          #{item.description,jdbcType=VARCHAR}
+        </if>
+        <if test="'image'.toString() == column.value">
+          #{item.image,jdbcType=VARCHAR}
+        </if>
+        <if test="'sex'.toString() == column.value">
+          #{item.sex,jdbcType=CHAR}
+        </if>
+        <if test="'status'.toString() == column.value">
+          #{item.status,jdbcType=CHAR}
+        </if>
+        <if test="'location'.toString() == column.value">
+          #{item.location,jdbcType=CHAR}
+        </if>
+        <if test="'createtime'.toString() == column.value">
+          #{item.createtime,jdbcType=INTEGER}
+        </if>
+        <if test="'updatetime'.toString() == column.value">
+          #{item.updatetime,jdbcType=INTEGER}
+        </if>
+      </foreach>
+      )
+    </foreach>
+  </insert>
+  <insert id="upsertSelective" parameterType="map">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into smart_recommand
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          ${column.escapedColumnName}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            id,
+          </if>
+          <if test="record.bookId != null">
+            book_id,
+          </if>
+          <if test="record.bookName != null">
+            book_name,
+          </if>
+          <if test="record.title != null">
+            title,
+          </if>
+          <if test="record.description != null">
+            description,
+          </if>
+          <if test="record.image != null">
+            image,
+          </if>
+          <if test="record.sex != null">
+            sex,
+          </if>
+          <if test="record.status != null">
+            status,
+          </if>
+          <if test="record.location != null">
+            location,
+          </if>
+          <if test="record.createtime != null">
+            createtime,
+          </if>
+          <if test="record.updatetime != null">
+            updatetime,
+          </if>
+        </trim>
+        <trim prefix="(" suffix=")" suffixOverrides="," />
+      </otherwise>
+    </choose>
+    values
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach close=")" collection="selective" item="column" open="(" separator=",">
+          #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          <if test="record.id != null">
+            #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.title != null">
+            #{record.title,jdbcType=VARCHAR},
+          </if>
+          <if test="record.description != null">
+            #{record.description,jdbcType=VARCHAR},
+          </if>
+          <if test="record.image != null">
+            #{record.image,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.location != null">
+            #{record.location,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+    on duplicate key update 
+    <choose>
+      <when test="selective != null and selective.length > 0">
+        <foreach collection="selective" item="column" separator=",">
+          ${column.escapedColumnName} = #{record.${column.javaProperty},jdbcType=${column.jdbcType}}
+        </foreach>
+      </when>
+      <otherwise>
+        <trim suffixOverrides=",">
+          <if test="record.id != null">
+            id = #{record.id,jdbcType=INTEGER},
+          </if>
+          <if test="record.bookId != null">
+            book_id = #{record.bookId,jdbcType=BIGINT},
+          </if>
+          <if test="record.bookName != null">
+            book_name = #{record.bookName,jdbcType=VARCHAR},
+          </if>
+          <if test="record.title != null">
+            title = #{record.title,jdbcType=VARCHAR},
+          </if>
+          <if test="record.description != null">
+            description = #{record.description,jdbcType=VARCHAR},
+          </if>
+          <if test="record.image != null">
+            image = #{record.image,jdbcType=VARCHAR},
+          </if>
+          <if test="record.sex != null">
+            sex = #{record.sex,jdbcType=CHAR},
+          </if>
+          <if test="record.status != null">
+            status = #{record.status,jdbcType=CHAR},
+          </if>
+          <if test="record.location != null">
+            location = #{record.location,jdbcType=CHAR},
+          </if>
+          <if test="record.createtime != null">
+            createtime = #{record.createtime,jdbcType=INTEGER},
+          </if>
+          <if test="record.updatetime != null">
+            updatetime = #{record.updatetime,jdbcType=INTEGER},
+          </if>
+        </trim>
+      </otherwise>
+    </choose>
+  </insert>
+  <insert id="upsert" parameterType="com.book.server.dao.entity.SmartRecommand">
+    <!--
+      WARNING - @mbg.generated
+      This element is automatically generated by MyBatis Generator, do not modify.
+      This element was generated on Fri Aug 20 19:52:17 CST 2021.
+    -->
+    insert into smart_recommand
+    (id, book_id, book_name, title, description, image, sex, status, location, createtime, 
+      updatetime)
+    values
+    (#{id,jdbcType=INTEGER}, #{bookId,jdbcType=BIGINT}, #{bookName,jdbcType=VARCHAR}, 
+      #{title,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{image,jdbcType=VARCHAR}, 
+      #{sex,jdbcType=CHAR}, #{status,jdbcType=CHAR}, #{location,jdbcType=CHAR}, #{createtime,jdbcType=INTEGER}, 
+      #{updatetime,jdbcType=INTEGER})
+    on duplicate key update 
+    id = #{id,jdbcType=INTEGER}, 
+    book_id = #{bookId,jdbcType=BIGINT}, 
+    book_name = #{bookName,jdbcType=VARCHAR}, 
+    title = #{title,jdbcType=VARCHAR}, 
+    description = #{description,jdbcType=VARCHAR}, 
+    image = #{image,jdbcType=VARCHAR}, 
+    sex = #{sex,jdbcType=CHAR}, 
+    status = #{status,jdbcType=CHAR}, 
+    location = #{location,jdbcType=CHAR}, 
+    createtime = #{createtime,jdbcType=INTEGER}, 
+    updatetime = #{updatetime,jdbcType=INTEGER}
+  </insert>
+</mapper>

+ 8 - 4
book-server/src/main/resources/mybatis-generator.xml

@@ -103,9 +103,9 @@
         <!--数据库连接配置 need to change-->
         <jdbcConnection
                 driverClass="com.mysql.cj.jdbc.Driver"
-                connectionURL="jdbc:mysql://47.240.19.58:3306/test_cps?nullCatalogMeansCurrent=true&amp;serverTimezone=UTC"
-                userId="test_cps"
-                password="xKysDECnJLXkMYdJ"/>
+                connectionURL="jdbc:mysql://121.41.100.198:3306/test_cps?nullCatalogMeansCurrent=true&amp;serverTimezone=UTC"
+                userId="root"
+                password="root"/>
 
         <!--指定自动生成的 POJO置于哪个包下 need to change -->
         <javaModelGenerator targetPackage="com.book.server.dao.entity"
@@ -124,7 +124,11 @@
 <!--        <table tableName="manage_block_resource"></table>-->
 <!--        <table tableName="book_category"></table>-->
 <!--        <table tableName="user"></table>-->
-        <table tableName="search_keyword"></table>
+<!--        <table tableName="search_keyword"></table>-->
+<!--        <table tableName="return_recommand"></table>-->
+<!--        <table tableName="bookshelf_recommand"></table>-->
+<!--        <table tableName="smart_recommand"></table>-->
+        <table tableName=""></table>
 
     </context>