MyBatis、MyBatis-Plus、MyBatis-Example 查询数据库的方式

常见技术问题 刘宇帅 6天前 阅读量: 51

在使用 MyBatisMyBatis-PlusMyBatis-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,可以根据条件构建查询语句,例如使用 ifwhere 标签:

<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 接口提供了许多内置的查询方法,例如 selectByIdselectList 等。

public interface UserMapper extends BaseMapper<User> {
}

// 使用内置方法查询
@Autowired
private UserMapper userMapper;

public User getUserById(int id) {
    return userMapper.selectById(id);
}

2.2 使用条件构造器查询

MyBatis-Plus 提供了 QueryWrapperLambdaQueryWrapper 作为条件构造器,支持链式查询条件。

@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 可以满足各种复杂程度不同的查询需求。选择哪种方式取决于项目需求和团队的技术栈偏好。

提示

功能待开通!


暂无评论~