【Mybatis】mybatis-plus簡単まとめ

7054 ワード

新年おめでとうございます.新しい年の私の座右の銘は:勉強は難しいことではありません.難しいのは毎日勉強することです.2020年にしっかりと自分を計画して、前進を続けます!
Mybatis Plus簡単まとめ
プロジェクトではmybatisをormフレームワークとして使用することが多く、Mybatis plusと組み合わせて使用することが多い.
Mybatis Plusとは何ですか?
MyBatis-Plus(略称MP)はMyBatisのエンハンスメントツールであり、MyBatisをベースにエンハンスメントのみを行い変更せず、開発を簡素化し、効率を向上させるために生まれた.簡単に言えばMybatis Plusは開発者の生産性を高めただけで、本当にデータベースとインタラクティブなのはMybatisです.
Quick start
  • データベースmybatis_plusおよびuserテーブル
  • を作成する.
    CREATE TABLE user
    (
        id BIGINT(20) NOT NULL COMMENT '  ID',
        name VARCHAR(30) NULL DEFAULT NULL COMMENT '  ',
        age INT(11) NULL DEFAULT NULL COMMENT '  ',
        email VARCHAR(50) NULL DEFAULT NULL COMMENT '  ',
        PRIMARY KEY (id)
    );
    DELETE FROM user;
    ​
    INSERT INTO user (id, name, age, email) 
    VALUES
    (1, 'Jone', 18, '[email protected]'),
    (2, 'Jack', 20, '[email protected]'),
    (3, 'Tom', 28, '[email protected]'),
    (4, 'Sandy', 21, '[email protected]'),
    (5, 'Billie', 24, '[email protected]');
  • Spring Bootプロジェクトを迅速に構築しpom.xmlに以下の依存
  • を加える
           
                mysql
                mysql-connector-java
            
          
                com.baomidou
                mybatis-plus-boot-starter
                3.0.5
            
  • はアプリケーションにあります.propertiesには、次の構成
  • が追加されています.
    #           mysql 8.0  ,  Driverclass  url       
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
    spring.datasource.username=root
    spring.datasource.password=root
    server.port=8081
    #     
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  • Userエンティティークラス
  • を作成する
    @Data // Lombok
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
    
  • UserMapper
  • を作成する
    import com.amber.learnmore.entity.User;
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import org.springframework.stereotype.Component;
    
    @Component
    public interface UserMapper extends BaseMapper {
    }
    

    UserMapperはBaseMapperを継承していることがわかります.BaseMapperはJpaのRepositoryに相当し、よく使われる方法をパッケージ化しています.
  • Testメソッド
  • の記述
    @SpringBootTest
    class LearnmoreApplicationTests {
        @Autowired
        UserMapper userMapper;
    
        @Test
        void contextLoads() {
            List users = userMapper.selectList(null);
            users.forEach(System.out::println);
        }
    }

    Result:
    
    User(id=1, name=Jone, age=18, [email protected])
    User(id=2, name=Jack, age=20, [email protected])
    User(id=3, name=Tom, age=28, [email protected])
    User(id=4, name=Sandy, age=21, [email protected])
    User(id=5, name=Billie, age=24, [email protected])

    簡単じゃないですか、自分で比較的簡単なSQLを書く必要はありません.
    Mybatis Plus Insert
      @Test
        void insert() {
            User user = new User();
            user.setName("Helen");
            user.setAge(16);
            user.setEmail("[email protected]");
            int result = userMapper.insert(user);
            System.out.println(result);
            System.out.println(user);
        }

    Result:
    1
    User(id=1213699960072052738, name=Helen, age=16, [email protected])

    挿入に成功し、idに自動的に値を付与していることがわかります.これはどういうことですか.MPは自動的にIdWorkerをカプセル化してくれたからですjava.分布式の子供靴を習ったことがあると信じています.これはよく知られていません.私たちが挿入したときに自分がプライマリ・キーSetの値になります.では、idWorkを使用してidを生成したくない場合はどうすればいいのでしょうか.
    id生成ポリシー
    Userを変更します.java
        @TableId(type = IdType.AUTO)
        private Long id;

    IdTypeは以下の6種類が可能です.
        AUTO(0),    
        NONE(1),            
        INPUT(2),     
        ID_WORKER(3),    ,      id 
        UUID(4), UUID
        ID_WORKER_STR(5);  //        ID

    Update
    updateも実は簡単です
        @Test
        void update() {
            User user = userMapper.selectById(1);
            user.setName("amber");
            int i = userMapper.updateById(user);
            System.out.println(i);
        }

    重点自動塗りつぶし
    Insertとupdateの場合、create_をデフォルトで挿入することがよくあります.time,update_time,is_deleted. Userテーブルの変更
    ALTER TABLE `mybatis_plus`.`user` 
    ADD COLUMN `create_time` DATETIME NULL AFTER `email`,
    ADD COLUMN `update_time` DATETIME NULL AFTER `create_time`,
    ADD COLUMN `is_deleted` TINYINT(1) NULL AFTER `update_time`;

    UserMetaObjectHandlerの追加MetaObjectHandlerの実装
    @Component
    public class UserMetaObjectHandler implements MetaObjectHandler {
    
        @Override
        public void insertFill(MetaObject metaObject) {
            this.setFieldValByName("createTime", new Date(), metaObject);
            this.setFieldValByName("isDeleted", false, metaObject);
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("updateTime", new Date(), metaObject);
        }
    }

    Userを追加します.JAvaフィールド
        @TableField(fill = FieldFill.INSERT) //            
        private Date createTime;
        @TableField(fill = FieldFill.UPDATE) //          
        private Date updateTime;
        @TableField(fill = FieldFill.INSERT)
        private BooleanisDeleted;

    Insertメソッドとupdateメソッドを再実行すればよい
    Delete
        @Test
        void delete() {
            //          ,        
            userMapper.deleteById(3L);
        }

    Select
    実はselectも簡単でmybatis plusが提供している方法を見ればわかります
  • idクエリ
  • を介して
    @Test
        public void testSelectById(){
    ​
            User user = userMapper.selectById(1L);
            System.out.println(user);
        }
  • idバッチクエリ
  • @Test
    public void testSelectBatchIds(){
    ​
        List users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        users.forEach(System.out::println);
    }
  • 条件クエリはMap
  • を通過する
        @Test
        void testSelectByMap() {
            Map map = new HashMap<>();
            map.put("name", "helen");
            List users = userMapper.selectByMap(map);
            users.forEach(System.out::println);
        }
  • ページングクエリ
  • @Test
        void testSelectByPage() {
            Page page = new Page(1, 2);
            userMapper.selectPage(page, null);
            List records = page.getRecords();
            records.forEach(System.out::println);
            System.out.println(page.getCurrent());//   
            System.out.println(page.getPages());//   
            System.out.println(page.getSize());//       
            System.out.println(page.getTotal());//    
            System.out.println(page.hasNext());//      
            System.out.println(page.hasPrevious());//      
        }