简介
Mybatis-Plus(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
简言之就是对单表的增删改查有了很好的封装。基本不用再单独写sql语句了。目前此类基于mybats的增强工具有很多,但是目前MP可以算是国内最主流的了。而且它的功能也是最全的。
github地址:https://github.com/baomidou/mybatis-plus
gitee地址:https://gitee.com/baomidou/mybatis-plus
MP初体验
这里我们创建一个测试项目MPDemo来初步体验下如何使用MP。省略创建项目步骤和数据库表创建过程。
1.测试表结构【user】
2.springboot三板斧之引入依赖
<dependencies><!-- springboot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- MP最新版本 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!-- mysql 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>
3.springboot三板斧之添加配置
# 数据源配置
spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://yourip:3306/yourdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=trueusername: rootpassword: 123456# Mybatis Plus配置
mybatis-plus:configuration:#打印日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#下划线转驼峰map-underscore-to-camel-case: true
4.创建user表的实体映射类
@Data
@TableName("user")
public class User implements Serializable {/*** 自增id*/private Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 邮件*/private String email;/*** 地址*/private String address;/*** 创建日期*/private Date createtime;/*** 更新日期*/private Date updatetime;}
5.创建user表的mapper类
//这里仅仅集成MP的BaseMapper即可
public interface UserMapper extends BaseMapper<User> {}
6.springboot三板斧之启动类注释
@SpringBootApplication
@MapperScan("com.mayuanfei.mpdemo.dao.mapper")
public class MpDemoApplication {public static void main(String[] args) {SpringApplication.run(MpDemoApplication.class, args);}
}
这里通过@MapperScan来指定扫描所有mapper的基础包路径。
其实如果Mapper类中如果有@Mapper注解的话,其实在启动类上是不需要增加@MapperScan的。
7.添加测试类
@SpringBootTest
public class MapperTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testInsert() {User user = new User();user.setName("张三");user.setAge(2);user.setEmail("zhangsan@163.com");user.setAddress("北京朝阳");int result = this.userMapper.insert(user);System.out.println("打印插入结果===>" + result);System.out.println("打印插入后user的id值===>" + user.getId());}
}
输出结果:
==> Preparing: INSERT INTO user ( id, name, age, email, address ) VALUES ( ?, ?, ?, ?, ? )
==> Parameters: 1546670400971255809(Long), 张三(String), 2(Integer), zhangsan@163.com(String), 北京朝阳(String)
<== Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7397c6]
打印插入结果===>1
打印插入后user的id值===>1546670400971255809
可能遇到的问题
1.@Autowired标识红色
原因是:我们通过在启动类添加注释@MapperScan(“com.mayuanfei.mpdemo.dao.mapper”)来扫描所有的mapper类的
但是idea没有发现有具体的注释标识被spring容器所管理,所以这里给出警告。
解决方式有两种:
- 启动类注释不变,把@Autowired修改为@Resource注解。
- 启动类去掉@MapperScan(“com.mayuanfei.mpdemo.dao.mapper”),在UserMaper类上加上@Mapper注解。
2.user表中的id值不符合我们的预期
例子中,我们打印出来的user的id值为:1546670400971255809。本来想着应该是1。这是因为MP默认生成id的算法是通过雪花算法来生成的。如果要按照数据库中的自增来生成id需要在实体类增加一个注解: