引言
MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
对于想要学习 MyBatis 的开发者来说,本文将提供一个全面的入门攻略,包括基础概念、配置步骤、常用技巧以及实战案例,帮助您快速掌握 MyBatis,并在实际项目中应用。
MyBatis 基础概念
1. 映射器(Mapper)
MyBatis 的核心是 Mapper 接口和 XML 配置文件。Mapper 接口定义了数据库操作的抽象方法,而 XML 配置文件则包含了具体的 SQL 语句。
2. SQL 映射语句(SQL Mapper)
SQL 映射语句是 MyBatis 的核心,它定义了如何将 SQL 语句与 Java 对象进行映射。
3. 数据库连接池
MyBatis 使用数据库连接池来管理数据库连接,常用的连接池有 HikariCP、C3P0 和 Druid 等。
MyBatis 配置步骤
1. 添加依赖
在项目的 pom.xml 文件中添加 MyBatis 依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
2. 配置数据源
在 application.properties 或 application.yml 文件中配置数据源:
# application.properties
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=root
jdbc.password=root
jdbc.driver=com.mysql.jdbc.Driver
3. 配置 MyBatis
在 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="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
4. 编写 Mapper 接口
在对应的 Mapper 接口中定义数据库操作的抽象方法:
package com.example.mapper;
public interface UserMapper {
User getUserById(Integer id);
}
5. 编写 XML 映射文件
在对应的 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.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
MyBatis 常用技巧
1. 动态 SQL
MyBatis 支持动态 SQL,可以方便地根据条件拼接 SQL 语句。
<select id="getUserByCondition" resultType="com.example.entity.User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
2. 缓存
MyBatis 支持一级缓存和二级缓存,可以有效地提高查询效率。
3. 批处理
MyBatis 支持批处理,可以批量执行 SQL 语句,提高数据库操作效率。
MyBatis 实战案例
以下是一个使用 MyBatis 查询用户信息的简单示例:
- 创建 User 实体类:
package com.example.entity;
public class User {
private Integer id;
private String name;
private Integer age;
// getters and setters
}
- 创建 UserMapper 接口:
package com.example.mapper;
public interface UserMapper {
User getUserById(Integer id);
}
- 创建 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">
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
- 创建 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="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 创建 MyBatis 工具类:
package com.example.util;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(MyBatisUtil.class.getResourceAsStream("/mybatis-config.xml"));
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
public static SqlSession openSession() {
return sqlSessionFactory.openSession();
}
}
- 使用 MyBatis 查询用户信息:
package com.example.service;
import com.example.entity.User;
import com.example.mapper.UserMapper;
public class UserService {
public User getUserById(Integer id) {
SqlSession session = MyBatisUtil.openSession();
try {
UserMapper userMapper = session.getMapper(UserMapper.class);
return userMapper.getUserById(id);
} finally {
session.close();
}
}
}
通过以上步骤,您就可以使用 MyBatis 查询用户信息了。
总结
本文详细介绍了 Java 开源框架 MyBatis 的入门知识,包括基础概念、配置步骤、常用技巧和实战案例。希望本文能帮助您快速掌握 MyBatis,并在实际项目中应用。在学习过程中,请多加练习,不断提高自己的技能水平。
