美文网首页开源框架-Mybatis系列
MyBatis-Plus环境搭建与基础注解说明

MyBatis-Plus环境搭建与基础注解说明

作者: AbstractCulture | 来源:发表于2020-08-16 23:08 被阅读0次

    环境要求

    1.数据库中建立表结构
    CREATE TABLE `mp` (
      `id` bigint(20) NOT NULL COMMENT '主键ID',
      `activity_id` bigint(20) DEFAULT NULL COMMENT '活动id',
      `activity_name` varchar(30) DEFAULT NULL COMMENT '活动名称',
      `activity_type` int(11) DEFAULT NULL COMMENT '活动类型',
      `count` int(11) DEFAULT NULL COMMENT '活动报名人数',
      `create_time` datetime DEFAULT NULL COMMENT '创建时间',
      PRIMARY KEY (`id`),
      KEY `idx_group_act` (`create_time`,`count`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    注意,我们这里建立的表名是mp,这是我特意写的,目的是待会在实体类中让大家体会一下MP的注解的使用。

    2.构建一个SpringBoot工程

    这里不会展示怎么构建SpringBoot工程,非常的简单,不会的大家可以去百度一下。使用IDEA基本上是下一步点下去就完事了。

    • 启动类
    package com.example.mp;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    /**
     * @author 95152
     */
    @SpringBootApplication
    // 这里填写你的mapper路径,或者你可以通过@Mapper这个注解来声明这是一个Bean
    @MapperScan("com.example.mp.mapper")
    public class MpApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MpApplication.class, args);
        }
    
    }
    
    • yml文件配置
    spring:
      datasource:
        ## 这里说明一下,sakila是我的数据库名称,你们根据你们的来
        url: jdbc:mysql://127.0.0.1:3306/sakila?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: root
    
    logging:
      level:
        root: warn
        ## 这里写你自己的包路径
        com.example.mp.mapper: trace
      pattern:
        console: '%p%m%n'
    server:
      port: 8080
      tomcat:
        uri-encoding: UTF-8
    mybatis-plus:
      configuration:
        ##驼峰下划线之间的转换
        map-underscore-to-camel-case: true
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
    • pom文件
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.6</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.21</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.13</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.2</version>
            </dependency>        
    

    Java实体类

    package com.example.mp.model;
    
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.Data;
    import lombok.Getter;
    import lombok.Setter;
    
    import java.util.Date;
    
    /**
     * @author 95152
     */
    @Data
    @TableName("mp")
    public class ActivityEntity {
    
        /**
         * 主键
         */
        private Long id;
        /**
         * 活动id
         */
        private Long activityId;
        /**
         * 活动名称
         */
        private String activityName;
        /**
         * 活动类型
         */
        private Integer activityType;
        /**
         * 活动报名人数
         */
        private Integer count;
        /**
         * 创建时间
         */
        private Date createTime;
    
        public static ActivityEntity getInstance(Long activityId, String activityName, Integer activityType, Integer count, Date createTime) {
            ActivityEntity activityEntity = new ActivityEntity();
            activityEntity.activityId = activityId;
            activityEntity.activityName = activityName;
            activityEntity.activityType = activityType;
            activityEntity.count = count;
            activityEntity.createTime = createTime;
            return activityEntity;
        }
    }
    
    • ServiceImpl
      这里注意要继承官方的ServiceImpl<M extends BaseMapper<T>, T>接口,第一个参数是你的Mapper,第二个是你的实体类.
    public class ActivityServiceImpl extends ServiceImpl<ActivityMapper,ActivityEntity> implements ActivityService
    
    • Mapper
    public interface ActivityMapper extends BaseMapper<ActivityEntity>
    

    OK,完成上面的步骤,我们就搞好了一个环境去进行demo了.下面让我们开始MP的学习

    基础注解

    下面我们来说说MP中一些重要的概念.

    • 表名映射

    一条简单的SQL是如何映射成正确的SQL语句,那我们知道SQL的查询是select fields from table where conditions这样的形式去构造的,这里面就涉及到表名,在MP中要将你的实体类与数据库中的表映射起来,那么你需要使用@TableName这个注解,声明你的真实数据库名是什么.

    示例:

    @TableName("mp")
    public class ActivityEntity
    
    • 主键策略

    这里只讲默认的策略,MP是根据雪花算法自动生成ID的,如果你有其他需求,可以查看官网的主键策略。一般在实体类中id为Long类型,MP就可以帮你找到你的主键自动生成了。这也就意味着通常请情况下,我们不需要去操作id主键列.
    此外,如果你的主键名不是id,你可以通过@TableId告诉MP你的主键是什么

    示例: 假设你的数据库主键列叫user_id

        /**
         * 主键
         */
        @TableId
        private Long userId;
    

    官网:https://baomidou.com/guide/annotation.html#tableid

    • Field映射

    @TableField解决实体类中的属性名与数据库不一致的注解

    示例: 如果你的数据库字段叫user_name_a

        @TableField("user_name_a")
        private String userName;
    
    • 不参与SQL的Field

    企业中其实更提倡对Entity进行一层封装,即实体类就是与数据库中的表结构一一对应,如果你需要特殊的结果集,你可以自建一个DTO进行映射。
    但是如果你确实需要在Entity中去做一些非DB字段的保留,那么你可以使用MP给你提供的一些策略去做到这件事情。

    • static

    给该字段设置成静态变量,这样MP就会自动忽略它.

    • @TableField
        @TableField(exist=false)
        private String remark;
    

    相关文章

      网友评论

        本文标题:MyBatis-Plus环境搭建与基础注解说明

        本文链接:https://www.haomeiwen.com/subject/jszxjktx.html