MyBatis-Plus是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,使用MyBatis-Plus时,不会影响原来Mybatis方式的使用。

SpringBoot+MyBatis-Plus环境搭建

SQL脚本:

  1. CREATE TABLE `tb_user` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `real_name` varchar(20) DEFAULT NULL,
  4. `email` varchar(50) DEFAULT NULL,
  5. `phone` varchar(20) DEFAULT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  8. INSERT INTO tb_user (real_name,email,phone) VALUES ('小花','cf1@qq.com','18711111111');
  9. INSERT INTO tb_user (real_name,email,phone) VALUES ('小菊','cf2@qq.com','18322222222');
  10. INSERT INTO tb_user (real_name,email,phone) VALUES ('小熊','cf3@qq.com','18133333333');
  11. INSERT INTO tb_user (real_name,email,phone) VALUES ('小虎','cf4@qq.com','18344444444');
  12. INSERT INTO tb_user (real_name,email,phone) VALUES ('小猪','cf5@qq.com','18723232323');

添加依赖如下(不需要额外添加Mybatis的依赖):

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-test</artifactId>
  9. <scope>test</scope>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.baomidou</groupId>
  13. <artifactId>mybatis-plus-boot-starter</artifactId>
  14. <version>3.3.1.tmp</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>mysql</groupId>
  18. <artifactId>mysql-connector-java</artifactId>
  19. <version>5.1.47</version>
  20. </dependency>
  21. </dependencies>

application.yml:

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost/plusdb?useUnicode=true&characterEncoding=UTF-8
  4. username: root
  5. password: 123456
  6. driver-class-name: com.mysql.jdbc.Driver
  7. #在控制台打印SQL语句,com.cf.mpdm.mapper为存放mapper接口的包名
  8. logging:
  9. level:
  10. com.cf.mpdm.mapper: debug

主程序类:

  1. package com.cf.mpdm;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. //指定扫描mapper接口的包路径
  6. @MapperScan("com.cf.mpdm.mapper")
  7. @SpringBootApplication
  8. public class MpdmApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(MpdmApplication.class, args);
  11. }
  12. }

UserMapper接口:

  1. package com.cf.mpdm.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.cf.mpdm.entity.User;
  4. public interface UserMapper extends BaseMapper<User> {
  5. }

UserMapper接口需要继承BaseMapper接口,并且指定泛型为表对应的实体类。

实体类User:

  1. package com.cf.mpdm.entity;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableId;
  4. import com.baomidou.mybatisplus.annotation.TableName;
  5. //表名tb_user带tb_前缀,和实体类类名User不匹配,所以需要使用@TableName指定表名
  6. @TableName("tb_user")
  7. public class User {
  8. //指定主键生成策略为自动增长
  9. @TableId(type = IdType.AUTO)
  10. private Integer id;
  11. private String realName;
  12. private String email;
  13. private String phone;
  14. //get/set ...
  15. }

MyBatis-Plus默认使用下划线命名到驼峰命名的映射规则来处理表和实体类类名以及表的列名和实体类字段的映射。当默认规则不适用时,则需要通过额外的配置来处理映射,如可以使用注解@TableName来指定表名,使用@TableId和@TableField来指定主键列和非主键列的列名。

@TableId还可以指定主键的生成策略,默认生成策略为NONE,表示无状态,未设置主键类型。其他策略详见IdType

当多数表具有相同的前缀或者相同的主键生成策略时,可以使用全局配置指定表前缀和主键策略,而无需一个个手动添加注解,当然少数特殊的还是可以通过注解的方式来指定,application.yml:

  1. mybatis-plus:
  2. global-config:
  3. db-config:
  4. # 指定主键生成策略为自动增长
  5. idType: AUTO
  6. # 指定表前缀
  7. tablePrefix: tb_

基本的CRUD操作

  1. package com.cf.mpdm;
  2. import com.cf.mpdm.entity.User;
  3. import com.cf.mpdm.mapper.UserMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;
  10. @SpringBootTest
  11. class MpdmApplicationTests {
  12. @Autowired
  13. private UserMapper userMapper;
  14. @Test
  15. public void testInsert(){
  16. //INSERT INTO tb_user ( real_name, email, phone ) VALUES ( ?, ?, ? )
  17. User user = new User();
  18. user.setRealName("小兰");
  19. user.setEmail("xiaolan@qq.com");
  20. user.setPhone("18700000000");
  21. userMapper.insert(user);
  22. //插入成功时,默认会将主键的值回写到实体类中去
  23. System.out.println(user.getId());
  24. }
  25. @Test
  26. public void testDelete(){
  27. //根据主键ID删除记录
  28. //DELETE FROM tb_user WHERE id=?
  29. userMapper.deleteById(6);
  30. //根据id列表批量删除记录
  31. //DELETE FROM tb_user WHERE id IN ( ? , ? )
  32. /*List<Integer> idList = new ArrayList<>();
  33. idList.add(12);
  34. idList.add(13);
  35. userMapper.deleteBatchIds(idList);*/
  36. //根据条件来删除记录,如根据real_name来删除记录,columnMap的Key必须为表中的字段名,而不是实体类中的字段名。
  37. //DELETE FROM tb_user WHERE real_name = ?
  38. /*Map<String, Object> columnMap = new HashMap<>();
  39. columnMap.put("real_name", "小花");
  40. userMapper.deleteByMap(columnMap);*/
  41. }
  42. @Test
  43. public void testUpdate(){
  44. //根据主键id更新记录
  45. //UPDATE tb_user SET real_name=? WHERE id=?
  46. User user = new User();
  47. user.setId(2);
  48. user.setRealName("欧皓辰");
  49. userMapper.updateById(user);
  50. }
  51. @Test
  52. public void testSelect(){
  53. //根据主键id查询记录
  54. //SELECT id,real_name,email,phone FROM tb_user WHERE id=?
  55. /*User user = userMapper.selectById(3);
  56. System.out.println(user.getRealName());*/
  57. //根据id列表查询对应记录
  58. //SELECT id,real_name,email,phone FROM tb_user WHERE id IN ( ? , ? )
  59. /*List<Integer> idList = new ArrayList<>();
  60. idList.add(3);
  61. idList.add(4);
  62. List<User> userList = userMapper.selectBatchIds(idList);
  63. System.out.println(userList.size());*/
  64. //根据条件来查询对应记录
  65. //SELECT id,real_name,email,phone FROM tb_user WHERE real_name = ?
  66. Map<String, Object> columnMap = new HashMap<>();
  67. columnMap.put("real_name", "小兰");
  68. List<User> userList = userMapper.selectByMap(columnMap);
  69. System.out.println(userList.size());
  70. }
  71. }

关于使用mapper.xml的一些配置

  1. mybatis-plus:
  2. #指定Mapper所对应的XML文件位置
  3. mapperLocations: classpath:mapper/*.xml
  4. #指定别名包扫描路径,通过该属性可以给包中的类注册别名,注册后在 Mapper 对应的 XML 文件中可以直接使用类名,而不用使用全限定的类名
  5. typeAliasesPackage: com.cf.mpdm.entity

MyBatis-Plus学习笔记(1):环境搭建以及基本的CRUD操作的更多相关文章

  1. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

  2. Mybatis学习笔记之---环境搭建与入门

    Mybatis环境搭建与入门 (一)环境搭建 (1)第一步:创建maven工程并导入jar包 <dependencies> <dependency> <groupId&g ...

  3. 我的Java学习笔记 -开发环境搭建

    开始学习Java~ 一.Java简介 Java编程语言是一种简单.面向对象.分布式.解释型.健壮安全.与系统无关.可移植.高性能.多线程和动态的语言. Java分为三个体系: JavaSE(J2SE) ...

  4. Django学习笔记 开发环境搭建

    为什么使用django?1.支持快速开发:用python开发:数据库ORM系统,并不需要我们手动地构造SQL语句,而是用python的对象访问数据库,能够提升开发效率.2.大量内置应用:后台管理系统a ...

  5. cocos2d-x lua 学习笔记(1) -- 环境搭建

    Cocos2d-x 3.0以上版本的环境搭建和之前的Cocos2d-x 2.0 版差异较大的,同时从Cocos2d-x 3.0项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后, ...

  6. go 学习笔记之环境搭建

    千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意 ...

  7. SpringData JPA的学习笔记之环境搭建

    一.环境搭建 1.加入jar包   spring jar+jpa jar +springData jar >>SpringData jar包     2.配置applicationCont ...

  8. 前端框架vue学习笔记:环境搭建

    兼容性 不兼容IE8以下 Vue Devtools 能够更好的对界面进行审查和调试 环境搭建 1.nodejs(新版本的集成了npm)[npm是node包管理 node package manager ...

  9. Web安全测试学习笔记 - vulhub环境搭建

    Vulhub和DVWA一样,也是开源漏洞靶场,地址:https://github.com/vulhub/vulhub 环境搭建过程如下: 1. 下载和安装Ubuntu 16.04镜像,镜像地址:htt ...

随机推荐

  1. Servlet 会话

    在网络的七层模型中,会话层位于传输层之上,它定义如何开始.控制和结束一个会话.七层模式目前仅仅处于理论阶段,但是Web中借鉴了其中的一些思路.在Web中浏览器第一次发送请求到服务器开始直到一方断开为止 ...

  2. MindV编入微软云计算中小企业解决方案

    鹰翔MindV思维导图软件基于云计算,曾作为windows azure云计算的一个样例介绍,收入中小企业解决方案中.http://www.microsoft.com/hk/smb/cloud/azur ...

  3. [wireshark] ip filter

    查ip 时,使用 ip==10.224.37.18 发现无效 使用 ip.dst, 查到了 Match destination: ip.dst == x.x.x.x Match source: ip. ...

  4. Selenium3+Python3环境搭建

    安装python 官网直接下载当前最新版的python Python官网地址:https://www.python.org/ 百度搜索Python3.6安装步骤 Python安装步骤:自行百度,暂不提 ...

  5. appium+ios+macaca自动化测试环境部署

    环境准备(供参考) mac v10.14.4 xcode v10.2 python v3.6 确保上述环境已满足,即可开始搭建appium+ios测试环境 1 jdk安装 下载mac版本的jdk并安装 ...

  6. $POJ2411\ Mondriaan's\ Dream$ 状压+轮廓线$dp$

    传送门 Sol 首先状压大概是很容易想到的 一般的做法大概就是枚举每种状态然后判断转移 但是这里其实可以轮廓线dp 也就是从上到下,从左到右地放方块 假设我们现在已经放到了$(i,j)$这个位置 那么 ...

  7. 前端面试基础回顾之深入JS继承

    前言 对于灵活的js而言,继承相比于java等语言,继承实现方式可谓百花齐放.方式的多样就意味着知识点繁多,当然也是面试时绕不开的点.撇开ES6 class不谈,传统的继承方式你知道几种?每种实现原理 ...

  8. Quartz 和 springboot schedule中的cron表达式关于星期(周几)的不同表示

    一.Quartz中cron 表达式分析: quartz 官方源码(org.quartz.CronExpression)解释: Cron expressions are comprised of 6 r ...

  9. react super中的props

    有的小伙伴每次写组件都会习惯性在constructor和super中写上props,那么这个是必要的吗?? 首先要明确很重要的一点就是: 可以不写constructor,一旦写了constructor ...

  10. 简单快速破解IDEA

    ====================================2019.09.16更新==================================== 可以直接去掉第三步,直接在激活 ...