Java中Mybatis-Plus使用方式介绍
作者:颜淡慕潇 发布时间:2021-11-14 05:49:56
1 Mybatis-Plus简介
Mybatis-Plus 提供了多种方式来执行 SQL,包括使用注解、XML 映射文件和 Lambda 表达式等。其中,使用 Lambda 表达式是 Mybatis-Plus 推荐的方式,因为它更加直观和类型安全。
2 使用方法
1 Lambda 表达式执行 SQL
以下是一个使用 Lambda 表达式执行 SQL 的示例,现在我们有一个名为
User
的实体类,其中包含id
、name
和age
属性:
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;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public List<User> getUsersByName(String name) {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getName, name);
return baseMapper.selectList(queryWrapper);
}
}
在这个示例中,我创建了一个 LambdaQueryWrapper 对象,使用 eq 方法指定查询条件为 name = #{name},其中 #{name} 是参数占位符。
然后,调用 baseMapper.selectList 方法执行查询,并返回查询结果。
2 组合示例
要传递参数,可以将参数作为方法的参数,并在查询条件中使用
eq
、ne
、in
、like
等方法指定参数值。例如,假设要查询年龄大于等于
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;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public List<User> getUsersByAge(int minAge, int maxAge) {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(User::getAge, minAge).le(User::getAge, maxAge);
return baseMapper.selectList(queryWrapper);
}
}
在这个示例中,我添加了一个新的方法 getUsersByAge,其中两个参数 minAge 和 maxAge 分别表示最小年龄和最大年龄。
使用 ge 方法指定年龄大于等于 minAge,使用 le 方法指定年龄小于等于 maxAge。
然后,调用 baseMapper.selectList 方法执行查询,并返回查询结果。
3 复杂sql
另外,如果需要执行复杂的 SQL,例如联合查询、分组查询等,可以使用 Mybatis-Plus 提供的 SQL 构建器,它可以帮助你构建复杂的 SQL 语句。
以下是一个使用 SQL 构建器执行联合查询的示例,假设你有一个名为 Order 的实体类,其中包含 id、userId 和 amount 属性,你需要查询每个用户的订单总金额:
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;
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Override
public List<Map<String, Object>> getOrderAmountByUser() {
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
queryWrapper.select("user_id", "sum(amount) as total_amount")
.groupBy("user_id");
return baseMapper.selectMaps(queryWrapper);
}
}
在这个示例中,我创建了一个 QueryWrapper 对象,使用 select 方法指定要查询的字段为 user_id 和 sum(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<User> selectByName(@Param("name") String name);
在这个示例中,使用
@Select
注解注入了一条查询语句,其中#{name}
表示参数占位符,@Param("name")
表示参数名称。使用这种方式注入 SQL 语句比较简单,但是不够灵活,不支持复杂的 SQL 语句。
2 使用 XML 映射文件
可以使用 XML 映射文件来注入 SQL 语句,这种方式可以支持复杂的 SQL 语句,并且可以将 SQL 和 Java 代码分离。
例如:在
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="selectByName" resultType="User">
SELECT * FROM user WHERE name = #{name}
</select>
</mapper>
在 UserMapper.java
文件中:
List<User> selectByName(@Param("name") String name);
在这个示例中,将查询语句写在 XML 映射文件中,使用
<select>
标签指定 SQL 语句,并使用resultType
属性指定返回结果类型。然后,在 Java 代码中调用该方法即可。
来源:https://blog.csdn.net/weixin_36755535/article/details/130978693


猜你喜欢
- 刚接触了一个微服务架构的项目,了解到了启动方式,记录一下1、找到workspace.xml2.打开workspace.xml,找到其中的配置
- 单例模式的介绍说到单例模式,大家第一反应应该就是——什么是单例模式?,从“单例”字面意思上理解为——一个类只有一个实例,所以单例模式也就是保
- cron表达式每天整点执行一次的问题最近写了个发短信的定时任务,需求是每天上午10点发信息,然后我百度了一篇文章,复制了一个cron表达式:
- 本文研究的主要是Hibernate hql查询的相关内容,具体如下。HQL介绍Hibernate语言查询(Hibernate Query L
- 不是很难的知识,但是今天犯错了,记录一下什么是 stream 流我们在使用集合或数组对元素进行操作时往往会遇到这种情况:通过对不同类型的存储
- Android 属性动画ValueAnimator与插值器详解一、ValueAnimator详解:ValueAnimator是整个动画的核心
- 一,使用注解: 在spring的配置文件applicationContext.xml中,加入注解扫描。配
- 声明:本文中资源全部收集整理于网络并无偿提供,仅可用于个人学习交流;请勿转载、售卖或商用;侵权联删!免责声明:本教程所有资源均来源于网络;仅
- 本文为大家分享了C#实现图书管理系统课程设计,供大家参考,具体内容如下一、设计目的通过模拟图书管理系统,实现以下功能学生账号的注册学生对馆藏
- C++11中的std::packaged_task是个模板类。std::packaged_task包装任何可调用目标(函数、lambda表达
- 问题描述这里我想测试某个与springboot相关的问题,结果在搭建mybatis时,发现没有成功从数据库中获取数据,报错信息为com.my
- TV 3D卡片无限循环效果,供大家参考,具体内容如下##前言1、需求:实现3个卡片实现无限循环效果:1-2-3-1-2-3-1…,而且要实现
- 本文根据一个简单的user表为例,展示 springboot集成mybatis,再到前端分页完整代码(新手自学,不足之处欢迎纠正);先看ja
- 做消息通信,消息会不断从网络流中取得,而后台也有线程不断消费。本来我一直是使用一些线程安全标识或方法来控制,后来在网上找到一些java新特性
- Flutter 键值存储数据库键值存储是开发中十分常见的需求,在Flutter开发中,一般使用 shared_preferences 插件来
- 1.包1.包的三大作用区分相同名字的类当类很多时,可方便管理控制访问范围2.包的基本语法package abc.www;3.包的本质实际上就
- 前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢?int a = 1;double b = a;Console.Wr
- 前段时间摸索了java调用matlab东西,不说学的有多深,也算有结果了,达到目的了。也即用java程序可以调用matlab中函数了。&nb
- 前言如今多线程编程已成为了现代软件开发中的重要部分,而并发编程中的线程同步问题更是一道难以逾越的坎。在Java语言中,synchronize
- 一、概述;从字面上讲,就是停止这个世界,看到这个字眼,就觉得这是可怕的事情,那到底什么是stop-the-world?stop-the-wo