1 Mybatis-Plus简介

Mybatis-Plus 提供了多种方式来执行 SQL,包括使用注解、XML 映射文件和 Lambda 表达式等。其中,使用 Lambda 表达式是 Mybatis-Plus 推荐的方式,因为它更加直观和类型安全。

2 使用方法

1Lambda 表达式执行 SQL

以下是一个使用 Lambda 表达式执行 SQL 的示例,现在我们有一个名为User的实体类,其中包含idnameage属性:

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserServiceImpl extends ServiceImpl implements UserService {@Overridepublic List getUsersByName(String name) {LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();queryWrapper.eq(User::getName, name);return baseMapper.selectList(queryWrapper);}}

在这个示例中,我创建了一个LambdaQueryWrapper对象,使用eq方法指定查询条件为name = #{name},其中#{name}是参数占位符。

然后,调用baseMapper.selectList方法执行查询,并返回查询结果。

2 组合示例

要传递参数,可以将参数作为方法的参数,并在查询条件中使用eqneinlike等方法指定参数值。

例如,假设要查询年龄大于等于minAge,小于等于maxAge的用户,可以修改上面的示例代码如下:

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserServiceImpl extends ServiceImpl implements UserService {@Overridepublic List getUsersByAge(int minAge, int maxAge) {LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper();queryWrapper.ge(User::getAge, minAge).le(User::getAge, maxAge);return baseMapper.selectList(queryWrapper);}}

在这个示例中,我添加了一个新的方法getUsersByAge,其中两个参数minAgemaxAge分别表示最小年龄和最大年龄。

使用ge方法指定年龄大于等于minAge,使用le方法指定年龄小于等于maxAge

然后,调用baseMapper.selectList方法执行查询,并返回查询结果。

3 复杂sql

另外,如果需要执行复杂的 SQL,例如联合查询、分组查询等,可以使用 Mybatis-Plus 提供的 SQL 构建器,它可以帮助你构建复杂的 SQL 语句。

以下是一个使用 SQL 构建器执行联合查询的示例,假设你有一个名为Order的实体类,其中包含iduserIdamount属性,你需要查询每个用户的订单总金额:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.core.toolkit.Wrappers;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.stereotype.Service;import java.util.List;import java.util.Map;@Servicepublic class OrderServiceImpl extends ServiceImpl implements OrderService {@Overridepublic List<Map> getOrderAmountByUser() {QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.select("user_id", "sum(amount) as total_amount").groupBy("user_id");return baseMapper.selectMaps(queryWrapper);}}

在这个示例中,我创建了一个QueryWrapper对象,使用select方法指定要查询的字段为user_idsum(amount) as total_amount,其中sum(amount)表示每个用户的订单总金额,as total_amount是为结果集中的这个字段取别名。

然后,使用groupBy方法将结果按照user_id进行分组。

最后,调用baseMapper.selectMaps方法执行查询,并返回查询结果。

注意,在使用 SQL 构建器执行复杂的 SQL 语句时,需要使用正确的 SQL 语法,并且需要特别注意 SQL 注入的问题。

可以使用 Mybatis-Plus 提供的参数绑定方式来避免 SQL 注入问题,例如#{param}${param}等方式。

3 其他注入sql的方式

Mybatis-Plus 提供了多种注入 SQL 的方式,包括使用注解、XML 映射文件和 Lambda 表达式等。

不同的注入方式适用于不同的场景和需求,可以根据具体情况选择适合的方式。

以下是几种常用的注入 SQL 的方式:

1 使用注解

可以使用@Select@Update@Delete@Insert注解来注入 SQL 语句。例如:

@Select("SELECT * FROM user WHERE name = #{name}")List selectByName(@Param("name") String name);

在这个示例中,使用@Select注解注入了一条查询语句,其中#{name}表示参数占位符,@Param("name")表示参数名称。

使用这种方式注入 SQL 语句比较简单,但是不够灵活,不支持复杂的 SQL 语句。

2 使用 XML 映射文件

可以使用 XML 映射文件来注入 SQL 语句,这种方式可以支持复杂的 SQL 语句,并且可以将 SQL 和 Java 代码分离。

例如:在UserMapper.xml文件中:

SELECT * FROM user WHERE name = #{name}

UserMapper.java文件中:

List selectByName(@Param("name") String name);

在这个示例中,将查询语句写在 XML 映射文件中,使用标签指定 SQL 语句,并使用resultType属性指定返回结果类型。然后,在 Java 代码中调用该方法即可。