10、SpringBoot -集成MP-基础

一、Mybatis-Plus简介

官方网站
Mybatis-Plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段,是对Mybatis的增强。
愿景:我们的愿景是成为 MyBatis 最好的搭档,基友搭配,效率翻倍
他主要的特点:

  • 无侵入,损耗小
  • 通用CRUD操作,支持分页操作
  • 预防Sql注入,支持多种数据库
  • 支持ActiveRecord支持代码生成等等

二、前期准备工作

导入相关jar包

    <properties>
        <java.version>1.8</java.version>
        <mybatis-plus.starter.version>2.1.5</mybatis-plus.starter.version>
        <mybatis.starter.version>2.0.1</mybatis.starter.version>
        <druid.starter.version>1.1.20</druid.starter.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.starter.version}</version>
        </dependency>
        <!--  添加MP依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
       </dependency>
        <!--  lombok 工具包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.starter.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

sql语句

--  数据库名 db_boot_example
DROP TABLE IF EXISTS user;
CREATE TABLE `user`
(
    `uid`        INT(11) PRIMARY KEY AUTO_INCREMENT COMMENT '用户Id',
    `username`   VARCHAR(100) NOT NULL COMMENT '用户名',
    `password`   VARCHAR(128) NOT NULL COMMENT '密码',
    `phone`      VARCHAR(11)  DEFAULT NULL COMMENT '手机',
    `sex`        TINYINT(1)   DEFAULT 1 COMMENT '性别 1 表示男 0 表示女',
    `email`      VARCHAR(100) NOT NULL COMMENT '邮箱',
    `mark`       VARCHAR(100) DEFAULT NULL COMMENT '备注',
    `last_login` TIMESTAMP    DEFAULT current_timestamp NOT NULL COMMENT '最后一次登录时间',
    `login_ip`   VARCHAR(30)  DEFAULT NULL COMMENT '登录ip',
    `head`       VARCHAR(100) DEFAULT '/img/default.png' COMMENT '头像图片路径',
    `reg_time`   TIMESTAMP    DEFAULT current_timestamp NOT NULL COMMENT '注册时间',
    `locked`     TINYINT(1)   DEFAULT 0 COMMENT '账号是否被锁定 1 表示未锁定 0 表示锁定',
    UNIQUE KEY `uk_u_name` (`username`),
    UNIQUE KEY `uk_u_phone` (`phone`),
    UNIQUE KEY `uk_u_email` (`email`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8;

entity

@Data
public class User {
    /**
     * 用户Id
     */
    private Integer uid;
    /**
     * 用户名
     */
    private String username;
    /**
     * 密码
     */
    private String password;
    /**
     * 手机
     */
    private String phone;
    /**
     * 性别 1 表示男 0 表示女
     */
    private Boolean sex;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 备注
     */
    private String mark;
    /**
     * 最后一次登录时间
     */
    private Date lastLogin;
    /**
     * 登录ip
     */
    private String loginIp;
    /**
     * 头像图片路径
     */
    private String head;
    /**
     * 注册时间
     */
    private Date regTime;
    /**
     * 账号是否被锁定 1 表示未锁定 0 表示锁定
     */
    private Boolean locked;
}

application-mp.yml

spring:
  datasource:
    # 初始化线程池数量  最大数  最小数
    type: com.alibaba.druid.pool.DruidDataSource
    # 驱动包 8.0以上的配置
    # =========== durid 连接池配置===========
    druid:
      #===========JDBC 配置===========
      url: jdbc:mysql://localhost:3306/db_boot_example?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
      username: root
      password: root
      initial-size: 5
      max-active: 20
      min-idle: 3
# 打印SQL日志
logging:
  level:
    com.vp.example.mapper: trace
server:
  port: 8000
  servlet:
    context-path: /api
  address: 127.0.0.1
# ========MP配置 无需配置mybatis了============
mybatis-plus:
  # 如果是放在src/main/java目录下 classpath:/com/你的包名/*/mappers/*.xml
  # 如果放在 src/main/resources 下
  mapper-locations: classpath:/mappers/**/*.xml
  # 实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.vp.example.*.entity
  global-config:
    db-config:
      # 主键类型
      id-type: auto
      #驼峰下划线转换
      table-underline: true
      logic-delete-value: 1
      logic-not-delete-value: 0
  configuration:
    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置JdbcTypeForNull, oracle数据库必须配置
    jdbc-type-for-null: 'null'

更多mybatis.plus详细说明请看官方文档

UserMapper

//  继承Mybatis Plus提供的BaseMapper
public interface UserMapper extends BaseMapper<User> {
}

程序入口

@SpringBootApplication
@MapperScan("com.vp.example.mapper")
public class ExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}

三、基本操作CURD

添加操作

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperTest {
    @Resource
    UserMapper userMapper;
    @Test
    public void save() {
        User user = new User();
        user.setUsername("qq123456");
        user.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
        user.setPhone("123456789");
        user.setEmail("123456@qq.com");
        userMapper.insert(user);
    }
}

更新操作

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperTest {
    @Resource
    UserMapper userMapper;
    @Test
    public void update() {
        User user = new User();
        user.setUid(1);
        user.setPassword(DigestUtils.md5DigestAsHex("test".getBytes()));
        // 没有值的将不会更新
        userMapper.updateById(user);
    }
}

查询操作

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperTest {
    @Resource
    UserMapper userMapper;
    @Test
    public void findById() {
        User user = userMapper.selectById(1);
        log.error(user.toString());
    }
}

删除操作

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserMapperTest {
    @Resource
    UserMapper userMapper;
    @Test
    public void deleteById() {
        int count = userMapper.deleteById(1);
        log.error("影响的行数:{}",count);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容