MyBatis 介绍及应用指南
MyBatis 简介
MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程和高级映射。MyBatis 几乎消除了所有的 JDBC 代码和手动设置参数以及检索结果的步骤,使得开发人员能够更专注于 SQL 语句和结果映射。MyBatis 提供了 XML 或注解两种方式来配置 SQL 语句,将基本类型、Map 接口和 Java POJO(普通的 Java 对象)映射到数据库记录。
主要特点:
- SQL 映射:通过 XML 或注解方式将 SQL 语句与 Java 方法进行映射。
- 参数映射:支持多种参数映射方式,包括位置参数、命名参数和自定义类型处理器。
- 结果映射:可以将 SQL 查询的结果映射为 Java 对象,并定义映射规则将查询结果中的列与 Java 对象的属性进行对应。
- 动态 SQL:提供了强大的动态 SQL 功能,可以根据条件动态生成 SQL 语句。
- 事务支持:MyBatis 可以管理数据库事务,支持通过配置文件或编程方式来控制事务的提交和回滚。
- 插件机制:提供了插件机制,可以通过自定义插件来扩展框架的功能,如日志记录、性能监控等。
MyBatis应用指南
1. 引入依赖
在你目中引入MyBatis的依赖。通过在pom.xml
(对于Maven项目)或build.gradle
(对于Gradle项目)中添加相应的依赖项来完成。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
引入数据库驱动依赖,例如MySQL驱动:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>最新版本号</version> <!-- 请替换为当前可用的最新版本号 -->
</dependency>
2. 配置 MyBatis
MyBatis 的配置方式有两种:基于 XML 的配置和基于注解的配置。通常,我们会使用 XML 配置文件(mybatis-config.xml
)来配置 MyBatis 的环境信息(如数据源、事务管理器等)和映射文件的位置。
<?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">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="你的数据库驱动"/>
<property name="url" value="你的数据库URL"/>
<property name="username" value="你的数据库用户名"/>
<property name="password" value="你的数据库密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
3. 创建 Mapper 接口
Mapper 接口是 MyBatis 中的一个核心概念,它定义了操作数据库的方法。这些方法会在 MyBatis 的映射文件中找到对应的 SQL 语句。
public interface BlogMapper {
Blog selectBlog(int id);
}
4. 编写 Mapper XML
Mapper XML 文件包含 SQL 语句和映射规则。MyBatis 会将这些 SQL 语句映射到 Mapper 接口的方法上。
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
SELECT * FROM Blog WHERE id = #{id}
</select>
</mapper>
5. 使用 MyBatis
最后,你可以通过 MyBatis 的 SqlSessionFactory
来获取 SqlSession
,然后通过 SqlSession
来执行 Mapper 接口中的方法。
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
System.out.println(blog);
}
MyBatis-Plus 介绍及应用指南
MyBatis-Plus 简介
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,它在 MyBatis 的基础上只做增强而不做改变,旨在简化开发、提高效率。MyBatis-Plus 提供了许多实用的功能,如自动注入基本 CRUD 操作、内置通用 Mapper 和 Service、强大的条件构造器、支持 Lambda 表达式等。
主要特点:
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响。
- 损耗小:启动即会自动注入基本 CRUD,性能基本无损耗,直接面向对象操作。
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器。
- 支持 Lambda 形式调用:通过 Lambda 表达式方便地编写各类查询条件,无需担心字段写错。
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置。
- 支持 ActiveRecord 模式:实体类只需继承 Model 类即可进行强大的 CRUD 操作。
- 内置代码生成器:支持快速生成 Mapper、Model、Service、Controller 层代码,支持模板引擎和自定义配置。
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件后写分页等同于普通 List 查询,支持多种数据库。
- 内置性能分析插件:可输出 SQL 语句及其执行时间,有助于快速揪出慢查询。
- 内置全局拦截插件:提供全表 delete、update 操作智能分析阻断,也可自定义拦截规则,预防误操作。
MyBatis-Plus 应用指南
1. 添加MyBatis-Plus依赖
首先,你需要在你的项目中添加MyBatis-Plus的依赖。如果你使用Maven,可以在pom.xml文件中添加如下依赖(注意替换为最新的版本号):
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>你的版本号</version>
</dependency>
2. 配置数据源
在application.yml或application.properties配置文件中配置数据源信息,包括数据库驱动、URL、用户名和密码等。
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/yourdatabase?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: yourpassword
3. 创建实体类
根据数据库表结构创建对应的实体类,并使用MyBatis-Plus提供的注解来映射表名和字段。
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("your_table_name")
public class YourEntity {
private Long id;
private String name;
// 其他字段...
}
4. 创建Mapper接口
Mapper接口是MyBatis-Plus中的一个核心概念,它继承了BaseMapper接口,定义了操作数据库的方法。你无需实现这些方法,因为MyBatis-Plus会在运行时动态代理这些方法。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface YourEntityMapper extends BaseMapper<YourEntity> {
// 这里可以定义一些自定义的方法,如果需要的话
}
5. 扫描Mapper接口
在Spring Boot的启动类上添加@MapperScan注解,指定Mapper接口所在的包路径,以便Spring Boot能够扫描到这些接口并创建对应的Bean。
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.yourpackage.mapper") // 替换为你的Mapper接口所在的包路径
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
6. 使用MyBatis-Plus
现在,你可以在你的服务层或控制器中注入Mapper接口,并调用其方法来操作数据库了。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class YourService {
@Autowired
private YourEntityMapper yourEntityMapper;
public List<YourEntity> listAll() {
return yourEntityMapper.selectList(null);
}
// 其他业务方法...
}