MyBatis、MyBatis-Plus、MyBatis-Example 查询数据库的方式
常见技术问题 刘宇帅 6天前 阅读量: 51
在使用 MyBatis、MyBatis-Plus 和 MyBatis-Example 时,查询数据库可以通过多种方式来实现。以下是这三个工具查询数据库的常用方式和示例。
1. MyBatis 查询方式
MyBatis 是一个轻量级的持久层框架,支持自定义 SQL 查询。通常查询数据库的方式包括通过 XML 映射文件、注解、自定义 SQL 查询等。
1.1 XML 映射文件查询
MyBatis 中的常见方式是通过 XML 文件配置 SQL 查询语句。例如:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<select id="selectById" parameterType="int" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
对应的接口定义:
public interface UserMapper {
User selectById(int id);
}
1.2 注解方式查询
MyBatis 支持通过注解直接在接口中定义 SQL 查询语句:
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User selectById(@Param("id") int id);
}
1.3 动态 SQL 查询
MyBatis 支持动态 SQL,可以根据条件构建查询语句,例如使用 if
、where
标签:
<select id="findByConditions" resultType="User">
SELECT * FROM users
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
对应接口:
public interface UserMapper {
List<User> findByConditions(@Param("name") String name, @Param("age") Integer age);
}
2. MyBatis-Plus 查询方式
MyBatis-Plus 是 MyBatis 的增强工具,提供了一些内置的 CRUD 接口,简化了查询操作。MyBatis-Plus 中常用的查询方式包括 BaseMapper
的内置方法和条件构造器。
2.1 使用 BaseMapper
的内置方法
MyBatis-Plus 的 BaseMapper
接口提供了许多内置的查询方法,例如 selectById
、selectList
等。
public interface UserMapper extends BaseMapper<User> {
}
// 使用内置方法查询
@Autowired
private UserMapper userMapper;
public User getUserById(int id) {
return userMapper.selectById(id);
}
2.2 使用条件构造器查询
MyBatis-Plus 提供了 QueryWrapper
和 LambdaQueryWrapper
作为条件构造器,支持链式查询条件。
@Autowired
private UserMapper userMapper;
public List<User> getUsersByConditions(String name, Integer age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", name).ge("age", age);
return userMapper.selectList(queryWrapper);
}
也可以使用 LambdaQueryWrapper
以更强的类型安全方式:
LambdaQueryWrapper<User> lambdaQuery = new LambdaQueryWrapper<>();
lambdaQuery.eq(User::getName, name).ge(User::getAge, age);
return userMapper.selectList(lambdaQuery);
3. MyBatis-Example 查询方式
MyBatis-Example 提供了基于条件构造器的查询方式,通常通过 Example
类来实现动态查询条件,简化复杂 SQL 查询条件的构建。MyBatis-Example
通常与 tk.mybatis.mapper
一起使用。
3.1 使用 Example
进行条件查询
MyBatis-Example 中的 Example
类允许我们以面向对象的方式构建查询条件:
@Autowired
private UserMapper userMapper;
public List<User> getUsersByConditions(String name, Integer age) {
Example example = new Example(User.class);
Example.Criteria criteria = example.createCriteria();
if (name != null) {
criteria.andEqualTo("name", name);
}
if (age != null) {
criteria.andGreaterThanOrEqualTo("age", age);
}
return userMapper.selectByExample(example);
}
4. 三种方式的总结
方式 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
MyBatis XML | 复杂 SQL 查询,灵活的 SQL 控制 | SQL 灵活,可支持复杂查询 | 需要手动编写 XML |
MyBatis 注解 | 简单 SQL 查询 | 更直接的查询定义方式 | 注解不适合复杂查询 |
MyBatis 动态 SQL | 条件查询,根据传参动态构建 SQL | SQL 语句动态生成 | 配置 XML 文件 |
MyBatis-Plus 内置方法 | 简单的 CRUD 操作,快速实现基本数据库操作 | 内置 CRUD 方法,减少代码量 | 灵活性相对低,适用于简单查询 |
MyBatis-Plus 条件构造器 | 条件查询和动态查询,数据量大、条件复杂的业务场景 | 链式调用,类型安全 | 需熟悉 MyBatis-Plus 语法 |
MyBatis-Example | 动态条件查询,生成的条件 SQL 比较多、结构化查询较多的项目场景 | 条件构造器更直观,简化动态查询的编写 | 依赖 Example 类进行查询 |
通过这些方式,MyBatis、MyBatis-Plus 和 MyBatis-Example 可以满足各种复杂程度不同的查询需求。选择哪种方式取决于项目需求和团队的技术栈偏好。