MyBatis 是一款优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。下面,我将从实用的技巧和实战案例两个方面,帮助新手轻松掌握 MyBatis。
一、MyBatis 实用技巧
1. Mapper 文件配置
在 MyBatis 中,Mapper 文件是核心配置之一。以下是一些技巧:
- 命名规范:通常情况下,Mapper 文件的名称和接口类名称相同。
- 返回类型:在 XML 文件中,返回类型应与 Java 类型完全一致。
- 命名空间:命名空间通常是接口类的完整限定名。
<?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">
<!-- SQL 语句 -->
</mapper>
2. 动态 SQL
MyBatis 提供了丰富的动态 SQL 语法,例如 <if>, <choose>, <foreach> 等。以下是一些实用技巧:
- 判断语句:使用
<if>标签实现条件查询。 - 选择语句:使用
<choose>标签实现多条件查询。 - 遍历语句:使用
<foreach>标签遍历集合。
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<if test="id != null">
id = #{id}
</if>
<if test="username != null">
AND username = #{username}
</if>
</where>
</select>
3. 参数传递
在 MyBatis 中,有多种参数传递方式:
- 单个参数:使用
#{}进行命名参数传递。 - 多个参数:使用
@Param注解进行命名参数传递。 - 对象传递:将参数封装成对象进行传递。
public interface UserMapper {
List<User> selectUsers(@Param("id") Integer id, @Param("username") String username);
}
二、MyBatis 实战案例
1. CRUD 操作
以下是一个简单的 CRUD 操作示例:
public interface UserMapper {
int insert(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKey(User record);
int deleteByPrimaryKey(Integer id);
}
public class UserMapperImpl implements UserMapper {
private SqlSession sqlSession;
@Override
public int insert(User record) {
return sqlSession.insert("com.example.mapper.UserMapper.insert", record);
}
@Override
public User selectByPrimaryKey(Integer id) {
return sqlSession.selectOne("com.example.mapper.UserMapper.selectByPrimaryKey", id);
}
@Override
public int updateByPrimaryKey(User record) {
return sqlSession.update("com.example.mapper.UserMapper.updateByPrimaryKey", record);
}
@Override
public int deleteByPrimaryKey(Integer id) {
return sqlSession.delete("com.example.mapper.UserMapper.deleteByPrimaryKey", id);
}
}
2. 分页查询
MyBatis 支持分页查询,以下是一个使用分页插件实现分页的示例:
public interface UserMapper {
List<User> selectUsersByPage(int offset, int limit);
}
public class UserMapperImpl implements UserMapper {
private SqlSession sqlSession;
@Override
public List<User> selectUsersByPage(int offset, int limit) {
return sqlSession.selectList("com.example.mapper.UserMapper.selectUsersByPage", new PageParameter(offset, limit));
}
}
其中,PageParameter 是自定义的分页参数类。
通过以上介绍,相信你已经对 MyBatis 的实用技巧和实战案例有了更深入的了解。在实际项目中,多加练习和总结,你会更加熟练地掌握 MyBatis。祝你在学习 MyBatis 的道路上越走越远!
