• MybatisPlus-环境配置/基本CRUD/常用注解


            

    目录

    一、环境搭建

    二、基本CRUD

    2.1 mapper接口

    2.2 Service

    三、常用注解

    3.1 @TableName

    3.2 @TableId

    3.3 @TableField

    3.4 @TableLogic


            MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。

    一、环境搭建

            创建springboot项目后引入依赖:

    1. //mybatisplus
    2. <dependency>
    3. <groupId>com.baomidougroupId>
    4. <artifactId>mybatis-plus-boot-starterartifactId>
    5. <version>3.5.1version>
    6. dependency>
    7. //lombok
    8. <dependency>
    9. <groupId>org.projectlombokgroupId>
    10. <artifactId>lombokartifactId>
    11. <optional>trueoptional>
    12. dependency>
    13. //数据库驱动
    14. <dependency>
    15. <groupId>mysqlgroupId>
    16. <artifactId>mysql-connector-javaartifactId>
    17. <scope>runtimescope>
    18. dependency>

            在application.yml配置文件中编写基本信息:

    1. spring:
    2. # 配置数据源信息
    3. datasource:
    4. # 配置数据源类型
    5. type: com.zaxxer.hikari.HikariDataSource
    6. # 配置连接数据库信息
    7. driver-class-name: com.mysql.cj.jdbc.Driver
    8. url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
    9. username: root
    10. password: 310333
    11. # 配置MyBatis日志
    12. mybatis-plus:
    13. configuration:
    14. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

            自动扫描mapper包:

    1. @SpringBootApplication
    2. @MapperScan("com.mybatisplus.mapper")
    3. public class MybatisplusApplication {
    4. public static void main(String[] args) {
    5. SpringApplication.run(MybatisplusApplication.class, args);
    6. }
    7. }

    二、基本CRUD

            实体类

    1. @AllArgsConstructor
    2. @NoArgsConstructor
    3. @Data
    4. @TableName("user") //设置实体类对应的表名
    5. public class User {
    6. //将指定字段指定为主键,设置为自动递增(如果不设置就使用雪花算法)
    7. @TableId(value = "id",type = IdType.AUTO)
    8. private Long id;
    9. //数据库表字段相对应
    10. @TableField("name")
    11. private String name;
    12. private Integer age;
    13. private String email;
    14. //逻辑删除
    15. @TableLogic
    16. private Integer isDeleted;
    17. }

    2.1 mapper接口

            MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接使用其里面的方法,使自定义mapper继承BaseMapper即可

            我们可以使用自定义的方法,但要创建xml文件,放在resources/mapper目录下。示例:

    1. mapper
    2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4. <mapper namespace="com.mybatisplus.mapper.UserMapper">
    5. <select id="selectMapById" resultType="map">
    6. select id,name,age,email from user where id=#{id}
    7. select>
    8. <select id="selectPageVo" resultType="com.mybatisplus.pojo.User">
    9. select id,name,age,email from user where age>#{age}
    10. select>
    11. mapper>

            UserMapper

    1. @Repository
    2. public interface UserMapper extends BaseMapper {
    3. }

            测试,使用BaseMapper提供的方法: 

    1. @SpringBootTest
    2. public class myBatisPlusTest {
    3. @Autowired
    4. private UserMapper userMapper;
    5. @Test
    6. void testInsert(){
    7. //插入新记录
    8. //INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
    9. userMapper.insert(new User(null,"wz",18,"110@qq.com",1));
    10. }
    11. @Test
    12. void testDelete(){
    13. //根据id删除记录
    14. //DELETE FROM user WHERE id=?
    15. userMapper.deleteById(1556096369749561346L);
    16. }
    17. @Test
    18. void testDeleteByMap(){
    19. //根据多条件删除记录
    20. //DELETE FROM user WHERE name = ? AND age = ?
    21. HashMap map = new HashMap<>();
    22. map.put("name","wz");
    23. map.put("age",18);
    24. userMapper.deleteByMap(map);
    25. }
    26. @Test
    27. void testDeleteBatchId(){
    28. //根据多个id删除记录
    29. //DELETE FROM user WHERE id IN ( ? , ? )
    30. List list = Arrays.asList(1L, 2L);
    31. userMapper.deleteBatchIds(list);
    32. }
    33. @Test
    34. void testUpdate(){
    35. //根据id更新记录
    36. //UPDATE user SET name=?, age=?, email=? WHERE id=?
    37. userMapper.updateById(new User(3L,"zp",19,"zp@qq.com",0));
    38. }
    39. @Test
    40. void testSelect(){
    41. //根据id查询记录
    42. //SELECT id,name,age,email FROM user WHERE id=?
    43. userMapper.selectById(3L);
    44. //根据多个id查询记录
    45. //SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )
    46. List list = Arrays.asList(3L, 4L, 5L);
    47. userMapper.selectBatchIds(list);
    48. //根据多条件查询记录
    49. //SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
    50. HashMap map = new HashMap<>();
    51. map.put("name","wz");
    52. map.put("age",18);
    53. userMapper.selectByMap(map);
    54. //查询所有记录
    55. //SELECT id,name,age,email FROM user
    56. List users = userMapper.selectList(null);
    57. users.forEach(System.out::println);
    58. }
    59. }

    2.2 Service

            MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑。我们可以让自定义service接口继承Iservice接口,使用其提供的基础功能。若ServiceImpl无法满足业务需求,则可以自定义ServiceImpl。

            注:IService采用 get 查询单行,remove 删除, list 查询集合,page 分页的前缀命名方式区分 Mapper层避免混淆。

            UserService接口:

    1. public interface UserService extends IService {
    2. }

             UserServiceimpl:

    1. @Service
    2. public class UserServiceImpl extends ServiceImpl implements UserService {
    3. }

            测试,使用IService提供的方法

    1. @SpringBootTest
    2. public class serviceTest {
    3. @Autowired
    4. private UserService userService;
    5. @Test
    6. void testGetCount(){
    7. //查询记录总数
    8. //SELECT COUNT( * ) FROM user
    9. long count = userService.count();
    10. System.out.println(count);
    11. }
    12. @Test
    13. void testInsertBatch(){
    14. //批量插入新纪录
    15. //INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
    16. List list=new ArrayList<>();
    17. list.add(new User(null,"wzz",28,"1@qq.com",0));
    18. list.add(new User(null,"zhd",12,"2@qq.com",0));
    19. list.add(new User(null,"lku",30,"3@qq.com",0));
    20. userService.saveBatch(list);
    21. }
    22. }

    三、常用注解

    3.1 @TableName

            作用:标识实体类对应的表

            举例

    1. @TableName("t_user") //设置实体类对应的表名
    2. public class User {
    3. }

            另外,也可以通过修改全局配置文件的方式来匹配具有固定前缀数据库表名

    1. mybatis-plus:
    2. global-config:
    3. db-config:
    4. # 配置MyBatis-Plus操作表的默认前缀
    5. table-prefix: t_

    3.2 @TableId

            作用:标识主键字段名

            示例

    1. //将指定字段指定为主键,设置为自动递增的方式
    2. @TableId(value = "u_id",type = IdType.AUTO)
    3. private Long id;

            常用的主键策略

            配置全局主键策略

    1. mybatis-plus:
    2. global-config:
    3. db-config:
    4. # 配置MyBatis-Plus操作表的默认前缀
    5. table-prefix: t_
    6. # 配置MyBatis-Plus的主键策略
    7. id-type: auto

    3.3 @TableField

            作用:将实体类属性数据库表字段对应

            示例

    1. @TableField("u_name")
    2. private String name;

    3.4 @TableLogic

            作用假删除,将对应数据中代表是否被删除字段的状态修改为“被删除”,之后在数据库中仍旧能看到此条数据记录。0是未删除,1是已删除

            示例:

    1. //逻辑删除
    2. @TableLogic
    3. private Integer isDeleted;

             添加该字段后,删除功能真正执行的是修改操作:

    UPDATE t_user SET is_deleted=1 WHERE id=? AND is_deleted=0

            查询功能:

    SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0

  • 相关阅读:
    /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by
    Facebook社区:小组功能如何改变社交互动
    【西瓜书学习】1、决策树
    【保姆级】新机器部署JDK&Tomcat
    Ribbon的轮询策略实现方法
    MD5加密解密网站测试,MD5加密还安全吗?
    DataX做数据迁移的几个技巧
    总结 HTTPS 的加密流程
    算法系列九:十大经典排序算法之——快速排序
    101 本地存储
  • 原文地址:https://blog.csdn.net/weixin_62427168/article/details/126234612