MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis 简介
MyBatis 允许你将 SQL 映射直接定义在 XML 文件中,也可以定义在注解中。这使得 SQL 映射更加灵活,易于管理和维护。MyBatis 专注于 SQL 本身,而不是数据库连接和事务管理,因此它不依赖于任何特定的数据库连接池或事务管理器。
MyBatis 核心技巧
1. Mapper 接口和 XML 映射文件
MyBatis 使用 Mapper 接口和 XML 映射文件来定义 SQL 映射。Mapper 接口定义了 SQL 映射的方法,而 XML 映射文件包含了 SQL 语句和映射关系。
public interface UserMapper {
User getUserById(int id);
}
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
2. 动态 SQL
MyBatis 支持动态 SQL,可以使用 <if>, <choose>, <when>, <otherwise> 等标签来编写条件语句。
<select id="findUsersByCondition" resultType="com.example.User">
SELECT * FROM users
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
3. 关联映射
MyBatis 支持复杂的关联映射,例如一对一、一对多和多对多。
<resultMap id="userMap" type="com.example.User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<collection property="orders" ofType="com.example.Order">
<id property="id" column="order_id"/>
<result property="orderNumber" column="order_number"/>
</collection>
</resultMap>
4. 缓存机制
MyBatis 提供了两种缓存机制:一级缓存和二级缓存。
- 一级缓存:会话级别的缓存,在同一个会话中,同一个 SQL 映射的查询结果会被缓存。
- 二级缓存:全局缓存,可以在不同的会话之间共享缓存。
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
MyBatis 应用实例详解
1. 创建 MyBatis 项目
首先,你需要创建一个 Maven 项目,并添加 MyBatis 的依赖。
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<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>
</dependencies>
2. 配置 MyBatis
在 src/main/resources 目录下创建 mybatis-config.xml 文件,配置数据源、事务管理器等。
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
3. 编写 Mapper 接口和 XML 映射文件
在 com.example.mapper 包下创建 UserMapper.java 接口和 UserMapper.xml 映射文件。
public interface UserMapper {
User getUserById(int id);
}
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
4. 使用 MyBatis
在 Spring 配置文件中配置 MyBatis,并使用 Mapper 接口。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(int id) {
return userMapper.getUserById(id);
}
}
通过以上步骤,你就可以轻松地使用 MyBatis 来进行数据库操作了。MyBatis 提供了丰富的功能和灵活的配置方式,可以帮助你高效地开发数据库应用程序。
