Mybatis-Plus 简介及入门案例
Posted 过眼云烟2016
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis-Plus 简介及入门案例相关的知识,希望对你有一定的参考价值。
Mybatis 简介
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网地址:https://www.baomidou.com/
特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
框架结构
入门案例
开发环境:
IDE:idea 2019.2
JDK:JDK8+
构建工具:maven 3.5.4
MySQL版本:MySQL 5.7
Spring Boot:2.6.3
MyBatis-Plus:3.5.1
1.数据准备
创建数据库和表:
CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT \'主键ID\',
`name` varchar(30) DEFAULT NULL COMMENT \'姓名\',
`age` int(11) DEFAULT NULL COMMENT \'年龄\',
`email` varchar(50) DEFAULT NULL COMMENT \'邮箱\',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
添加数据
INSERT INTO user (id, name, age, email) VALUES
(1, \'Jone\', 18, \'test1@baomidou.com\'),
(2, \'Jack\', 20, \'test2@baomidou.com\'),
(3, \'Tom\', 28, \'test3@baomidou.com\'),
(4, \'Sandy\', 21, \'test4@baomidou.com\'),
(5, \'Billie\', 24, \'test5@baomidou.com\');
2.创建SpringBoot工程
新建一个SpringBoot项目
参考:https://www.cnblogs.com/1963942081zzx/p/16822812.html
添加依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
ider 安装 Lombok插件
Lombok插件简化实体类开发
3.编码
配置application.yml
spring:
# 配置数据源信息
datasource:
# 配置数据源类型
type: com.zaxxer.hikari.HikariDataSource
# 配置连接数据库信息
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
username: root
password: root
注意:
1、驱动类driver-class-name
spring boot 2.0(内置jdbc5驱动),驱动类使用:driver-class-name: com.mysql.jdbc.Driver
spring boot 2.1及以上(内置jdbc8驱动),驱动类使用: driver-class-name: com.mysql.cj.jdbc.Driver 否则运行测试用例的时候会有 WARN 信息
2、连接地址url
MySQL5.7版本的url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
MySQL8.0版本的url: jdbc:mysql://localhost:3306/mybatis_plus? serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false 否则运行测试用例报告如下错误: java.sql.SQLException: The server time zone value \'Öйú±ê׼ʱ¼ä\' is unrecognized or represents more
启动类
在Spring Boot启动类中添加@MapperScan注解,扫描Mapper接口所在的包
@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application
public static void main(String[] args)
SpringApplication.run(Application.class, args);
添加实体类
@Data
public class User
private Long id;
private String name;
private Integer age;
private String email;
添加mapper
BaseMapper是MyBatis-Plus提供的模板mapper,其中包含了基本的CRUD方法,泛型为操作的 实体类型
//@Repository 避免单元测试时编辑器找不到注入对象报错,实际可以不加
@Repository
public interface UserMapper extends BaseMapper<User>
测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisPlusTest
@Resource
private UserMapper userMapper;
@Test
public void test1()
List<User> users = this.userMapper.selectList(null);
users.forEach(System.out::println);
结果:
User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)
添加日志
在application.yml中配置日志输出
# 配置MyBatis日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
日志输出:
> Preparing: SELECT id,name,age,email FROM user
> Parameters:
< Columns: id, name, age, email
< Row: 1, Jone, 18, test1@baomidou.com
<== Row: 2, Jack, 20, test2@baomidou.com
<== Row: 3, Tom, 28, test3@baomidou.com
<== Row: 4, Sandy, 21, test4@baomidou.com
<== Row: 5, Billie, 24, test5@baomidou.com
<== Total: 5
MyBatis学习简介及入门案例
1.什么是MyBatis?
MyBatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架。MyBatis去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解进行配置和原始映射,以将接口和Java的POJO映射成数据库中的记录。
MyBatis作为持久层框架,主要思想是将程序中大量的SQL语句剥离出来,配置在配置文件中,以实现SQL的灵活配置。这样的好处是将SQL语句和程序代码分离,可以在不修改代码的前提下,直接在配置文件中修改SQL。
2.MyBatis和Hibernate的区别。
Hibernate是以一种“全自动”的ORM框架,它实现了数据库表和POJO之间的映射,以及SQL的自动生成。
MyBatis相对于hibernate来说,是一种“半自动化”的ORM框架,MyBatis的着力点在pojo和sql之间的映射,MyBatis虽然也实现了数据库表和pojo之间的映射,但是并不能在运行期间生成SQL语句,需要程序员在配置文件中配置,将SQL需要的参数和返回的结果字段映射到指定POJO。
Mybatis以SQL开发的工作量和数据库移植上的让步,为系统设计提供了更大的自由空间。
3.入门案例
3.1创建一个项目,导入数据库连接、MyBatis的jar包
3.2创建一个数据库-mybatis,创建一个表t_user
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(18) NOT NULL,
`sex` char(2) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.3创建一个User类
public class User {
private Integer id;
private String username;
private String sex;
private Integer age;
public User(String username, String sex, Integer age) {
super();
this.username = username;
this.sex = sex;
this.age = age;
}
public User() {
super();
}
//省略get、set方法
}
3.4配置这个pojo对应的UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace指用户自定义的命名空间 -->
<mapper namespace="com.dj.mapper.UserMapper">
<!--
id="save"是唯一的标示符
parameterType属性指明插入时使用的参数类型
useGeneratedKeys="true"表示使用数据库的自动增长策略
-->
<insert id="save" parameterType="com.dj.pojo.User" useGeneratedKeys="true">
insert into t_user(username,sex,age) values(#{username},#{sex},#{age})
</insert>
</mapper>
3.5配置mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- XML 配置文件包含对 MyBatis 系统的核心设置 -->
<configuration>
<!-- 指定 MyBatis 所用日志的具体实现 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 环境配置,即连接的数据库。 -->
<environments default="mysql">
<environment id="mysql">
<!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
<transactionManager type="JDBC"/>
<!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 -->
<mappers>
<mapper resource="com/dj/mapper/UserMapper.xml"/>
</mappers>
</configuration>
3.6编写测试类
public class MyBatisTest {
@Test
public void save() throws Exception{
//读取mybatis-config.xml
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//初始化mybatis,创建一个sqlsessionfactory类的实例
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//创建一个SqlSession实例
SqlSession sqlSession = factory.openSession();
//创建一个User对象
User user = new User("王五", "男", 12);
sqlSession.insert("com.dj.mapper.UserMapper.save", user);
sqlSession.commit();
sqlSession.close();
}
}
运行后可以看到结果
要想控制台显示sql语句,要导入log4j的jar包和log4j.properties文件。
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.dj.mapper.UserMapper=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
控制台有如下显示
源码下载路径:https://files.cnblogs.com/files/dj-blog/MyBatisTest.zip
以上是关于Mybatis-Plus 简介及入门案例的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用]