MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
入门教程
1. MyBatis 简介
MyBatis 的核心是对 JDBC 的封装,它将 SQL 语句的编写、参数的设置以及结果的映射都封装起来,简化了数据库操作。使用 MyBatis,开发者不需要手动编写繁琐的数据库操作代码,从而提高了开发效率。
2. 环境搭建
a. 添加依赖
在项目的 pom.xml 文件中添加 MyBatis 的依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
b. 配置文件
创建 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">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
3. 创建 Mapper 接口
在 com.example.mapper 包下创建 UserMapper 接口,定义数据库操作的方法:
package com.example.mapper;
public interface UserMapper {
User getUserById(Integer id);
}
实战技巧
1. 映射文件编写
在 com/example/mapper 包下创建 UserMapper.xml 映射文件,编写 SQL 语句:
<?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">
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.model.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
2. 使用注解
MyBatis 还支持使用注解来替代 XML 配置,以下是将上述映射文件转换为注解的形式:
package com.example.mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Param;
import com.example.model.User;
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(@Param("id") Integer id);
}
3. 参数处理
MyBatis 提供了多种参数处理方式,例如:
- 使用
@Param注解为参数命名; - 使用
#{}占位符传递参数; - 使用
@Options注解返回结果集等。
项目应用详解
1. 项目结构
以下是一个简单的 MyBatis 项目结构:
src/
├── main/
│ ├── java/
│ │ ├── com/
│ │ │ ├── example/
│ │ │ │ ├── mapper/
│ │ │ │ │ ├── UserMapper.java
│ │ │ │ │ ├── UserMapper.xml
│ │ │ │ ├── model/
│ │ │ │ │ ├── User.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── UserService.java
│ │ │ │ │ └── UserServiceImpl.java
│ │ │ │ └── controller/
│ │ │ │ │ └── UserController.java
│ ├── resources/
│ │ ├── mybatis-config.xml
│ └── web.xml
└── test/
2. 数据库连接池
在 MyBatis 中,推荐使用数据库连接池来管理数据库连接。常用的数据库连接池有 HikariCP、Druid 等。以下是一个使用 HikariCP 的例子:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class DataSourceConfig {
public static HikariDataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test?useSSL=false");
config.setUsername("root");
config.setPassword("");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
return new HikariDataSource(config);
}
}
3. MyBatis 集成 Spring
将 MyBatis 集成到 Spring 框架中,可以通过以下步骤实现:
a. 添加依赖
在 pom.xml 文件中添加 Spring 和 MyBatis 的依赖:
<dependencies>
<!-- Spring 依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.10</version>
</dependency>
<!-- MyBatis 依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
b. 配置文件
在 applicationContext.xml 文件中配置 MyBatis 和数据源:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 数据源配置 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<!-- 配置数据源属性 -->
</bean>
<!-- MyBatis 配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.example.model"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- 扫描 Mapper 接口 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>
c. 使用 MyBatis
在 Spring 配置完成后,就可以在业务层使用 MyBatis 进行数据库操作了。以下是一个使用 MyBatis 的例子:
package com.example.service;
import com.example.mapper.UserMapper;
import com.example.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Integer id) {
return userMapper.getUserById(id);
}
}
总结
本文详细介绍了 MyBatis 的入门教程、实战技巧以及项目应用详解。通过本文的学习,相信你已经对 MyBatis 有了一个全面的了解。在实际项目中,MyBatis 可以有效地提高数据库操作效率,降低代码量,简化开发过程。
