当前位置:   article > 正文

MyBatis-Plus 自定义sql语句_mybatisplus sql语句写在哪

mybatisplus sql语句写在哪

一、引言

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

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

二、配置

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

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

三、具体实现

使用注解实现:

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

  1. /**
  2. * @Auther: IT贱男
  3. * @Date: 2019/6/10 14:40
  4. * @Description: User对象持久层
  5. */
  6. public interface UserMapper extends BaseMapper<User> {
  7. /**
  8. *
  9. * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法
  10. *
  11. * @param userWrapper
  12. * @return
  13. */
  14. @Select("SELECT * FROM user ${ew.customSqlSegment}")
  15. List<User> selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper);
  16. /**
  17. * 和Mybatis使用方法一致
  18. * @param name
  19. * @return
  20. */
  21. @Select("SELECT * FROM user where name = #{name}")
  22. List<User> selectByName(@Param("name") String name);
  23. }

使用xml文件实现:

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

  1. /**
  2. * @Auther: IT贱男
  3. * @Date: 2019/6/10 14:40
  4. * @Description: User对象持久层
  5. */
  6. public interface UserMapper extends BaseMapper<User> {
  7. /**
  8. *
  9. * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法
  10. *
  11. * @param userWrapper
  12. * @return
  13. */
  14. List<User> selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper);
  15. /**
  16. * 和Mybatis使用方法一致
  17. * @param name
  18. * @return
  19. */
  20. List<User> selectByName(@Param("name") String name);
  21. }
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.example.demo.mapper.UserMapper">
  4. <select id="selectByName" resultType="com.example.demo.model.User">
  5. SELECT * FROM user where name = #{name}
  6. </select>
  7. <select id="selectByMyWrapper" resultType="com.example.demo.model.User">
  8. SELECT * FROM user ${ew.customSqlSegment}
  9. </select>
  10. </mapper>

测试测试:

  1. /**
  2. * 自定义sql查询语句
  3. */
  4. @Test
  5. public void selectByMySelect() {
  6. List<User> users = userMapper.selectByName("王天风");
  7. users.forEach(System.out::println);
  8. }
  9. /**
  10. * 自定义sql使用Wrapper
  11. */
  12. @Test
  13. public void selectByMyWrapper() {
  14. QueryWrapper<User> wrapper = new QueryWrapper();
  15. wrapper.like("name", "雨").lt("age", 40);
  16. List<User> users = userMapper.selectByMyWrapper(wrapper);
  17. users.forEach(System.out::println);
  18. }

四、回答评论区提问

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

  1. /**
  2. * <p>
  3. * 用户 Mapper 接口
  4. * </p>
  5. *
  6. * @author IT贱男
  7. * @since 2019-06-14
  8. */
  9. public interface UserMapper extends BaseMapper<User> {
  10. /**
  11. * 自定Wrapper修改
  12. *
  13. * @param userWrapper 条件构造器
  14. * @param user 修改的对象参数
  15. * @return
  16. */
  17. int updateByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper, @Param("user") User user);
  18. }
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.example.demo.mapper.UserMapper">
  4. <update id="updateByMyWrapper">
  5. UPDATE user SET email = #{user.email} ${ew.customSqlSegment}
  6. </update>
  7. </mapper>
  1. @Test
  2. public void updateByMyWrapper() {
  3. // 条件构造器
  4. QueryWrapper<User> wrapper = new QueryWrapper();
  5. wrapper.eq("name", "admin");
  6. // 修改后的对象
  7. User user = new User();
  8. user.setEmail("Test@email.com");
  9. userMapper.updateByMyWrapper(wrapper, user);
  10. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/479020
推荐阅读
相关标签
  

闽ICP备14008679号