MyBatis-Plus 自定义sql语句的实现

作者:IT贱男 时间:2022-12-24 23:16:16 

一、引言

Good Good Study,Day Day Up,童鞋点个关注,不迷路,么么哒~~~

MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么那么今天说说MP怎么自定义sql语句吧。

二、配置

自定义的sql当然是写在XML文件中的啦,那么首先来定义xml文件的位置,在yml配置文件如下


mybatis-plus:
# 如果是放在src/main/java目录下 classpath:/com/*/*/mapper/*Mapper.xml
# 如果是放在resource目录 classpath:/mapper/**.xml
mapper-locations: classpath:/mapper/**.xml

三、具体实现

使用注解实现:

在我们Mapper接口中定义自定义方法即可。


/**
* @Auther: IT贱男
* @Date: 2019/6/10 14:40
* @Description: User对象持久层
*/
public interface UserMapper extends BaseMapper<User> {

/**
  *
  * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法
  *
  * @param userWrapper
  * @return
  */
 @Select("SELECT * FROM user ${ew.customSqlSegment}")
 List<User> selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper);

/**
  * 和Mybatis使用方法一致
  * @param name
  * @return
  */
 @Select("SELECT * FROM user where name = #{name}")
 List<User> selectByName(@Param("name") String name);

}

使用xml文件实现:

使用xml一定要指定xml文件所在位置


/**
* @Auther: IT贱男
* @Date: 2019/6/10 14:40
* @Description: User对象持久层
*/
public interface UserMapper extends BaseMapper<User> {

/**
  *
  * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法
  *
  * @param userWrapper
  * @return
  */
 List<User> selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper);

/**
  * 和Mybatis使用方法一致
  * @param name
  * @return
  */
 List<User> selectByName(@Param("name") String name);

}

<?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.demo.mapper.UserMapper">

<select id="selectByName" resultType="com.example.demo.model.User">
   SELECT * FROM user where name = #{name}
 </select>

<select id="selectByMyWrapper" resultType="com.example.demo.model.User">
   SELECT * FROM user ${ew.customSqlSegment}
 </select>

</mapper>

测试测试:


 /**
  * 自定义sql查询语句
  */
 @Test
 public void selectByMySelect() {
   List<User> users = userMapper.selectByName("王天风");
   users.forEach(System.out::println);
 }

/**
  * 自定义sql使用Wrapper
  */
 @Test
 public void selectByMyWrapper() {
   QueryWrapper<User> wrapper = new QueryWrapper();
   wrapper.like("name", "雨").lt("age", 40);
   List<User> users = userMapper.selectByMyWrapper(wrapper);
   users.forEach(System.out::println);
 }

四、回答评论区提问

提问一:能否提供自定义Update语句与Wrapper的整合使用呢?


/**
* <p>
* 用户 Mapper 接口
* </p>
*
* @author IT贱男
* @since 2019-06-14
*/
public interface UserMapper extends BaseMapper<User> {

/**
  * 自定Wrapper修改
  *
  * @param userWrapper 条件构造器
  * @param user    修改的对象参数
  * @return
  */

int updateByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper, @Param("user") User user);

}

<?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.demo.mapper.UserMapper">

<update id="updateByMyWrapper">
   UPDATE user SET email = #{user.email} ${ew.customSqlSegment}
 </update>

</mapper>

 @Test
 public void updateByMyWrapper() {
   // 条件构造器
   QueryWrapper<User> wrapper = new QueryWrapper();
   wrapper.eq("name", "admin");

// 修改后的对象
   User user = new User();
   user.setEmail("Test@email.com");

userMapper.updateByMyWrapper(wrapper, user);

}

来源:https://blog.csdn.net/weixin_38111957/article/details/91539019

标签:MyBatis-Plus,自定义sql
0
投稿

猜你喜欢

  • Android贝塞尔曲线初步学习第二课 仿QQ未读消息气泡拖拽黏连效果

    2023-08-18 10:18:20
  • 详解如何在Spring Security中自定义权限表达式

    2023-11-08 05:11:24
  • Android ANR原理分析

    2023-02-01 13:11:58
  • 利用Matlab复刻羊了个羊小游戏

    2021-10-10 17:13:05
  • Spring Security角色继承分析

    2022-02-03 03:39:12
  • C#中List集合使用Max()方法查找到最大值的实例

    2023-12-01 08:03:32
  • C#如何利用反射将枚举绑定到下拉框详解

    2022-09-12 01:48:09
  • C# WORD操作实现代码

    2023-11-20 05:16:25
  • jackson反序列化时如何忽略不需要的字段

    2021-09-26 20:36:20
  • SpringBoot在RequestBody中使用枚举参数案例详解

    2022-12-15 05:16:30
  • dom4j读取XML文件详解

    2022-02-21 09:23:29
  • Android中ACTION_CANCEL的触发机制与滑出子view的情况

    2023-08-01 14:39:09
  • 详解SpringBoot获得Maven-pom中版本号和编译时间戳

    2022-11-27 19:45:27
  • Java实现根据模板自动生成新的PPT

    2022-10-22 18:31:31
  • 详解如何在C#中使用投影(Projection)

    2023-03-28 09:14:15
  • Android自定义View展开菜单功能的实现

    2022-02-08 06:28:49
  • 详解Spring Cloud中Hystrix的请求合并

    2022-07-06 14:53:06
  • 引入mybatis-plus报 Invalid bound statement错误问题的解决方法

    2021-06-01 14:28:00
  • springBoot项目如何实现启动多个实例

    2021-09-22 00:13:47
  • Java对象的XML序列化与反序列化实例解析

    2023-02-25 15:21:19
  • asp之家 软件编程 m.aspxhome.com