开源框架-Mybatis系列

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

2020-08-16  本文已影响0人  AbstractCulture

环境要求

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);
    }

}
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
        <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;
    }
}
public class ActivityServiceImpl extends ServiceImpl<ActivityMapper,ActivityEntity> implements ActivityService
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

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

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

    @TableField("user_name_a")
    private String userName;

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

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

    @TableField(exist=false)
    private String remark;
上一篇下一篇

猜你喜欢

热点阅读