mybatis-plus简单入门实例

桃扇骨 2023-08-17 16:18 108阅读 0赞
  1. mybatis-plus从名字上看,就知道是一个mybatis的加强版,这个加强版的确帮助我们简化了一部分配置,另外,也帮助我们默认提供了一些新的操作API。以前我们在做mybatis的时候,至少需要mapper隐射配置文件,即使不用配置文件,我们也需要通过注解的方式来在Mapper接口中的方法上写上sql。比如@Select("select \* from user")。有了mybatis-plus这些简单的增删改查操作就不需要我们来写sql了。因为BaseMapper<T>帮助我们声明了一些常用的操作。我们在定义dao层的接口时只需要继承BaseMapper<T>即可。我们可以看看BaseMapper接口提供的方法:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk_size_16_color_FFFFFF_t_70

  1. 有了这些默认的方法,如果没有复杂的操作,我们在dao层的接口中,就只需要继承自BaseMapper<T>即可。另外,我们在mybatis的使用中,我们需要指定映射文件的位置,比如 mybatis.mapper-locations: classpath/\*.mapper.xml。在这里因为不存在映射文件,所以就无需指定。
  2. mybatisplus里面默认帮助我们实现了一些基本的操作,那么它就有一些规则,比如表与实体映射,字段与属性映射,这里有个基本的规则,实体与表就是首字母大写转小写,属性字段通过驼峰转下划线,id默认是主键,举例来说就是:

实体->表:User->user

属性->列字段:createDate->create_date

  1. 有了这些规则,如果我们想定制怎么办呢?我就想User表映射为users,我就想属性userName映射为username,我就需要userId作为主键。这时候就需要注解出场了。

@TableName(“users”)指定表名

@TableField(“username”)指定列字段

@TableId(“user_id”)指定主键

  1. 有一些属性,不想在表中做映射,怎么办?就是我们需要在表中排除这个字段,这里有以下三种种办法去除字段。

1) transient修饰符

  1. private transient String remark;

2) static修饰符

  1. private static String remark;
  2. 3) 另外再加一个注解属性,@TableField(exist=false)
  3. @TableField(exist=false)
  4. private String remark;
  5. 以上这些就是介绍了mybatis-plusmybatis基础上做的一些改进和增强,从某一方面说更加的简化了,但是很多工作是框架帮我们做了, 底层还是很多依赖mybatis来实现的。
  6. 下面我们通过实战来了解一下mybatis-plus,看看如何简化了配置。这里直接结合springboot使用,因为实际中我们几乎不可能单独使用。都是在springboot项目中使用。这里构建maven工程,pom.xml引入的依赖如下:
  7. <parent>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-parent</artifactId>
  10. <version>2.0.3.RELEASE</version>
  11. </parent>
  12. <dependencies>
  13. <dependency>
  14. <groupId>junit</groupId>
  15. <artifactId>junit</artifactId>
  16. <scope>test</scope>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-web</artifactId>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-test</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.projectlombok</groupId>
  28. <artifactId>lombok</artifactId>
  29. </dependency>
  30. <dependency>
  31. <groupId>com.baomidou</groupId>
  32. <artifactId>mybatis-plus-boot-starter</artifactId>
  33. <version>3.2.0</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>mysql</groupId>
  37. <artifactId>mysql-connector-java</artifactId>
  38. </dependency>
  39. </dependencies>
  40. 这里还引入了lombok,帮助我们更进一步简化实体类。也加入了spring-boot-starter-test,帮助我们做单元测试。
  41. 定义一个简单的实体User.java
  42. package com.xxx.mybatisplus.entity;
  43. import java.util.Date;
  44. import com.baomidou.mybatisplus.annotation.TableField;
  45. import lombok.Data;
  46. @Data
  47. public class User {
  48. private Integer id;
  49. private String name;
  50. private int age;
  51. private String email;
  52. @TableField("createdate")
  53. private Date createDate;
  54. @TableField("modifydate")
  55. private Date modifyDate;
  56. @TableField(exist=false)
  57. private String remark;
  58. }

准备表与数据:

  1. /*
  2. Navicat MySQL Data Transfer
  3. Source Server : localhost
  4. Source Server Version : 50711
  5. Source Host : localhost:3306
  6. Source Database : mybatisplus
  7. Target Server Type : MYSQL
  8. Target Server Version : 50711
  9. File Encoding : 65001
  10. Date: 2019-09-28 09:09:02
  11. */
  12. SET FOREIGN_KEY_CHECKS=0;
  13. -- ----------------------------
  14. -- Table structure for user
  15. -- ----------------------------
  16. DROP TABLE IF EXISTS `user`;
  17. CREATE TABLE `user` (
  18. `id` int(11) NOT NULL AUTO_INCREMENT,
  19. `name` varchar(20) DEFAULT NULL,
  20. `age` int(11) DEFAULT NULL,
  21. `email` varchar(20) DEFAULT NULL,
  22. `createdate` datetime DEFAULT NULL,
  23. `modifydate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  24. PRIMARY KEY (`id`)
  25. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  26. -- ----------------------------
  27. -- Records of user
  28. -- ----------------------------
  29. INSERT INTO `user` VALUES ('1', 'aa', '18', 'aa@126.com', '2019-09-27 22:15:22', '2019-09-28 09:08:12');
  30. INSERT INTO `user` VALUES ('2', 'yy', '20', 'yy@sina.com', '2019-09-27 22:15:22', '2019-09-28 09:08:18');
  31. INSERT INTO `user` VALUES ('3', 'dd', '22', 'dd@qq.com', '2019-09-27 22:15:22', '2019-09-28 09:08:26');

定义dao层接口:

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

准备配置文件application.yml:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk_size_16_color_FFFFFF_t_70 1

准备启动类:

  1. package com.xxx.mybatisplus;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @SpringBootApplication
  6. @MapperScan("com.xxx.mybatisplus.dao")
  7. public class App {
  8. public static void main( String[] args ){
  9. SpringApplication.run(App.class, args);
  10. }
  11. }

准备单元测试类:

  1. package com.xxx.mybatisplus;
  2. import java.util.List;
  3. import org.junit.Assert;
  4. import org.junit.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.test.context.junit4.SpringRunner;
  9. import com.xxx.mybatisplus.dao.UserDao;
  10. import com.xxx.mybatisplus.entity.User;
  11. @RunWith(SpringRunner.class)
  12. @SpringBootTest
  13. public class UserTest {
  14. @Autowired
  15. private UserDao userDao;
  16. @Test
  17. public void select(){
  18. User user = userDao.selectById(1);
  19. Assert.assertEquals("aa", user.getName());
  20. }
  21. @Test
  22. public void list(){
  23. List<User> users = userDao.selectList(null);
  24. users.forEach(System.out::println);
  25. }
  26. }
  27. 运行第一个查询测试:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk_size_16_color_FFFFFF_t_70 2

  1. 运行第二个列表测试:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk_size_16_color_FFFFFF_t_70 3

  1. 至此,mybatis-plus算是入门了,后续就是看怎么做复杂的操作了,定制SQL,分页。

发表评论

表情:
评论列表 (有 0 条评论,108人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MybatisPlus入门

    什么是MybatisPlus? Mybatis是中国开发的一款基于mybatis优化的框架,具有非常好的应用场景, 荣获【 2019 年度开源中国最受欢迎的软件,开发工具

    相关 MybatisPlus入门

    MyBatisPlus简介 1.项目肯定要访问数据操作,并且每个domain都有crud,需多次写重复代码。我们使用MybatisPlus,就不用写重复代码,并且还有模板