用了MybatisPlus后,我很久没有手写sql了

简介: 最早写JDBC的时候,要手动配连接信息,要一条条手写sql语句。后来Mybatis出现了,不需要再手动配置连接信息,sql语句也和代码隔离开来,但是还免不了写Sql。接着出现了MybatisPlus,这下连Sql都不用写了。

听说微信搜索《Java鱼仔》会变更强哦!


本文收录于githubgitee ,里面有我完整的Java系列文章,学习或面试都可以看看


(一)前言


最早写JDBC的时候,要手动配连接信息,要一条条手写sql语句。后来Mybatis出现了,不需要再手动配置连接信息,sql语句也和代码隔离开来,但是还免不了写Sql。接着出现了MybatisPlus,这下连Sql都不用写了。


(二)什么是MybatisPlus


首先还是把官网地址拿出来:


mp.baomidou.com/guide/


简单来讲,MybatisPlus是Mybatis的增强工具,简化开发,提高开发效率。在官网中,他用这样一幅图表示MybatisPlus和Mybatis之间的关系。


网络异常,图片无法展示
|


在图片中,MybatisPlus表示它和Mybatis之间的关系就像魂斗罗中的两兄弟一样,互相不会影响,但是能帮你在打怪路上更加轻松。


(三)前置准备


在讲解MybatisPlus之前,我们先准备一批数据


CREATE DATABASE user;USE user;SET NAMES utf8mb4;DROPTABLE IF EXISTS `user`;CREATETABLE `user`  (  `id` int(11)NOTNULL AUTO_INCREMENT,  `user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOTNULL COMMENT '用户Id',  `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOTNULL COMMENT '用户名',  `password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOTNULL COMMENT '密码',  `gmt_create` datetime(3)NOTNULL COMMENT '创建时间',  `gmt_modified` datetime(3)NOTNULL  COMMENT '修改时间',  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET= utf8mb4 COLLATE = utf8mb4_general_ci;INSERTINTO `user` VALUES(1,'a001','name1','123456',now(),now()),(2,'a002','name2','123456',now(),now()),(3,'a003','name3','123456',now(),now()),(4,'a004','name4','123456',now(),now()),(5,'a005','name5','123456',now(),now()),(6,'a006','name6','123456',now(),now()),(7,'a007','name7','123456',now(),now()),(8,'a008','name8','123456',now(),now()),(9,'a009','name9','123456',now(),now()),(10,'a010','name10','123456',now(),now())

(四)Mybatis快速入门


1、引入最新的依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>Latest Version</version></dependency>

2、在配置中心配置数据库连接信息

spring.datasource.url=jdbc:mysql://192.168.61.102:3306/user?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3、在Spring启动类中添加MapperScan注解

@SpringBootApplication@MapperScan("com.example.mybatisplus.mapper")
publicclassMybatisPlusApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(MybatisPlusApplication.class, args);
    }
}

4、创建mapper,DO


MybatisPlus可以自动生成Mapper、DO、Service、Controller,这里作为教程,手动建立。MybatisPlus和Mybatis的第一个不同点,这里使用@TableName注解标明当前的实体类对应哪个表


@Data@TableName("user")
publicclassUserDO {
privateLongid;
privateStringuserId;
privateStringusername;
privateStringpassword;
privateLocalDateTimegmtCreate;
privateLocalDateTimegmtModified;
}

创建Mapper类时,继承BaseMapper类,这是MybatisPlus提供的一个基类,封装了常用的查询操作

publicinterfaceUserMapperextendsBaseMapper<UserDO> {
}

5、查询数据


在使用Mybatis时,数据的CRUD都需要编写sql才能实现,MybatisPlus提供的BaseMapper既提供了Mapper层面的封装接口,又提供了Service层面的封装接口。基于以往的写法,平常开发中会更加倾向于使用Mapper层面的接口 介绍Mapper层面的几个接口:


比如我想查询user表的数据量,我就可以直接调用:

Integerinteger=userMapper.selectCount(null);

MybatisPlus提供了一个条件构造器Wrappers,可以通过Wrappers构造一系列条件,比如查询username为name1的数据

List<UserDO>userDOList=userMapper.selectList(Wrappers.<UserDO>lambdaQuery()
                .eq(UserDO::getUsername, "name1"));

又比如我想查询id大于5的数据

List<UserDO>userDOList1=userMapper.selectList(Wrappers.<UserDO>lambdaQuery()
                .gt(UserDO::getId, 5));

6、数据插入


数据的查询使用上面的方式没有任何问题,插入数据时有几个可以优化的地方,我们可以通过一个注解@TableId设置主键自增方式,可以通过@TableField注解设置数据的自动填充。 因此修改一下UserDO这个类:


@Data@TableName("user")
publicclassUserDO {
@TableId(type=IdType.AUTO)
privateLongid;
privateStringuserId;
privateStringusername;
privateStringpassword;
@TableField(fill=FieldFill.INSERT)
privateLocalDateTimegmtCreate;
@TableField(fill=FieldFill.INSERT_UPDATE)
privateLocalDateTimegmtModified;
}

在实体类中,设置id自增,设置gmtCreate在插入时自动填充,设置gmtModified在创建和修改时自动填充,接着配置自动填充规则:

@ConfigurationpublicclassMybatisObjectHandlerimplementsMetaObjectHandler {
@OverridepublicvoidinsertFill(MetaObjectmetaObject) {
setFieldValByName("gmtCreate", LocalDateTime.now(),metaObject);
setFieldValByName("gmtModified", LocalDateTime.now(),metaObject);
    }
@OverridepublicvoidupdateFill(MetaObjectmetaObject) {
setFieldValByName("gmtModified",LocalDateTime.now(),metaObject);
    }
}

最后直接调用API插入数据

@Testpublicvoidtest3(){
UserDOuserDO=newUserDO();
userDO.setUserId("a011");
userDO.setUsername("name11");
userDO.setPassword("123456");
userMapper.insert(userDO);
}

更多的查询方法可以参考官网,十分详细。但是如果你的sql涉及到多表的连表操作,还是可以自己和MyBatis一样手写sql。


(五)总结


至此,你应该对MybatisPlus有了大致的了解,另外值得一提的是MybatisPlus的开源组织苞米豆是国内的组织,因此这份文档对国内开发人员来说特别友好,可放心使用。我是鱼仔,我们下期再见!



相关文章
|
4月前
|
SQL Java 测试技术
3、Mybatis-Plus 自定义sql语句
这篇文章介绍了如何在Mybatis-Plus框架中使用自定义SQL语句进行数据库操作。内容包括文档结构、编写mapper文件、mapper.xml文件的解释说明、在mapper接口中定义方法、在mapper.xml文件中实现接口方法的SQL语句,以及如何在单元测试中测试自定义的SQL语句,并展示了测试结果。
3、Mybatis-Plus 自定义sql语句
|
10天前
|
SQL XML Java
mybatis实现动态sql
MyBatis的动态SQL功能为开发人员提供了强大的工具来应对复杂的查询需求。通过使用 `<if>`、`<choose>`、`<foreach>`等标签,可以根据不同的条件动态生成SQL语句,从而提高代码的灵活性和可维护性。本文详细介绍了动态SQL的基本用法和实际应用示例,希望对您在实际项目中使用MyBatis有所帮助。
42 11
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
2月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
59 10
|
3月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
4月前
|
SQL Java 数据库连接
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
文章讲述了在使用Mybatis时遇到的资源文件找不到的问题,并提供了通过修改Maven配置来解决资源文件编译到target目录下的方法。
Mybatis系列之 Error parsing SQL Mapper Configuration. Could not find resource com/zyz/mybatis/mapper/
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
70 1
|
4月前
|
SQL Java 数据库连接
Mybatis系列之 动态SQL
文章详细介绍了Mybatis中的动态SQL用法,包括`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<trim>`和`<foreach>`等元素的应用,并通过实际代码示例展示了如何根据不同条件动态生成SQL语句。
|
4月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
4月前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志