{"id":273,"date":"2026-05-22T15:04:53","date_gmt":"2026-05-22T07:04:53","guid":{"rendered":"https:\/\/larkdrop.cafe\/?p=273"},"modified":"2026-05-22T16:50:20","modified_gmt":"2026-05-22T08:50:20","slug":"mybatis-plus","status":"publish","type":"post","link":"https:\/\/larkdrop.cafe\/index.php\/2026\/05\/22\/mybatis-plus\/","title":{"rendered":"MyBatis-Plus"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">MyBatis-Plus\uff08\u7b80\u79f0 MP\uff09\u662f\u4e00\u4e2a MyBatis\u7684\u589e\u5f3a\u5de5\u5177(\u5355\u8868\u7684\u8bbf\u95ee)\uff0c\u5728 MyBatis \u7684\u57fa\u7840\u4e0a\u53ea\u505a\u589e\u5f3a\u4e0d\u505a\u6539\u53d8\uff0c\u4e3a\u7b80\u5316\u5f00\u53d1\u3001\u63d0\u9ad8\u6548\u7387\u800c\u751f\uff08<a href=\"http:\/\/mp.baomidou.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">\u5b98\u65b9\u7f51\u5740<\/a>)\uff0c\u5b83\u5177\u6709\u5982\u4e0b\u7279\u6027\uff1a<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u613f\u666f<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6211\u4eec\u7684\u613f\u666f\u662f\u6210\u4e3a MyBatis \u6700\u597d\u7684\u642d\u6863\uff0c\u5c31\u50cf\u9b42\u6597\u7f57\u4e2d\u7684 1P\u30012P\uff0c\u57fa\u53cb\u642d\u914d\uff0c\u6548\u7387\u7ffb\u500d\u3002<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/relationship-with-mybatis.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/relationship-with-mybatis.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u65e0\u4fb5\u5165<\/strong>\uff1a\u53ea\u505a\u589e\u5f3a\u4e0d\u505a\u6539\u53d8\uff0c\u5f15\u5165\u5b83\u4e0d\u4f1a\u5bf9\u73b0\u6709\u5de5\u7a0b\u4ea7\u751f\u5f71\u54cd\uff0c\u5982\u4e1d\u822c\u987a\u6ed1<\/li>\n\n\n\n<li><strong>\u635f\u8017\u5c0f<\/strong>\uff1a\u542f\u52a8\u5373\u4f1a\u81ea\u52a8\u6ce8\u5165\u57fa\u672c CURD\uff0c\u6027\u80fd\u57fa\u672c\u65e0\u635f\u8017\uff0c\u76f4\u63a5\u9762\u5411\u5bf9\u8c61\u64cd\u4f5c<\/li>\n\n\n\n<li><strong>\u5f3a\u5927\u7684<\/strong>\u00a0<strong>CRUD<\/strong>\u00a0<strong>\u64cd\u4f5c<\/strong>\uff1a\u5185\u7f6e\u901a\u7528 Mapper\u3001\u901a\u7528 Service\uff0c\u4ec5\u4ec5\u901a\u8fc7\u5c11\u91cf\u914d\u7f6e\u5373\u53ef\u5b9e\u73b0\u5355\u8868\u5927\u90e8\u5206\uff0cCRUD \u64cd\u4f5c\uff0c\u66f4\u6709\u5f3a\u5927\u7684\u6761\u4ef6\u6784\u9020\u5668\uff0c\u6ee1\u8db3\u5404\u7c7b\u4f7f\u7528\u9700\u6c42<\/li>\n\n\n\n<li><strong>\u652f\u6301<\/strong>\u00a0<strong>Lambda<\/strong>\u00a0<strong>\u5f62\u5f0f\u8c03\u7528<\/strong>\uff1a\u901a\u8fc7 Lambda \u8868\u8fbe\u5f0f\uff0c\u65b9\u4fbf\u7684\u7f16\u5199\u5404\u7c7b\u67e5\u8be2\u6761\u4ef6\uff0c\u65e0\u9700\u518d\u62c5\u5fc3\u5b57\u6bb5\u5199\u9519<\/li>\n\n\n\n<li><strong>\u652f\u6301\u4e3b\u952e\u81ea\u52a8\u751f\u6210<\/strong>\uff1a\u652f\u6301\u591a\u8fbe 4 \u79cd\u4e3b\u952e\u7b56\u7565\uff08\u5185\u542b\u5206\u5e03\u5f0f\u552f\u4e00 ID \u751f\u6210\u5668 &#8211; Sequence\uff09\uff0c\u53ef\u81ea\u7531\u914d\u7f6e\uff0c\u5b8c\u7f8e\u89e3\u51b3\u4e3b\u952e\u95ee\u9898<\/li>\n\n\n\n<li><strong>\u5185\u7f6e\u5206\u9875\u63d2\u4ef6<\/strong>\uff1a\u57fa\u4e8e MyBatis \u7269\u7406\u5206\u9875\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u5173\u5fc3\u5177\u4f53\u64cd\u4f5c\uff0c\u914d\u7f6e\u597d\u63d2\u4ef6\u4e4b\u540e\uff0c\u5199\u5206\u9875\u7b49\u540c\u4e8e\u666e\u901a List \u67e5\u8be2<\/li>\n\n\n\n<li><strong>\u5206\u9875\u63d2\u4ef6\u652f\u6301\u591a\u79cd\u6570\u636e\u5e93<\/strong>\uff1a\u652f\u6301 MySQL\u3001MariaDB\u3001Oracle\u3001DB2\u3001H2\u3001HSQL\u3001SQLite\u3001Postgre\u3001SQLServer \u7b49\u591a\u79cd\u6570\u636e\u5e93<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u73af\u5883\u51c6\u5907<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u8981\u662f\u7528MyBatis-Plus\u6211\u4eec\u5f97\u51c6\u5907\u597d\u6570\u636e\u5e93\u4e2d\u7684\u8868\u6570\u636e\uff0c\u6240\u9700\u7684\u4f9d\u8d56\uff0c\u4ee5\u53ca\u90e8\u5206\u76f8\u5173\u4ee3\u7801\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6570\u636e\u51c6\u5907<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e00\u5f20\u7b80\u5355\u7684\u5355\u8868User\u8868\u4e3a\u4f8b\uff0c\u5176\u7ed3\u6784\u5982\u4e0b<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">id<\/th><th class=\"has-text-align-left\" data-align=\"left\">name<\/th><th class=\"has-text-align-left\" data-align=\"left\">age<\/th><th class=\"has-text-align-left\" data-align=\"left\">email<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">1<\/td><td class=\"has-text-align-left\" data-align=\"left\">Jone<\/td><td class=\"has-text-align-left\" data-align=\"left\">18<\/td><td class=\"has-text-align-left\" data-align=\"left\">test1@baomidou.com<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">2<\/td><td class=\"has-text-align-left\" data-align=\"left\">Jack<\/td><td class=\"has-text-align-left\" data-align=\"left\">20<\/td><td class=\"has-text-align-left\" data-align=\"left\">test2@baomidou.com<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">3<\/td><td class=\"has-text-align-left\" data-align=\"left\">Tom<\/td><td class=\"has-text-align-left\" data-align=\"left\">28<\/td><td class=\"has-text-align-left\" data-align=\"left\">test3@baomidou.com<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">4<\/td><td class=\"has-text-align-left\" data-align=\"left\">Sandy<\/td><td class=\"has-text-align-left\" data-align=\"left\">21<\/td><td class=\"has-text-align-left\" data-align=\"left\">test4@baomidou.com<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">5<\/td><td class=\"has-text-align-left\" data-align=\"left\">Billie<\/td><td class=\"has-text-align-left\" data-align=\"left\">24<\/td><td class=\"has-text-align-left\" data-align=\"left\">test5@baomidou.com<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bf9\u5e94\u5efa\u8868\u8bed\u53e5\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DROP TABLE IF EXISTS user;\n\nCREATE TABLE user\n(\n    id BIGINT(20) NOT NULL COMMENT '\u4e3b\u952eID',\n    name VARCHAR(30) NULL DEFAULT NULL COMMENT '\u59d3\u540d',\n    age INT(11) NULL DEFAULT NULL COMMENT '\u5e74\u9f84',\n    email VARCHAR(50) NULL DEFAULT NULL COMMENT '\u90ae\u7bb1',\n    PRIMARY KEY (id)\n);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bf9\u5e94\u6570\u636e\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DELETE FROM user;\n\nINSERT INTO user (id, name, age, email) VALUES\n(1, 'Jone', 18, 'test1@baomidou.com'),\n(2, 'Jack', 20, 'test2@baomidou.com'),\n(3, 'Tom', 28, 'test3@baomidou.com'),\n(4, 'Sandy', 21, 'test4@baomidou.com'),\n(5, 'Billie', 24, 'test5@baomidou.com');<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5de5\u7a0b\u4f9d\u8d56\u51c6\u5907<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u521b\u5efa\u4e00\u4e2aSpringBoot\u5de5\u7a0b(\u53ef\u4ee5\u4f7f\u7528Spring Initializer)\uff0c\u5f15\u5165\u5982\u4e0b\u4f9d\u8d56<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n  &lt;groupId&gt;com.mysql&lt;\/groupId&gt;\n  &lt;artifactId&gt;mysql-connector-j&lt;\/artifactId&gt;\n  &lt;scope&gt;runtime&lt;\/scope&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;com.baomidou&lt;\/groupId&gt;\n  &lt;artifactId&gt;mybatis-plus-spring-boot3-starter&lt;\/artifactId&gt;\n  &lt;version&gt;3.5.11&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;com.baomidou&lt;\/groupId&gt;\n  &lt;artifactId&gt;mybatis-plus-jsqlparser&lt;\/artifactId&gt;\n  &lt;version&gt;3.5.11&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728application.yml\u4e2d\u6dfb\u52a0\u5982\u4e0b\u914d\u7f6e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>spring:\n  datasource:\n    url: jdbc:mysql:\/\/127.0.0.1:3306\/test?characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    username: root\n    password: 1234\n# \u5728\u65e5\u5fd7\u4e2d\u663e\u793a\u5b9e\u9645\u6267\u884c\u7684sql\u8bed\u53e5\nlogging:\n  level:\n    com.cskaoyan.mybatis.plus.mapper: debug<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u4ee3\u7801\u51c6\u5907<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u542f\u52a8\u7c7b\u4e0a\u52a0MapperScan\u6ce8\u89e3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@SpringBootApplication\n@MapperScan(\"com.cskaoyan.mybatisplus.mapper\")\npublic class Application {\n    public static void main(String&#91;] args) {\n        SpringApplication.run(Application.class, args);\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49user\u8868\u5bf9\u5e94\u7684\u6620\u5c04\u5b9e\u4f53\u7c7bUser<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data \/\/lombok\u6ce8\u89e3\npublic class User {\n    private Long id;\n    private String name;\n    private Integer age;\n    private String email;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49Mapper<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">BaseMapper\u662fMyBatis-Plus\u63d0\u4f9b\u7684\u6a21\u677fmapper\uff0c\u5176\u4e2d\u5305\u542b\u4e86\u57fa\u672c\u7684CRUD\u65b9\u6cd5\uff0c\u6cdb\u578b\u4e3a\u64cd\u4f5c\u7684\u5b9e\u4f53\u7c7b\u578b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public interface UserMapper extends BaseMapper&lt;User&gt; {\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49\u4e00\u4e2a\u7528\u4e8e\u6d4b\u8bd5\u7684\u6d4b\u8bd5\u7c7b\uff0c\u5176\u4e2d\u5305\u542b\u57fa\u672cCRUD\u7684\u4ee3\u7801<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@SpringBootTest\npublic class TestBasic {\n    @Autowired\n    private UserMapper userMapper;\n   \n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u65b0\u589e\u6570\u636e<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">java\u590d\u5236<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>   @Test\n    public void testInsert() {\n        User user = new User();\n        user.setName(\"zs\");\n        user.setEmail(\"abcd@xxx.com\");\n        user.setAge(100);\n\n        int effectiveRow = userMapper.insert(user);\n        \/\/ \u8f93\u51fa\u53d7\u5f71\u54cd\u7684\u884c\u6570\n        System.out.println(\"\u53d7\u5f71\u54cd\u884c\u6570\uff1a\" + effectiveRow);\n        \/\/ \u8f93\u51fa\u81ea\u52a8\u751f\u6210\u7684id\n        System.out.println(user.getId());\n    }<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6ce8\u610f\uff1a MyBatis-Plus\u5728\u5b9e\u73b0\u63d2\u5165\u6570\u636e\u65f6\uff0c\u4f1a\u9ed8\u8ba4\u57fa\u4e8e\u96ea\u82b1\u7b97\u6cd5\u7684\u7b56\u7565\u751f\u6210id<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5220\u9664\u6570\u636e<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6839\u636eid\u5220\u9664<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>    @Test\n    public void testDeleteById() {\n        int effectiveRow = userMapper.deleteById(1630492821798178818L);\n        System.out.println(\"\u53d7\u5f71\u54cd\u884c\u6570: \" + effectiveRow);\n    }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6839\u636eid\u6279\u91cf\u5220\u9664<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>    @Test\n    public void testDeleteBatchByIds() {\n        List&lt;Long&gt; ids = Arrays.asList(1L, 2L);\n        int effectiveRow = userMapper.deleteBatchIds(ids);\n        System.out.println(\"\u53d7\u5f71\u54cd\u884c\u6570: \" + effectiveRow);\n    }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6839\u636eMap\u6761\u4ef6\u5220\u9664<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">delete from user where a=1 and b= 2 and c=3<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6ce8\u610fMap\u4e2d\u653e\u7684\u662fwhere\u6761\u4ef6\u4e2d\u5305\u542b\u7684\u591a\u4e2a\u6761\u4ef6\u5b57\u6bb5\uff0c\u4ee5\u53ca\u6761\u4ef6\u5b57\u6bb5\u5bf9\u5e94\u7684\u503c(\u6bd4\u8f83\u7684\u5173\u7cfb\u662f\u76f8\u7b49\u5173\u7cfb)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testDeleteByMap(){\n    \/\/\u6839\u636emap\u96c6\u5408\u4e2d\u6240\u8bbe\u7f6e\u7684\u6761\u4ef6\u5220\u9664\u8bb0\u5f55\n    \/\/DELETE FROM user WHERE name = ? AND age = ?\n    Map&lt;String, Object&gt; param = new HashMap&lt;&gt;();\n    \/\/ age = 21\n    param.put(\"age\", 21);\n    \/\/ name=sandy\n    param.put(\"name\", \"Sandy\");\n    int effectiveRow = userMapper.deleteByMap(param);\n    System.out.println(\"\u53d7\u5f71\u54cd\u884c\u6570\uff1a\" + effectiveRow);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4fee\u6539\u6570\u636e<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testUpdateById(){\n    User user = new User();\n    user.setId(3L);\n    user.setName(\"changfeng\");\n    user.setAge(20);\n    \/\/UPDATE user SET name=?, age=? WHERE id=?\n    int effectiveRow = userMapper.updateById(user);\n    System.out.println(\"\u53d7\u5f71\u54cd\u884c\u6570\uff1a\" + effectiveRow);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u67e5\u8be2\u6570\u636e<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6839\u636eid\u67e5\u8be2<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testSelectById(){\n    User user = userMapper.selectById(3L);\n    System.out.println(user);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6839\u636eid\u6279\u91cf\u67e5\u8be2<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testSelectBatchByIds(){\n    \/\/SELECT id,name,age,email FROM user WHERE id IN ( ? , ? )\n    List&lt;Long&gt; ids = Arrays.asList(3L, 4L, 5L);\n    List&lt;User&gt; result = userMapper.selectBatchIds(ids);\n    result.forEach(System.out::println);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6839\u636eMap\u6761\u4ef6\u67e5\u8be2<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testSelectByMap(){\n    \/\/SELECT id,name,age,email FROM user WHERE name = ? AND age = ?\n    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();\n    map.put(\"age\", 24);\n    map.put(\"name\", \"Billie\");\n    List&lt;User&gt; result = userMapper.selectByMap(map);\n    result.forEach(System.out::println);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u67e5\u8be2\u5168\u8868\u6570\u636e<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testSelectAll(){\n    \/\/ \u8fd9\u91ccnull\u4ee3\u8868\u6ca1\u6709where\u6761\u4ef6\n    \/\/SELECT id,name,age,email FROM user\n    List&lt;User&gt; result = userMapper.selectList(null);\n    result.forEach(System.out::println);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5e38\u7528\u6ce8\u89e3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">@TableName\u6ce8\u89e3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u521a\u624d\u6211\u4eec\u5df2\u7ecf\uff0c\u5b66\u4e60\u4e86MyBatis-Plus\u57fa\u672c\u7684CRUD\uff0c\u4f46\u662f\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u9057\u7559\u95ee\u9898\u3002\u6211\u4eec\u77e5\u9053\uff0c\u5728\u6570\u636e\u5e93\u4e2d\u662f\u540c\u65f6\u5b58\u5728\u591a\u5f20\u8868\u7684\uff0c\u6211\u4eec\u600e\u4e48\u63a7\u5236\u4f7f\u7528Mapper\uff0c\u64cd\u4f5c\u67d0\u4e00\u5f20\u8868\u7684\u5462\uff1f\u8fd9\u5176\u5b9e\u5c31\u548c@TableName\u6ce8\u89e3\u6709\u5173\u7cfb\u4e86\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u4f7f\u7528@TableName\u6ce8\u89e3\uff0c\u5b9a\u4e49\u6570\u636e\u5e93\u8868\u548c\u5b9e\u4f53\u7c7b\u7684\u5173\u7cfb(\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4f1a\u6839\u636e\u5b9e\u4f53\u7c7b\u7684\u7c7b\u540d\u8bbf\u95ee\u6570\u636e\u5e93\u4e2d\u7684\u8868\uff0c\u6240\u4ee5\u5982\u679c\u5f53\u8868\u540d\u548c\u7c7b\u540d\u76f8\u540c\u65f6\uff0c\u4e0d\u52a0@TableName\u6ce8\u89e3\uff0c\u4e5f\u4e0d\u4f1a\u62a5\u9519)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\n@TableName(value = \"user\")\npublic class User {\n    private Long id;\n    private String name;\n    private Integer age;\n    private String email;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">@TableId\u6ce8\u89e3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6211\u4eec\u5355\u8868\u4e2d\uff0c\u53ef\u4ee5\u540c\u65f6\u5b9a\u4e49\u591a\u4e2a\u5b57\u6bb5\uff0c\u5728\u6211\u4eec\u7684\u6620\u5c04\u5b9e\u4f53\u7c7b\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u540c\u65f6\u5b9a\u4e49\u591a\u4e2a\u5c5e\u6027\u3002\u5728\u5355\u8868\u4e2d\uff0c\u6211\u4eec\u901a\u5e38\u90fd\u4f1a\u5b9a\u4e49\u4e3b\u952e\u5b57\u6bb5\uff0c\u90a3\u4e48\u4e3b\u952e\u5b57\u6bb5\u662f\u5982\u4f55\u548c\u5b9e\u4f53\u7c7b\u4e2d\u7684\u67d0\u4e2a\u5c5e\u6027\u5bf9\u5e94\u8d77\u6765\u7684\u5462\uff1f\u8fd9\u5c31\u548c@TableId\u6ce8\u89e3\u6709\u5173\u7cfb\u4e86\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u4f7f\u7528@TableId\u6ce8\u89e3\uff0c\u5b9a\u4e49\u6570\u636e\u5e93\u4e2d\u7684\u4e3b\u952e\u5b57\u6bb5\u548c\u5b9e\u4f53\u7c7b\u4e2d\u7684\u4e3b\u952e\u5c5e\u6027\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\u3002(\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cMyBatis-Plus\u4f1a\u6839\u636e\u4e3b\u952e\u540d\u6765\u6620\u5c04\uff0c\u6620\u5c04\u5230\u540c\u540d\u5b9e\u4f53\u7c7b\u5c5e\u6027)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\n@TableName(value = \"user\")\npublic class User implements Serializable {\n    @TableId(value = \"id\", type = IdType.ASSIGN_ID)\n    private Long id;\n    private String name;\n    private Integer age;\n    private String email;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5176\u4e2d\uff0cvalue\u5c5e\u6027\u6307\u7684\u662f\u6570\u636e\u5e93\u4e3b\u952e\u5b57\u6bb5\u7684\u540d\u79f0\uff0cIdType\u8868\u793a\u4e3b\u952e\u7684\u7c7b\u578b\u3002\u5728MyBatis-Plus\u4e2d\u4e3b\u952e\u7c7b\u578b\u6709\u4ee5\u4e0b\u51e0\u79cd<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u503c<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u63cf\u8ff0<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">AUTO<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6570\u636e\u5e93 ID \u81ea\u589e<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">NONE<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\u72b6\u6001\uff0c\u8be5\u7c7b\u578b\u4e3a\u672a\u8bbe\u7f6e\u4e3b\u952e\u7c7b\u578b\uff08\u6ce8\u89e3\u91cc\u7b49\u4e8e\u8ddf\u968f\u5168\u5c40\uff0c\u5168\u5c40\u91cc\u7ea6\u7b49\u4e8e INPUT\uff09<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">INPUT<\/td><td class=\"has-text-align-left\" data-align=\"left\">insert \u524d\u81ea\u884c set \u4e3b\u952e\u503c<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">ASSIGN_ID<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5206\u914d ID(\u4e3b\u952e\u7c7b\u578b\u4e3a Number(Long \u548c Integer)\u6216 String)(since 3.3.0),\u4f7f\u7528\u63a5\u53e3<code>IdentifierGenerator<\/code>\u7684\u65b9\u6cd5<code>nextId<\/code>(\u9ed8\u8ba4\u5b9e\u73b0\u7c7b\u4e3a<code>DefaultIdentifierGenerator<\/code>\u96ea\u82b1\u7b97\u6cd5)<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">ASSIGN_UUID<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5206\u914d UUID,\u4e3b\u952e\u7c7b\u578b\u4e3a String(since 3.3.0),\u4f7f\u7528\u63a5\u53e3<code>IdentifierGenerator<\/code>\u7684\u65b9\u6cd5<code>nextUUID<\/code>(\u9ed8\u8ba4 default \u65b9\u6cd5)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">@TableField\u6ce8\u89e3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7c7b\u4f3c\u4e8e@TableId\u6ce8\u89e3\uff0c@TableField\u6ce8\u89e3\u5728\u5b9e\u4f53\u7c7b\u4e2d\u7528\u6765\u5b9a\u4e49\u5b9e\u4f53\u7c7b\u4e2d\u7684\u666e\u901a\u5c5e\u6027\u548c\u6570\u636e\u5e93\u5b57\u6bb5\u7684\u6620\u5c04(\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cMyBatis-Plus\u4f1a\u6839\u636e\u5b57\u6bb5\u540d\u6765\u6620\u5c04\uff0c\u6620\u5c04\u5230\u540c\u540d\u5b9e\u4f53\u7c7b\u5c5e\u6027)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\n@TableName(value = \"user\")\npublic class User implements Serializable {\n    @TableId(value = \"id\", type = IdType.ASSIGN_ID)\n    private Long id;\n    @TableField(value = \"name\")\n    private String name;\n    @TableField(value = \"age\")\n    private Integer age;\n    @TableField(value = \"email\")\n    private String email;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">@TableField\u6ce8\u89e3\u9700\u8981\u6ce8\u610f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u82e5\u5b9e\u4f53\u7c7b\u4e2d\u7684\u5c5e\u6027\u4f7f\u7528\u7684\u662f\u9a7c\u5cf0\u547d\u540d\u98ce\u683c\uff0c\u800c\u8868\u4e2d\u7684\u5b57\u6bb5\u4f7f\u7528\u7684\u662f\u4e0b\u5212\u7ebf\u547d\u540d\u98ce\u683c\uff08\u4f8b\u5982\u5b9e\u4f53\u7c7b\u5c5e\u6027userName\uff0c\u8868\u4e2d\u5b57\u6bb5user_name\uff09\uff0c\u6b64\u65f6MyBatis-Plus\u4f1a\u81ea\u52a8\u5c06\u9a7c\u5cf0\u547d\u540d\u98ce\u683c\u8f6c\u5316\u4e3a\u4e0b\u5212\u7ebf\u547d\u540d\u98ce\u683c<\/li>\n\n\n\n<li>\u82e5\u5b9e\u4f53\u7c7b\u4e2d\u7684\u5c5e\u6027\u548c\u8868\u4e2d\u7684\u5b57\u6bb5\u4e0d\u6ee1\u8db3\u4e0a\u8ff0\u60c5\u51b5\uff0c\u4f8b\u5982\u5b9e\u4f53\u7c7b\u5c5e\u6027name\uff0c\u8868\u4e2d\u5b57\u6bb5username\uff0c\u6b64\u65f6\u9700\u8981\u5728\u5b9e\u4f53\u7c7b\u5c5e\u6027\u4e0a\u4f7f\u7528@TableField(&#8220;username&#8221;)\u8bbe\u7f6e\u5c5e\u6027\u6240\u5bf9\u5e94\u7684\u5b57\u6bb5\u540d<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u9664\u6b64\u4e4b\u5916\uff0c@TableField\u6ce8\u89e3\uff0c\u5982\u679c\u6211\u4eec\u5982\u679c\u4e0d\u60f3\u8ba9\u5b9e\u4f53\u7c7b\u4e2d\u7684\u67d0\u4e2a\u5c5e\u6027\uff0c\u6620\u5c04\u5230\u6570\u636e\u5e93\u4e2d\u7684\u67d0\u4e2a\u5b57\u6bb5\uff0c\u6211\u4eec\u53ef\u4ee5\u7ed9@TableField\u6ce8\u89e3\u7684exist\u5c5e\u6027\u8d4b\u503cfalse\uff0c\u8fd9\u6837\u4e00\u6765\uff0c\u5728\u5229\u7528\u5b9e\u4f53\u7c7b\u5bf9\u8c61\u7684\u505a\u589e\u5220\u6539\u67e5\u7684\u65f6\u5019\uff0c\u5c31\u4f1a\u5ffd\u7565\u5b9e\u4f53\u7c7b\u5bf9\u8c61\u7684\u8be5\u5c5e\u6027\u503c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\n@TableName(value = \"user\")\npublic class User implements Serializable {\n    @TableId(value = \"id\", type = IdType.ASSIGN_ID)\n    private Long id;\n    @TableField(value = \"name\")\n    private String name;\n    \/\/ \u5ffd\u7565age\u5c5e\u6027\uff0c\u4e0d\u8ba9\u5176\u6620\u5c04\u5230\u6570\u636e\u5e93\u7684age\u5b57\u6bb5\n    @TableField(exist = false)\n    private Integer age;\n    @TableField(value = \"email\")\n    private String email;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">@TableLogic<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e3a\u4e86\u5b9e\u73b0\u903b\u8f91\u5220\u9664\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u8868\u793a\u5220\u9664\u72b6\u6001\u7684\u5b9e\u4f53\u7c7b\u5c5e\u6027\u4e0a\u6dfb\u52a0@TableLogic\u6ce8\u89e3\uff0c\u4ece\u800c\u5b9e\u73b0\u903b\u8f91\u5220\u9664\u7684\u529f\u80fd\u3002\u5f53\u7136\uff0c\u5728\u4f7f\u7528\u4e4b\u524d\uff0c\u6211\u4eec\u8981\u5148\u7ed9\u6570\u636e\u5e93user\u8868\u589e\u52a0is_deleted\u5c5e\u6027\u5e76\u7ed9\u8be5\u5b57\u6bb5\u8d4b\u9ed8\u8ba4\u521d\u503c0\u8868\u793a\u672a\u5220\u9664\uff0c\u4ee5\u53ca\u5728\u5b9e\u4f53\u7c7b\u4e2d\u6dfb\u52a0isDeleted\u5c5e\u6027\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/image-20230301005215922.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/image-20230301005215922.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"image-20230301005215922\"\/><\/div><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\n@TableName(value = \"user\")\npublic class User implements Serializable {\n    @TableId(value = \"id\", type = IdType.ASSIGN_ID)\n    private Long id;\n    @TableField(value = \"name\")\n    private String name;\n    @TableField(value = \"age\")\n    private Integer age;\n    @TableField(value = \"email\")\n    private String email;\n    @TableLogic\n    private Integer isDeleted;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u6837\u4e00\u6765\uff0c\u5f53\u6211\u4eec\u6267\u884c\u5220\u9664\u8bed\u53e5\u7684\u65f6\u5019\uff0c\u5b9e\u9645\u6267\u884c\u7684\u5c31\u662f\u4e00\u6761set\u8bed\u53e5\uff0c\u6bd4\u5982\u5f53\u6211\u4eec\u6839\u636eid\u5220\u9664\u4e00\u6761\u8bb0\u5f55\u65f6\uff0c\u5b9e\u9645\u6267\u884c\u7684\u662f<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UPDATE user SET is_deleted=1 WHERE id=? AND is_deleted=0<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u6211\u4eec\u6267\u884c\u67e5\u8be2\u8bed\u53e5\u7684\u65f6\u5019\uff0c\u4f1a\u81ea\u52a8\u9644\u5e26\u903b\u8f91\u5220\u9664\u72b6\u6001\u7684\u5224\u65ad\uff0c\u67e5\u8be2\u7ed3\u679c\u4e2d\u4e0d\u4f1a\u5305\u542b\u5df2\u7ecf\u88ab\u903b\u8f91\u5220\u9664\u7684\u8bb0\u5f55<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT id,name,age,email,is_deleted FROM user WHERE is_deleted=0<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testDeleteLogic(){\n  int effectiveRow = userMapper.deleteById(3L);\n  \/\/UPDATE user SET is_deleted=1 WHERE id=? AND is_deleted=0\n  System.out.println(\"\u53d7\u5f71\u54cd\u884c\u6570\uff1a\" + effectiveRow);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u6761\u4ef6\u6784\u9020\u5668Wrapper<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6211\u4eec\u5bf9\u6570\u636e\u5e93\u505a\u589e\u5220\u6539\u67e5\u64cd\u4f5c\u7684\u65f6\u5019\uff0c\u5f80\u5f80\u9700\u8981\u9644\u5e26\u4e00\u4e9b\u6761\u4ef6\u5373where\u6761\u4ef6\uff0c\u8fd9\u4e9b\u6761\u4ef6\u5c31\u662f\u7528\u6761\u4ef6\u6784\u9020\u5668Wrapper\u6765\u6784\u9020\u548c\u8868\u793a\u7684\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/wrapper.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/wrapper.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wrapper \uff1a \u6761\u4ef6\u6784\u9020\u62bd\u8c61\u7c7b\uff0c\u6700\u9876\u7aef\u7236\u7c7b<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AbstractWrapper \uff1a \u7528\u4e8e\u67e5\u8be2\u6761\u4ef6\u7684\u5c01\u88c5\uff0c\u751f\u6210 sql \u7684 where \u6761\u4ef6<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">QueryWrapper \uff1a \u67e5\u8be2\u6761\u4ef6\u7684\u5c01\u88c5<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">UpdateWrapper \uff1a Update \u6761\u4ef6\u5c01\u88c5(\u9664\u4e86\u5305\u542b\u66f4\u65b0\u6761\u4ef6\uff0c\u8fd8\u53ef\u4ee5\u6307\u5b9a\u66f4\u65b0\u7684\u5b57\u6bb5\u548c\u5bf9\u5e94\u7684\u65b0\u503c)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AbstractLambdaWrapper \uff1a Lambda \u8bed\u6cd5\u4f7f\u7528\u7684Wrapper\uff0c\u7edf\u4e00\u5904\u7406\u89e3\u6790 lambda \u83b7\u53d6 column<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LambdaQueryWrapper \uff1a\u7528\u4e8eLambda\u8bed\u6cd5\u4f7f\u7528\u7684\u67e5\u8be2Wrapper<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LambdaUpdateWrapper \uff1a \u7528\u4e8eLambda\u8bed\u6cd5\u4f7f\u7528\u7684\u66f4\u65b0Wrapper(\u9664\u4e86\u5305\u542b\u66f4\u65b0\u6761\u4ef6\uff0c\u8fd8\u53ef\u4ee5\u6307\u5b9a\u66f4\u65b0\u7684\u5b57\u6bb5\u548c\u5bf9\u5e94\u7684\u65b0\u503c)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">QueryWrapper<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">QueryWrapper\u4e2d\u63d0\u4f9b\u4e86\u591a\u4e2a\u65b9\u6cd5\uff0c\u6bcf\u4e2a\u65b9\u6cd5\u90fd\u4ee3\u8868\u4e86\u4e00\u79cd\u6761\u4ef6\u3002\u53ef\u4ee5\u5728Wrapper\u5bf9\u8c61\u4e0a\u8c03\u7528\u591a\u4e2a\u65b9\u6cd5\uff0c\u4ece\u800c\u7ec4\u88c5\u591a\u4e2a\u5177\u4f53\u7684\u67e5\u8be2\u6761\u4ef6\uff0c\u8fd9\u4e9b\u6761\u4ef6\u53ef\u4ee5AND\u5173\u7cfb\uff0c\u4e5f\u53ef\u4ee5\u662fOR\u5173\u7cfb\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8c03\u7528\u591a\u4e2a\u65b9\u6cd5\uff0c\u8fd9\u4e9b\u65b9\u6cd5\u8868\u793a\u7684\u6761\u4ef6\u9ed8\u8ba4\u662fAND\u5173\u7cfb<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testAnd(){\n  \/\/\u67e5\u8be2\u7528\u6237\u540d\u5305\u542ba\uff0c\u5e74\u9f84\u572820\u523030\u4e4b\u95f4\uff0c\u90ae\u7bb1\u4e0d\u4e3anull\u7684\u7528\u6237\u4fe1\u606f\uff0c\u5e76\u4e14\u6309\u7167\u5e74\u9f84\u7684\u5347\u5e8f\u6392\u5e8f\n  \/\/SELECT id,name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL) ORDER BY age DESC\n  QueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;&gt;();\n  queryWrapper.like(\"name\", \"a\")\n    .between(\"age\", 20, 30)\n    .isNotNull(\"email\")\n    .orderByDesc(\"age\");\n  List&lt;User&gt; result = userMapper.selectList(queryWrapper);\n  result.forEach(System.out::println);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u8981\u60f3\u8868\u793a\u6761\u4ef6\u4e4b\u95f4\u7684OR\u5173\u7cfb\uff0c\u5fc5\u987b\u8c03\u7528or()\u65b9\u6cd5\u6765\u8868\u793aOR\u8fd0\u7b97\u7b26<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testOr(){\n  \/\/\u67e5\u8be2\u7528\u6237\u540d\u5305\u542ba \u6216\u8005 \u5e74\u9f84\u5927\u4e8e20\uff0c\u5e76\u4e14\u6309\u7167\u5e74\u9f84\u7684\u5347\u5e8f\u6392\u5e8f\n  \/\/ SELECT id,name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (name LIKE ? OR age &gt; ?) ORDER BY age DESC\n  QueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;&gt;();\n  queryWrapper.like(\"name\", \"a\")\n    .or()\n    .gt(\"age\", 20)\n    .orderByDesc(\"age\");\n  List&lt;User&gt; result = userMapper.selectList(queryWrapper);\n  result.forEach(System.out::println);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u9664\u4e86\u9488\u5bf9where\u4e2d\u7684\u6761\u4ef6\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u6307\u5b9aselect\u4e2d\u67e5\u8be2\u7684\u5b57\u6bb5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testSelect() {\n  \/\/\u67e5\u8be2\u7528\u6237id &gt; 3 \u4e14 \u5e74\u9f84\u572818-30\u4e4b\u95f4\u7684\u7528\u6237\u7684\u540d\u5b57\n  \/\/ SELECT name FROM user WHERE is_deleted=0 AND (id &gt; ? AND age BETWEEN ? AND ?)\n  QueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;&gt;();\n  queryWrapper.gt(\"id\", 3)\n    .between(\"age\", 18, 30)\n    .select(\"name\");\n  List&lt;User&gt; list = userMapper.selectList(queryWrapper);\n  list.forEach(System.out::println);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u7136QueryWrapper\u8fd8\u53ef\u4ee5\u4f7f\u7528\u5728\u5220\u9664\u8bed\u53e5\u4e2d\uff0c\u8868\u793a\u5220\u9664\u6761\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testWrapperWithDelete() {\n  \/\/ \u5220\u9664age &lt; 20\u7684\u7528\u6237\n  \/\/ Delete from user WHERE age &lt; ?\n  \/\/ update user set is_deleted = 1 where is_deleted = 0 and (age &lt; ?)\n  QueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;&gt;();\n  queryWrapper.lt(\"age\", 20);\n  int deleteRow = userMapper.delete(queryWrapper);\n  System.out.println(\"\u5f71\u54cd\u884c\u6570\uff1a \" + deleteRow);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">UpdateWrapper<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528UpdateWrapper\u6765\u5b9e\u73b0\u6570\u636e\u7684\u4fee\u6539\uff0c\u5728\u4f7f\u7528UpdateWrapper\u4fee\u6539\u7684\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528User\u5bf9\u8c61\u7684\u975e\u7a7a\u5c5e\u6027\u503c\uff0c\u8868\u793a\u901a\u8fc7set \u8bed\u53e5\u4fee\u6539\u7684\u76ee\u6807\u5b57\u6bb5\u53ca\u5176\u65b0\u503c set \u5b57\u6bb51 = \u65b0\u503c1\uff0c&#8230;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void updateWrapperWithUserObj() {\n\n  \/\/ \u5c06Jone\u7684\u5e74\u9f84\u6539\u4e3a29\uff0c\u90ae\u7bb1\u6539\u4e3a Jone@cskaoyan.com\n  \/\/ UPDATE user SET age=?, email=? WHERE name = ?\n  UpdateWrapper&lt;User&gt; userUpdateWrapper = new UpdateWrapper&lt;&gt;();\n  userUpdateWrapper.eq(\"name\", \"Jone\");\n  \/\/ \u521b\u5efaUser\u5bf9\u8c61\uff0c\u8be5\u5bf9\u8c61\u7684\u975e\u7a7a\u5c5e\u6027\uff0c\u5bf9\u5e94\u7740set\u8bed\u53e5\u4fee\u6539\u7684\u6570\u636e\u5e93\u5b57\u6bb5\uff0c\u4ee5\u53ca\u5bf9\u5e94\u7684\u5b57\u6bb5\u503c\n  User user = new User();\n  \/\/ \u8bbe\u7f6eemail\u5c5e\u6027\u4e3a\u5f85\u4fee\u6539\u7684\u65b0\u503c\n  user.setEmail(\"Jone@cskaoyan.com\");\n  \/\/ \u8bbe\u7f6eage\u5c5e\u6027\u4e3a\u5f85\u4fee\u6539\u7684\u65b0\u503c\n  user.setAge(29);\n  \/\/ update\n  userMapper.update(user, userUpdateWrapper);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u4f7f\u7528UpdateWrapper\u7684\u65f6\u5019\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528UpdateWrapper\u7684set\u65b9\u6cd5\uff0c\u8bbe\u7f6eset\u8bed\u53e5\u4fee\u6539\u7684\u76ee\u6807\u5b57\u6bb5\u53ca\u5176\u65b0\u503c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void updateWrapperWithoutObj() {\n  \/\/ \u5c06Jone\u7684\u5e74\u9f84\u6539\u4e3a29\uff0c\u90ae\u7bb1\u6539\u4e3a Jone@cskaoyan.com\n  \/\/ UPDATE user SET age=?, email=? WHERE name = ?\n  UpdateWrapper&lt;User&gt; userUpdateWrapper = new UpdateWrapper&lt;&gt;();\n  userUpdateWrapper.eq(\"name\", \"Jone\");\n  \/\/ \u8bbe\u7f6eemail\u5c5e\u6027\u4e3a\u5f85\u4fee\u6539\u7684\u65b0\u503c\n  userUpdateWrapper.set(\"email\",\"Jone@cskaoyan.com\");\n  \/\/ \u8bbe\u7f6eage\u5c5e\u6027\u4e3a\u5f85\u4fee\u6539\u7684\u65b0\u503c\n  userUpdateWrapper.set(\"age\", 29);\n\n\n  \/\/ update, \u4e0d\u9700\u8981\u4f20\u9012user\u5bf9\u8c61\uff0c\u56e0\u4e3a\u4f7f\u7528UpdateWrapper\u7684set\u65b9\u6cd5\u6765\u8bbe\u7f6e\u503c\n  userMapper.update(null, userUpdateWrapper);\n\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Condition<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5b9e\u9645\u5f00\u53d1\u4e2d\uff0c\u6709\u65f6\u9700\u8981\u6839\u636e\u6761\u4ef6\u6765\u51b3\u5b9a\u662f\u5426\u5728SQL\u8bed\u53e5\u4e2d\u6dfb\u52a0\u6761\u4ef6\uff0c\u5373\u9700\u8981\u5b9e\u73b0\u52a8\u6001SQL\u7684\u529f\u80fd\uff0c\u6b64\u65f6\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5e26condition\u53c2\u6570\u7684\u91cd\u8f7d\u65b9\u6cd5\u6765\u5b9e\u73b0\u3002\u8be5condition\u53c2\u6570\u662f\u4e00\u4e2aboolean\u503c\uff0c\u8868\u793a\u662f\u5426\u5728SQL\u8bed\u53e5\u4e2d\u62fc\u63a5\u6761\u4ef6\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testCondition () {\n  String name = null;\n  Integer minAge = null;\n  Integer maxAge = 25;\n\n  \/\/ \u67e5\u8be2\u6307\u5b9aname\uff0c\u5e74\u9f84\u5728\u6307\u5b9a\u8303\u56f4\u7684\u7528\u6237\n  \/\/ Preparing: SELECT id,name,age,email FROM user WHERE age &lt;= ?\n  QueryWrapper&lt;User&gt; userQueryWrapper = new QueryWrapper&lt;&gt;();\n  \/\/ \u6bcf\u4e00\u4e2a\u6761\u4ef6\uff0c\u90fd\u53ef\u4ee5\u8c03\u7528\u5176\u6709condition\u53c2\u6570\u7684\u91cd\u8f7d\u65b9\u6cd5(\u90fd\u662f\u7b2c\u4e00\u4e2a\u53c2\u6570)\n  userQueryWrapper.eq(null != name &amp;&amp; !name.isEmpty(), \"name\", name)\n    .ge(minAge != null, \"age\", minAge)\n    .le(maxAge != null, \"age\", maxAge);\n  List&lt;User&gt; users = userMapper.selectList(userQueryWrapper);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">LambdaQueryWrapper<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">LambdaQueryWrapper \u7684\u672c\u8d28\u548cQueryWrapper\u662f\u76f8\u540c\u7684\uff0c\u90fd\u4e3b\u8981\u8868\u793awhere\u4e2d\u7684\u6761\u4ef6\uff0c\u552f\u4e00\u4e0d\u540c\u7684\u662f\uff0c\u5728\u6307\u5b9a\u6761\u4ef6\u5b57\u6bb5\u7684\u65f6\u5019\uff0c\u4e0d\u662f\u76f4\u63a5\u6307\u5b9a\u5b57\u6bb5\u7684\u540d\u79f0\uff0c\u800c\u662f\u901a\u8fc7Lambda\u8868\u8fbe\u5f0f(\u5b9e\u4f53\u7c7b\u4e2d\u5bf9\u5e94\u5c5e\u6027\u7684getXxx\u65b9\u6cd5\u6216\u8005isXxx\u65b9\u6cd5)\u6765\u6307\u5b9a\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testLambdaQueryWrapper() {\n  String name = null;\n  Integer minAge = null;\n  Integer maxAge = 25;\n\n  \/\/ \u67e5\u8be2name\u4e3azs\uff0c\u5e74\u9f84\u572818-25\u5c81\u7684\u7528\u6237\n  \/\/ Preparing: SELECT id,name,age,email FROM user WHERE age &lt;= ? AND name=?\n  LambdaQueryWrapper&lt;User&gt; userQueryWrapper = new LambdaQueryWrapper&lt;&gt;();\n  \/\/ \u548cQueryWrapper\u7684\u4e0d\u540c\u4e4b\u5904\u5c31\u5728\u4e8e\uff0c\u5217\u540d\u4f7f\u7528\u4e00\u4e2aLambda\u8868\u8fbe\u5f0f\u6765\u8868\u793a\u7684(\u5c5e\u6027\u5bf9\u5e94\u7684get\u65b9\u6cd5)\n  userQueryWrapper.eq(null != name &amp;&amp; !name.isEmpty(), User::getName, \"zs\")\n    .ge(minAge != null, User::getAge, minAge)\n    .le(maxAge != null, User::getAge, maxAge);\n\n  List&lt;User&gt; users = userMapper.selectList(userQueryWrapper);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">LambdaUpdateWrapper<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testLambdaUpdateWrapper() {\n  \/\/ \u5c06Jone\u7684\u5e74\u9f84\u6539\u4e3a29\uff0c\u90ae\u7bb1\u6539\u4e3a Jone@cskaoyan.com\n  \/\/ UPDATE user SET age=?, email=? WHERE name = ?\n  LambdaUpdateWrapper&lt;User&gt; userUpdateWrapper = new LambdaUpdateWrapper&lt;&gt;();\n  \/\/ \u5217\u540d\u4f7f\u7528\u4e00\u4e2aLambda\u8868\u8fbe\u5f0f\u6765\u8868\u793a\u7684(\u5c5e\u6027\u5bf9\u5e94\u7684get\u65b9\u6cd5)\n  userUpdateWrapper.eq(User::getName, \"Jone\");\n  \/\/ \u8bbe\u7f6eemail\u5c5e\u6027\u4e3a\u5f85\u4fee\u6539\u7684\u65b0\u503c\uff08\u5217\u540d\u4f7f\u7528\u4e00\u4e2aLambda\u8868\u8fbe\u5f0f\u6765\u8868\u793a\u7684(\u5c5e\u6027\u5bf9\u5e94\u7684get\u65b9\u6cd5)\uff09\n  userUpdateWrapper.set(User::getEmail,\"Jone@cskaoyan.com\");\n  \/\/ \u8bbe\u7f6eage\u5c5e\u6027\u4e3a\u5f85\u4fee\u6539\u7684\u65b0\u503c(\u5217\u540d\u4f7f\u7528\u4e00\u4e2aLambda\u8868\u8fbe\u5f0f\u6765\u8868\u793a\u7684(\u5c5e\u6027\u5bf9\u5e94\u7684get\u65b9\u6cd5))\n  userUpdateWrapper.set(User::getAge, 29);\n\n  \/\/ update, \u4e0d\u9700\u8981\u4f20\u9012user\u5bf9\u8c61\uff0c\u56e0\u4e3a\u4f7f\u7528UpdateWrapper\u7684set\u65b9\u6cd5\u6765\u8bbe\u7f6e\u503c\n  userMapper.update(null, userUpdateWrapper);\n\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5206\u9875\u63d2\u4ef6<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">MyBatis Plus\u81ea\u5e26\u5206\u9875\u63d2\u4ef6\uff0c\u53ea\u8981\u7b80\u5355\u7684\u914d\u7f6e\u5373\u53ef\u5b9e\u73b0\u5206\u9875\u529f\u80fd<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6dfb\u52a0\u914d\u7f6e\u7c7b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Configuration\n\/\/@MapperScan(\"com.cskaoyan.mybatisplus.mapper\") \/\/\u53ef\u4ee5\u5c06\u4e3b\u7c7b\u4e2d\u7684\u6ce8\u89e3\u79fb\u5230\u6b64\u5904\npublic class MybatisPlusConfig {\n  @Bean\n  public MybatisPlusInterceptor mybatisPlusInterceptor() {\n    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();\n    \/\/ \u6dfb\u52a0\u9488\u5bf9Mysql\u6570\u636e\u5e93\u7684\u5206\u9875\u62e6\u622a\u5668\n    interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));\n    return interceptor;\n  }\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>@Test\npublic void testPage(){\n    \/\/\u8bbe\u7f6e\u5206\u9875\u53c2\u6570\n    \/\/ \u6ce8\u610f\u9875\u6570\u4ece1\u5f00\u59cb\n    Page&lt;User&gt; page = new Page&lt;&gt;(1, 2);\n    userMapper.selectPage(page, null);\n    \/\/\u83b7\u53d6\u5206\u9875\u4e2d\u7684\u6bcf\u4e00\u6761\u8bb0\u5f55\n    List&lt;User&gt; list = page.getRecords();\n    list.forEach(System.out::println);\n    System.out.println(\"\u5f53\u524d\u9875\uff1a\" + page.getCurrent());\n    System.out.println(\"\u6bcf\u9875\u663e\u793a\u7684\u6761\u6570\uff1a\" + page.getSize());\n    System.out.println(\"\u603b\u8bb0\u5f55\u6570\uff1a\" + page.getTotal());\n    System.out.println(\"\u603b\u9875\u6570\uff1a\" + page.getPages());\n    System.out.println(\"\u662f\u5426\u6709\u4e0a\u4e00\u9875\uff1a\" + page.hasPrevious());\n    System.out.println(\"\u662f\u5426\u6709\u4e0b\u4e00\u9875\uff1a\" + page.hasNext());\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Service Interface<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mybatis-Plus\u8fd8\u63d0\u4f9b\u4e86\u901a\u7528\u7684<a href=\"https:\/\/gitee.com\/baomidou\/mybatis-plus\/blob\/3.0\/mybatis-plus-extension\/src\/main\/java\/com\/baomidou\/mybatisplus\/extension\/service\/IService.java\" target=\"_blank\" rel=\"noreferrer noopener\">IService<\/a>&nbsp;\uff0c\u5982\u679c\u53ea\u9700\u8981\u7ee7\u627fIService\u63a5\u53e3\u5feb\u901f\u5b9e\u73b0\u5bf9\u6570\u636e\u5e93\u7684\u57fa\u672c\u64cd\u4f5c\uff0c\u540c\u65f6\u4fdd\u6301\u4ee3\u7801\u7684\u7b80\u6d01\u6027\u548c\u53ef\u7ef4\u62a4\u6027\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n\/**\n\t\u5b9a\u4e49Service\u7ee7\u627fIService\n*\/\npublic interface UserService extends IService&lt;MyUser&gt; {\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n    1. \u5b9a\u4e49UserSerivce\u7684\u5b9e\u73b0\u7c7b\u7ee7\u627fServiceImpl\n    2. ServiceImpl\u6709\u4e24\u4e2a\u6cdb\u578b\u53c2\u6570: \u7b2c\u4e00\u4e2a\u6cdb\u578b\u4ee3\u8868\u8bbf\u95ee\u5355\u8868\u7684Mapper\uff0c\u7b2c\u4e8c\u4e2a\u6cdb\u578b\u4ee3\u8868\u5355\u8868\u7684\u6620\u5c04\u5b9e\u4f53\u7c7b\n*\/\n@Service\npublic class UserServiceImpl extends ServiceImpl&lt;UserMapper, MyUser&gt; implements UserService{\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>@SpringBootTest\npublic class ServiceTest {\n    @Autowired\n    private UserService userService;\n   \n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u8c03\u7528service\u65b9\u6cd5\u5b9e\u73b0CRUD\u4e86\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u65b0\u589e\u6570\u636e<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u63d2\u5165\u4e00\u6761\u8bb0\u5f55 \u7b49\u4ef7\u4e8eMapper\u4e2d\u7684insert\nboolean save(T entity);\n\/\/ \u63d2\u5165\uff08\u6279\u91cf\uff09\nboolean saveBatch(Collection&lt;T&gt; entityList);\n\n\/\/ TableId\u6ce8\u89e3\u5c5e\u6027\u503c\u5b58\u5728\u5219\u66f4\u65b0\u8bb0\u5f55\uff0c\u5426\u63d2\u5165\u4e00\u6761\u8bb0\u5f55(\u6ce8\u610f\u8fd9\u4e2a\u65b9\u6cd5\u662fMapper\u6ca1\u6709\u7684)\nboolean saveOrUpdate(T entity);<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>User user = new User();\nuser.setName(\"John Doe\");\nuser.setEmail(\"john.doe@example.com\");\nboolean result = userService.save(user); \/\/ \u8c03\u7528 save \u65b9\u6cd5\nif (result) {\n    System.out.println(\"User saved successfully.\");\n} else {\n    System.out.println(\"Failed to save user.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5047\u8bbe\u6709\u4e00\u7ec4 User \u5b9e\u4f53\u5bf9\u8c61\nList&lt;User&gt; users = Arrays.asList(\n    new User(\"Alice\", \"alice@example.com\"),\n    new User(\"Bob\", \"bob@example.com\"),\n    new User(\"Charlie\", \"charlie@example.com\")\n);\n\/\/ \u4f7f\u7528\u9ed8\u8ba4\u6279\u6b21\u5927\u5c0f\u8fdb\u884c\u6279\u91cf\u63d2\u5165\nboolean result = userService.saveBatch(users); \/\/ \u8c03\u7528 saveBatch \u65b9\u6cd5\uff0c\u9ed8\u8ba4\u6279\u6b21\u5927\u5c0f\nif (result) {\n    System.out.println(\"Users saved successfully.\");\n} else {\n    System.out.println(\"Failed to save users.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5047\u8bbe\u6709\u4e00\u4e2a User \u5b9e\u4f53\u5bf9\u8c61\uff0c\u5176\u4e2d id \u662f TableId \u6ce8\u89e3\u7684\u5c5e\u6027\n\/\/\u5982\u679cid\u503c\u4e3a1\u7684\u8bb0\u5f55\u5b58\u5728\uff0c\u7ed3\u679c\u4e3a\uff1a UPDATE user SET name = 'John Doe', email = 'john.doe@example.com' WHERE id = 1\n\/\/\u5982\u679cid\u503c\u4e3a1\u7684\u8bb0\u5f55\u4e0d\u5b58\u5728,\u7ed3\u679c\u4e3a\uff1aINSERT INTO user (id, name, email) VALUES (1, 'John Doe', 'john.doe@example.com') \nUser user = new User();\nuser.setId(1);\nuser.setName(\"John Doe\");\nuser.setEmail(\"john.doe@example.com\");\nboolean result = userService.saveOrUpdate(user); \/\/ \u8c03\u7528 saveOrUpdate \u65b9\u6cd5\nif (result) {\n    System.out.println(\"User updated or saved successfully.\");\n} else {\n    System.out.println(\"Failed to update or save user.\");\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5220\u9664\u6570\u636e<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u6839\u636e queryWrapper \u8bbe\u7f6e\u7684\u6761\u4ef6\uff0c\u5220\u9664\u8bb0\u5f55\nboolean remove(Wrapper&lt;T&gt; queryWrapper);\n\/\/ \u6839\u636e ID \u5220\u9664\nboolean removeById(Serializable id);\n\/\/ \u6839\u636e columnMap \u6761\u4ef6\uff0c\u5220\u9664\u8bb0\u5f55\nboolean removeByMap(Map&lt;String, Object&gt; columnMap);\n\/\/ \u5220\u9664\uff08\u6839\u636eID \u6279\u91cf\u5220\u9664\uff09\nboolean removeByIds(Collection&lt;? extends Serializable&gt; idList);<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5047\u8bbe\u6709\u4e00\u4e2a QueryWrapper \u5bf9\u8c61\uff0c\u8bbe\u7f6e\u5220\u9664\u6761\u4ef6\u4e3a name = 'John Doe'\nQueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;&gt;();\nqueryWrapper.eq(\"name\", \"John Doe\");\nboolean result = userService.remove(queryWrapper); \/\/ \u8c03\u7528 remove \u65b9\u6cd5\nif (result) {\n    System.out.println(\"Record deleted successfully.\");\n} else {\n    System.out.println(\"Failed to delete record.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5047\u8bbe\u8981\u5220\u9664 ID \u4e3a 1 \u7684\u7528\u6237\nboolean result = userService.removeById(1); \/\/ \u8c03\u7528 removeById \u65b9\u6cd5\nif (result) {\n    System.out.println(\"User deleted successfully.\");\n} else {\n    System.out.println(\"Failed to delete user.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u8bbe\u7f6e\u5220\u9664\u6761\u4ef6\u4e3a age = 30\nMap&lt;String, Object&gt; columnMap = new HashMap&lt;&gt;();\ncolumnMap.put(\"age\", 30);\nboolean result = userService.removeByMap(columnMap); \/\/ \u8c03\u7528 removeByMap \u65b9\u6cd5\nif (result) {\n    System.out.println(\"Records deleted successfully.\");\n} else {\n    System.out.println(\"Failed to delete records.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5047\u8bbe\u6709\u4e00\u7ec4 ID \u5217\u8868\uff0c\u6279\u91cf\u5220\u9664\u7528\u6237\nList&lt;Integer&gt; ids = Arrays.asList(1, 2, 3);\nboolean result = userService.removeByIds(ids); \/\/ \u8c03\u7528 removeByIds \u65b9\u6cd5\nif (result) {\n    System.out.println(\"Users deleted successfully.\");\n} else {\n    System.out.println(\"Failed to delete users.\");\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u4fee\u6539\u6570\u636e<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u6839\u636e UpdateWrapper \u6761\u4ef6\uff0c\u66f4\u65b0\u8bb0\u5f55\nboolean update(Wrapper&lt;T&gt; updateWrapper);\n\/\/ \u6839\u636e whereWrapper \u6761\u4ef6\uff0c\u66f4\u65b0\u8bb0\u5f55\nboolean update(T updateEntity, Wrapper&lt;T&gt; whereWrapper);\n\/\/ \u6839\u636e ID \u9009\u62e9\u4fee\u6539\nboolean updateById(T entity);\n\/\/ \u6839\u636eID \u6279\u91cf\u66f4\u65b0\uff0c\u6ce8\u610f\u8fd9\u4e2a\u65b9\u6cd5\u662fBaseMapper\u4e2d\u6ca1\u6709\u7684\nboolean updateBatchById(Collection&lt;T&gt; entityList);<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u8bbe\u7f6e\u66f4\u65b0\u6761\u4ef6\u4e3a name = 'John Doe'\uff0c\u66f4\u65b0\u5b57\u6bb5\u4e3a email\nUpdateWrapper&lt;User&gt; updateWrapper = new UpdateWrapper&lt;&gt;();\nupdateWrapper.eq(\"name\", \"John Doe\").set(\"email\", \"john.doe@newdomain.com\");\nboolean result = userService.update(updateWrapper); \/\/ \u8c03\u7528 update \u65b9\u6cd5\nif (result) {\n    System.out.println(\"Record updated successfully.\");\n} else {\n    System.out.println(\"Failed to update record.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/\u8bbe\u7f6e\u66f4\u65b0\u5b57\u6bb5\u4e3a name\uff0c\u4ee5\u53ca\u4e00\u4e2a whereWrapper \u8bbe\u7f6e\u66f4\u65b0\u6761\u4ef6\u4e3a id\nUser user = new User();\nuser.setName(\"Updated Name\");\nQueryWrapper&lt;User&gt; whereWrapper = new QueryWrapper&lt;&gt;();\nwhereWrapper.eq(\"id\", 1);\nboolean result = userService.update(user, whereWrapper); \/\/ \u8c03\u7528 update \u65b9\u6cd5\nif (result) {\n    System.out.println(\"Record updated successfully.\");\n} else {\n    System.out.println(\"Failed to update record.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u8bbe\u7f6e\u66f4\u65b0\u5b57\u6bb5\u4e3a email\uff0c\u6839\u636e ID \u66f4\u65b0\nUser updateEntity = new User();\nupdateEntity.setId(1);\nupdateEntity.setEmail(\"updated.email@example.com\");\nboolean result = userService.updateById(updateEntity); \/\/ \u8c03\u7528 updateById \u65b9\u6cd5\nif (result) {\n    System.out.println(\"Record updated successfully.\");\n} else {\n    System.out.println(\"Failed to update record.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u6279\u91cf\u66f4\u65b0\nList&lt;User&gt; users = Arrays.asList(\n    new User(1, null, \"new.email1@example.com\"),\n    new User(2, null, \"new.email2@example.com\")\n);\nboolean result = userService.updateBatchById(users); \/\/ \u8c03\u7528 updateBatchById \u65b9\u6cd5\nif (result) {\n    System.out.println(\"Records updated successfully.\");\n} else {\n    System.out.println(\"Failed to update records.\");\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u67e5\u8be2\u6570\u636e<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u6839\u636e ID \u67e5\u8be2\nT getById(Serializable id);\n\/\/ \u6839\u636e Wrapper\uff0c\u67e5\u8be2\u4e00\u6761\u8bb0\u5f55\u3002\u7ed3\u679c\u96c6\uff0c\u5982\u679c\u662f\u591a\u4e2a\u4f1a\u629b\u51fa\u5f02\u5e38\uff0c\u968f\u673a\u53d6\u4e00\u6761\u52a0\u4e0a\u9650\u5236\u6761\u4ef6 wrapper.last(\"LIMIT 1\")\nT getOne(Wrapper&lt;T&gt; queryWrapper);\n\/\/ \u67e5\u8be2\u6240\u6709\nList&lt;T&gt; list();\n\/\/ \u67e5\u8be2\u5217\u8868\nList&lt;T&gt; list(Wrapper&lt;T&gt; queryWrapper);\n\/\/ \u67e5\u8be2\uff08\u6839\u636eID \u6279\u91cf\u67e5\u8be2\uff09\nCollection&lt;T&gt; listByIds(Collection&lt;? extends Serializable&gt; idList);<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u67e5\u8be2 ID \u4e3a 1 \u7684\u7528\u6237\nUser user = userService.getById(1); \/\/ \u8c03\u7528 getById \u65b9\u6cd5\nif (user != null) {\n    System.out.println(\"User found: \" + user);\n} else {\n    System.out.println(\"User not found.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u67e5\u8be2\u6761\u4ef6\u4e3a name = 'John Doe'\nQueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;&gt;();\nqueryWrapper.eq(\"name\", \"John Doe\");\nUser user = userService.getOne(queryWrapper); \/\/ \u8c03\u7528 getOne \u65b9\u6cd5\nif (user != null) {\n    System.out.println(\"User found: \" + user);\n} else {\n    System.out.println(\"User not found.\");\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u67e5\u8be2\u6240\u6709\u7528\u6237\nList&lt;User&gt; users = userService.list(); \/\/ \u8c03\u7528 list \u65b9\u6cd5\nfor (User user : users) {\n    System.out.println(\"User: \" + user);\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u67e5\u8be2\u6761\u4ef6\u4e3a age &gt; 25\nQueryWrapper&lt;User&gt; queryWrapper = new QueryWrapper&lt;&gt;();\nqueryWrapper.gt(\"age\", 25);\nList&lt;User&gt; users = userService.list(queryWrapper); \/\/ \u8c03\u7528 list \u65b9\u6cd5\nfor (User user : users) {\n    System.out.println(\"User: \" + user);\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5047\u8bbe\u6709\u4e00\u7ec4 ID \u5217\u8868\uff0c\u6279\u91cf\u67e5\u8be2\u7528\u6237\nList&lt;Integer&gt; ids = Arrays.asList(1, 2, 3);\nCollection&lt;User&gt; users = userService.listByIds(ids); \/\/ \u8c03\u7528 listByIds \u65b9\u6cd5\nfor (User user : users) {\n    System.out.println(\"User: \" + user);\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u6301\u4e45\u5c42\u5f15\u5165<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5b9e\u9645\u5f00\u53d1\u4e2d\uff0c\u4e00\u4e2aweb\u5e94\u7528\u901a\u5e38\u4f1a\u88ab\u5206\u4e3a\u4e09\u5c42\uff0c\u5206\u522b\u4e3a\u6301\u4e45\u5c42\uff0c\u4e1a\u52a1\u5c42\uff0c\u63a7\u5236\u5c42\uff0c\u6bcf\u5c42\u5404\u6709\u5404\u7684\u804c\u8d23\uff0c\u6240\u4ee5\u9488\u5bf9\u540c\u4e00\u4e2a\u8bf7\u6c42\uff0c\u6bcf\u5c42\u8fd4\u56de\u7684\u5bf9\u8c61\u5e94\u8be5\u662f\u4e0d\u540c\u7684\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6301\u4e45\u5c42\uff1a\u4e3b\u8981\u8d1f\u8d23\u8bbf\u95ee\u6570\u636e\u5e93\u4e2d\u7684\u6570\u636e\uff0c\u5e76\u5c06\u6570\u636e\u5e93\u4e2d\u7684\u6570\u636e\u5c01\u88c5\u4e3aPO\u5bf9\u8c61\uff0c\u5bf9\u4e0a\u5c42\u5c4f\u853d\u6570\u636e\u8bbf\u95ee\u7ec6\u8282\u3002\u6301\u4e45\u5c42\u4e0d\u5173\u5fc3\u4e1a\u52a1\uff0c\u53ea\u5173\u5fc3\u6570\u636e\uff0c\u56e0\u6b64\u5bf9\u8c61\u5c5e\u6027\u548c\u6570\u636e\u5e93\u8868\u5b57\u6bb5\u4e00\u4e00\u5bf9\u5e94<\/li>\n\n\n\n<li>\u4e1a\u52a1\u5c42\uff1a\u4e1a\u52a1\u5c42\u4ece\u6301\u4e45\u5c42\u83b7\u53d6\u5c01\u88c5\u6570\u636e\uff0c\u5e76\u6839\u636e\u5177\u4f53\u7684\u4e1a\u52a1\u903b\u8f91\u8ba1\u7b97\uff0c\u5f97\u5230\u4e1a\u52a1\u5c42\u7684\u8ba1\u7b97\u7ed3\u679c\uff0c\u7528DTO\u5bf9\u8c61\u6765\u5c01\u88c5\u3002DTO\u5bf9\u8c61\u7684\u5168\u79f0\u662f Data Tranfer Object\u3002<\/li>\n\n\n\n<li>\u63a7\u5236\u5c42\uff1a\u63a7\u5236\u5c42\u83b7\u53d6\u4e1a\u52a1\u5c42\u7684\u4e1a\u52a1\u5904\u7406\u7ed3\u679c\u4e4b\u540e\uff0c\u8fd8\u53ef\u80fd\u9700\u8981\u5c06\u5176\u52a0\u5de5\u6210\u524d\u7aef\u6240\u9700\u8981\u7684\u683c\u5f0f\uff0c\u5c01\u88c5\u6210VO\u5bf9\u8c61\u8fd4\u56de\u7ed9\u524d\u7aef\u663e\u793a\u3002<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/mapstruct-%E5%BC%95%E5%85%A52.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/mapstruct-%E5%BC%95%E5%85%A52.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u6240\u4ee5\uff0c\u5728\u5904\u7406\u4e00\u4e2a\u8bf7\u6c42\u7684\u65f6\u5019\u4e1a\u52a1\u5c42\u9700\u8981\u5b8c\u6210PO\u2014&gt;DTO\u5bf9\u8c61\u7684\u8f6c\u5316\uff0c\u63a7\u5236\u5c42\u9700\u8981\u5b8c\u6210DTO\u2014&gt;VO\u5bf9\u8c61\u7684\u8f6c\u5316\u3002\u800c\u5bf9\u8c61\u8f6c\u5316\u672c\u8eab\u5c31\u662f\u7eaf\u7cb9\u7684\u201c\u4f53\u529b\u6d3b\u201d\u6ca1\u6709\u4efb\u4f55\u6280\u672f\u542b\u91cf\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  \/\/ \u5f85\u8f6c\u5316\u7684PO\u5bf9\u8c61 \n  XxxPO sourcePO = ...\n  \n  \/\/ \u76ee\u6807DTO\u5bf9\u8c61\n  XxxDTO destDTO = new XxxDTO();\n  \n  \/\/\u901a\u8fc7\u4e00\u5806get\/set\u65b9\u6cd5\u5b8c\u6210\u8f6c\u5316\n  destDTO.setXxx(sourcePO.getXxx());\n  ...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bf9\u4e8e\u8fd9\u79cd\u6ca1\u6709\u6280\u672f\u542b\u91cf\u7684\u6d3b\uff0c\u6709\u8ffd\u6c42\u7684\u7a0b\u5e8f\u5458\u662f\u4e0d\u5c51\u505a\u7684\uff0c\u4f46\u662f\u5728\u9879\u76ee\u4e2d\u6211\u4eec\u53c8\u5fc5\u987b\u8981\u5b8c\u6210\uff0c\u600e\u4e48\u529e\u5462\uff1f\u4e8e\u662f\u5c31\u6709\u4e86Mapstruct\u6765\u5e2e\u6211\u4eec\u5b8c\u6210\u5bf9\u8c61\u8f6c\u5316\u7684\u5de5\u4f5c\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4f7f\u7528<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5bfc\u5165\u4f9d\u8d56<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependencies&gt; \n    &lt;dependency&gt;\n        &lt;groupId&gt;org.projectlombok&lt;\/groupId&gt;\n        &lt;artifactId&gt;lombok&lt;\/artifactId&gt;\n        &lt;version&gt;1.18.24&lt;\/version&gt;\n    &lt;\/dependency&gt;\n\t&lt;dependency&gt; \n\t&lt;groupId&gt;org.mapstruct&lt;\/groupId&gt; \n\t\t&lt;artifactId&gt;mapstruct&lt;\/artifactId&gt; \n\t\t&lt;version&gt;1.5.5.Final&lt;\/version&gt; \n\t&lt;\/dependency&gt; \n\t&lt;dependency&gt; \n\t\t&lt;groupId&gt;org.mapstruct&lt;\/groupId&gt; \n\t\t&lt;artifactId&gt;mapstruct-processor&lt;\/artifactId&gt; \n\t\t&lt;version&gt;1.5.5.Final&lt;\/version&gt;\n\t&lt;\/dependency&gt; \n&lt;\/dependencies&gt;\n\n&lt;build&gt;\n      &lt;plugins&gt;\n            &lt;plugin&gt;\n                &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n                &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;\n                &lt;version&gt;3.8.1&lt;\/version&gt;\n                &lt;configuration&gt;\n                    &lt;source&gt;17&lt;\/source&gt;\n                    &lt;target&gt;17&lt;\/target&gt;\n                    &lt;annotationProcessorPaths&gt;\n                        &lt;path&gt;\n                            &lt;groupId&gt;org.mapstruct&lt;\/groupId&gt;\n                            &lt;artifactId&gt;mapstruct-processor&lt;\/artifactId&gt;\n                            &lt;version&gt;1.5.5.Final&lt;\/version&gt;\n                        &lt;\/path&gt;\n                        &lt;path&gt;\n                            &lt;groupId&gt;org.projectlombok&lt;\/groupId&gt;\n                            &lt;artifactId&gt;lombok&lt;\/artifactId&gt;\n                            &lt;version&gt;1.18.24&lt;\/version&gt;\n                        &lt;\/path&gt;\n                        &lt;path&gt;\n                            &lt;groupId&gt;org.projectlombok&lt;\/groupId&gt;\n                            &lt;artifactId&gt;lombok-mapstruct-binding&lt;\/artifactId&gt;\n                            &lt;version&gt;0.2.0&lt;\/version&gt;\n                        &lt;\/path&gt;\n                    &lt;\/annotationProcessorPaths&gt;\n                &lt;\/configuration&gt;\n            &lt;\/plugin&gt;\n        &lt;\/plugins&gt;\n    &lt;\/build&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49\u8f6c\u5316\u5668\u63a5\u53e3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Mapper(componentModel = \"spring\") \npublic interface XxxConverter {\n   \/\/ \u5b9a\u4e49\u8f6c\u5316\u65b9\u6cd5\u5c06source\u539f\u5bf9\u8c61\u8f6c\u5316\u4e3a\u76ee\u6807\u5bf9\u8c61\n   \u76ee\u6807\u7c7b \u65b9\u6cd5\u540d(\u5f85\u8f6c\u5316\u7c7b source);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528\u5b9a\u4e49\u7684\u8f6c\u5316\u5668\u63a5\u53e3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>   @Autowired\n   XxxConverter xxxConverter;\n\n    @Test\n    public void testMapStruct() {\n     \u76ee\u6807\u7c7b dest = xxxConverter.\u65b9\u6cd5(users);\n    }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u7b80\u5355\u5bf9\u8c61\u7684\u8f6c\u5316<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\npublic class Doctor {\n    private int id;\n    private String name;\n}\n@Data\npublic class DoctorDTO {\n    private int id;\n    private String name;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6e90\u5bf9\u8c61(Doctor)\u548c\u76ee\u6807\u5bf9\u8c61(DoctorDTO)\u7684\u5c5e\u6027\u5b8c\u5168\u76f8\u540c\uff0c\u6211\u4eec\u53ef\u4ee5\u7b80\u5355\u5b9a\u4e49\u8f6c\u5316\u5668\u63a5\u53e3\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Mapper(componentModel = \"spring\")\npublic interface DoctorConverter {\n    DoctorDTO doctorPO2DTO(Doctor doctor);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u7136\u540e\u518d\u9700\u8981\u7684\u5730\u65b9\u6ce8\u5165Converter\u5bf9\u8c61\uff0c\u8c03\u7528\u8f6c\u5316\u65b9\u6cd5\u5373\u53ef<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>   @Autowired\n   DocterConverter docterConverter;\n\n    @Test\n    public void testSimpleObj() {\n     Doctor docter = ...\n     \/\/ \u5b8c\u6210\u8f6c\u5316\n     DoctorDTO destDTO = docterConverter.doctorPO2DTO(docter);\n    }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e0d\u540c\u5c5e\u6027\u540d\u7684\u6620\u5c04<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5047\u8bbe\u6211\u4eec\u7ed9\u533b\u751f\u589e\u52a0\u4e00\u4e2a\u85aa\u8d44\u5c5e\u6027\uff0c\u8be5\u5c5e\u6027\u5728Doctor\u7c7b\u4e2d\u53ebpay\uff0c\u5728DoctorDTO\u4e2d\u53ebsalary\uff0c\u5c5e\u6027\u540d\u4e0d\u4e00\u81f4\uff0c\u6211\u4eec\u4ecd\u7136\u53ef\u4ee5\u5b8c\u6210\u8f6c\u5316<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\npublic class Doctor {\n    private Integer id;\n    private String name;\n    \/\/ \u85aa\u8d44\n    private String pay;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\npublic class DoctorDTO {\n    private Integer id;\n    private String name;\n    \/\/ \u85aa\u8d44\n    private String salary;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49\u8f6c\u5316\u5668\u63a5\u53e3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Mapper(componentModel = \"spring\")\npublic interface DoctorConverter {\n    @Mapping(source=\"pay\", target=\"salary\")\n    DoctorDTO doctorPO2DTO(Doctor doctor);\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>@Autowired\nDocterConverter docterConverter;\n\n@Test\npublic void testFieldMappingObj() {\n  Doctor doctor = ...\n    \/\/ \u5b8c\u6210\u8f6c\u5316\n    DoctorDTO destDTO = docterConverter.doctorPO2DTO(docter);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u591a\u4e2a\u4e0d\u540c\u7c7b\u578b\u6e90\u5bf9\u8c61\u7684\u8f6c\u5316<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6709\u65f6\u5019\u5728\u8f6c\u5316\u4e00\u4e2a\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u6d89\u53ca\u53e6\u5916\u7684\u591a\u4e2a\u5bf9\u8c61\u7684\u5c5e\u6027\u503c\uff0c\u6b64\u65f6\u6211\u4eec\u5c31\u53ef\u4ee5\u628a\u591a\u4e2a\u5bf9\u8c61\u7684\u5c5e\u6027\u503c\uff0c\u8d4b\u503c\u7ed9\u76ee\u6807\u5bf9\u8c61<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\npublic class Education {\n    \/\/ \u5b66\u4f4d\n    private String degreeName;\n    \/\/ \u5b66\u6821\n    private String institute;\n    \/\/ \u6bd5\u4e1a\u5e74\u4efd\n    private Integer yearOfPassing;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\n@Data\npublic class Doctor {\n    private int id;\n    private String name;\n    \/\/ \u85aa\u8d44\n    private String pay;\n}\n\n@Data\npublic class DoctorDto {\n    private int id;\n    private String name;\n    \/\/ \u5b66\u5386\n    private String degree;\n    private String salary;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49\u8f6c\u5316\u5668\u63a5\u53e3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Mapper(componentModel = \"spring\")\npublic interface DoctorConverter {\n    \/\/ \u591a\u4e2a\u6e90\u5bf9\u8c61\u7684\u8bdd\uff0c\u5728\u6307\u5b9a\u6e90\u5bf9\u8c61\u5c5e\u6027\u65f6 \u901a\u8fc7\u5bf9\u8c61\u540d.\u5c5e\u6027\u540d\u7684\u65b9\u5f0f\u6307\u5b9a\n    @Mapping(source = \"doctor.id\", target = \"id\")\n    @Mapping(source = \"doctor.name\", target = \"name\")\n    @Mapping(source = \"doctor.pay\", target = \"salary\")\n    @Mapping(source = \"education.degreeName\", target = \"degree\")\n    DoctorDTO doctorPO2DTO(Doctor doctor, Education education);\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>   @Autowired\n   DocterConverter docterConverter;\n\n    @Test\n    public void testFieldMappingObj() {\n     Doctor doctor = ...\n     Education education = ...\n     \/\/ \u5b8c\u6210\u8f6c\u5316\n     DoctorDTO destDTO = docterConverter.doctorPO2DTO(docter, education);\n    }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u8f6c\u5316\u590d\u6742\u5bf9\u8c61<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4e00\u4e2a\u5bf9\u8c61\u6301\u6709\u4e86\u53e6\u5916\u4e00\u4e2a\u5bf9\u8c61\uff0c\u6216\u8005\u53e6\u5916\u4e00\u4e2a\u5bf9\u8c61\u7684List\uff0cMapstruct\u8fd8\u53ef\u4ee5\u5e2e\u6211\u4eec\u5b9e\u73b0\u7c7b\u4f3c\u201c\u6df1\u5ea6\u514b\u9686\u201d\u7684\u201d\u6df1\u5ea6\u8f6c\u5316\u201c\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\npublic class Patient {\n    private int id;\n    private String name;\n}\n\n@Data\npublic class PatientDTO {\n    private int id;\n    private String name;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Doctor {\n    private int id;\n    private String name;\n    private String pay;\n    \/\/ \u533b\u751f\u6709\u60a3\u8005\n    private Patient patient;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class DoctorDTO {\n    private int id;\n    private String name;\n    private String salary;\n    \/\/ \u533b\u751f\u6709\u60a3\u8005\n    private PatientDTO patientDTO;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49\u8f6c\u5316\u5668Converter<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Mapper(componentModel = \"spring\")\npublic interface DoctorConverter {\n    @Mapping(source=\"pay\", target=\"salary\")\n    DoctorDTO doctorPO2DTO(Doctor doctor);\n\n    PatientDTO patientPO2DTO(Patient patient);\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>@Autowired\nDocterConverter docterConverter;\n\n@Test\npublic void testComplicatedObj() {\n  Doctor doctor = ...\n    Patient patient = ...\n    doctor.setPatient(patient);\n  \/\/ \u5b8c\u6210\u8f6c\u5316\n  DoctorDTO destDTO = docterConverter.doctorPO2DTO(docter);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u91cc\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728Doctor\u5bf9\u8c61\u6301\u6709\u4e86\u4e00\u4e2aPatient\uff0c\u4f46\u662f\u5f53\u6211\u4eec\u8c03\u7528Converter\u8f6c\u5316\u5668\u7684doctorPO2DTO\u65b9\u6cd5\u65f6\uff0cMapstruct\u5728\u8f6c\u5316Doctor\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u4e5f\u4f1a\u628aPatient\u5bf9\u8c61\u8f6c\u5316\u4e3aPatientDTO\u5bf9\u8c61\u3002\u539f\u56e0\u662f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6211\u4eec\u5728Converter\u8f6c\u5316\u5668\u4e2d\u5b9a\u4e49\u4e86\u5982\u4e0b\u8f6c\u5316\u65b9\u6cd5<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code> PatientDTO patientPO2DTO(Patient patient);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f53\u8f6c\u5316\u5668\u5728Converter\u5728\u6267\u884ccomplicatedDoctorPO2DTO\u65b9\u6cd5\u8f6c\u5316Doctor\u5bf9\u8c61\u7684\u8fc7\u7a0b\u4e2d\uff0c\u9047\u5230Patient patient\u5c5e\u6027\u65f6\uff0cConverter\u4f1a\u201c\u81ea\u52a8\u53d1\u73b0\u201dpatientPO2DTO\u65b9\u6cd5\uff0c\u5c06\u6e90\u5bf9\u8c61\u4e2d\u7684Patient \u5bf9\u8c61\u8f6c\u5316\u4e3aPatientDTO\u5bf9\u8c61<\/li>\n\n\n\n<li>\u201c\u81ea\u52a8\u53d1\u73b0\u201d\u5176\u5b9e\u5c31\u662f\u7528Doctor\u7684\u6e90\u5bf9\u8c61\u76ee\u6807\u5c5e\u6027patient\u7684\u7c7b\u578b\uff0c\u548c\u67d0\u4e2aConverter\u8f6c\u5316\u5668\u4e2d\u65b9\u6cd5\u7684\u5165\u53c2\u505a\u7c7b\u578b\u5339\u914d\uff0c\u540c\u65f6\uff0c\u7528\u76ee\u6807\u5bf9\u8c61\u7684\u76ee\u6807\u5c5e\u6027patientDTO\u548c\u8be5\u65b9\u6cd5\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u505a\u7c7b\u578b\u5339\u914d<\/li>\n\n\n\n<li>\u5982\u679c\u7c7b\u578b\u90fd\u5339\u914d\u4e0a\u4e86\uff0c\u5c31\u4f1a\u81ea\u52a8\u4f7f\u7528\u8fd9\u4e2a\u8f6c\u5316\u5668\u65b9\u6cd5\u6765\u5b8c\u6210\u6e90\u5bf9\u8c61\u5c5e\u6027\u548c\u76ee\u6807\u5bf9\u8c61\u5c5e\u6027\u4e4b\u95f4\u7684\u8f6c\u5316<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/mapstruct%E5%A4%8D%E6%9D%82%E5%AF%B9%E8%B1%A1%E6%98%A0%E5%B0%84.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"http:\/\/118.25.99.91\/courses\/web\/project\/assets\/note\/image\/02-%E6%8C%81%E4%B9%85%E5%B1%82-MyBatis-Plus%E4%B8%8EMapStruct\/mapstruct%E5%A4%8D%E6%9D%82%E5%AF%B9%E8%B1%A1%E6%98%A0%E5%B0%84.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5176\u5b9e\uff0c\u5f53Doctor\u5bf9\u8c61\u4e2d\u6709\u5c5e\u6027List&nbsp;patientList\uff0c DoctorDTO\u5bf9\u8c61\u4e2d\u6709\u5c5e\u6027List&nbsp;\u7684\u65f6\u5019Mapstrut\u4e5f\u4f1a\u5bf9List\u4e2d\u7684\u5bf9\u8c61\u7c7b\u578b\u548c\u8f6c\u5316\u5668\u65b9\u6cd5\u7684\u5165\u53c2\u548c\u8fd4\u56de\u503c\u7c7b\u578b\uff0c\u505a\u7c7b\u578b\u5339\u914d\uff0c\u4ece\u800c\u4f7f\u7528patientPO2DTO\u65b9\u6cd5\uff0c\u5b8c\u6210\u5c06List&nbsp;patientList\u8f6c\u5316\u4e3aList\u7684\u5de5\u4f5c\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8f6c\u5316List<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>@Data\npublic class Doctor {\n    private int id;\n    private String name;\n    \/\/ \u85aa\u8d44\n    private String pay;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>public class DoctorDTO {\n    private int id;\n    private String name;\n    private String salary;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u6211\u4eec\u60f3\u4e00\u6b21\u6027\u7684\u5c06\u591a\u4e2aDoctor\u5bf9\u8c61\u8f6c\u5316\u6210\u591a\u4e2aDoctorDTO\u5bf9\u8c61\uff0c\u6b64\u65f6\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u5982\u4e0bConverter\u8f6c\u5316\u5668\u65b9\u6cd5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Mapper(componentModel = \"spring\")\npublic interface DoctorConverter {\n    @Mapping(source=\"pay\", target=\"salary\")\n    DoctorDTO doctorPO2DTO(Doctor doctor);\n\n    List&lt;DoctorDTO&gt; doctorPOs2DTOs(List&lt;Doctor&gt; doctors);\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>@Autowired\nDocterConverter docterConverter;\n\n@Test\npublic void testFieldMappingObj() {\n  List&lt;Doctor&gt; doctor = ...\n    \/\/ \u5b8c\u6210\u8f6c\u5316\n    List&lt;DoctorDTO&gt; destDTOs = docterConverter.doctorPOs2DTOs(docter);\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>MyBatis-Plus\uff08\u7b80\u79f0 MP\uff09\u662f\u4e00\u4e2a MyBatis\u7684\u589e\u5f3a\u5de5\u5177(\u5355\u8868\u7684\u8bbf\u95ee)\uff0c\u5728 MyBatis \u7684\u57fa [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[14,17],"class_list":["post-273","post","type-post","status-publish","format-standard","hentry","category-learn","tag-14","tag-17"],"_links":{"self":[{"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/posts\/273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/comments?post=273"}],"version-history":[{"count":1,"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/posts\/273\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/posts\/273\/revisions\/275"}],"wp:attachment":[{"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/media?parent=273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/categories?post=273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/larkdrop.cafe\/index.php\/wp-json\/wp\/v2\/tags?post=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}