推荐:MyBatis Plus汇总

MyBatis-Plus 之自定义sql

首先创建一个数据库表,如下图所示:

然后创建一个Spring Boot项目,pom.xml和配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.kaven</groupId><artifactId>mybatis-plus</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/></parent><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
spring:application:name: mybatis-plusdatasource:driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: ITkaven@123url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&useSSL=falseserver:port: 8085logging:level:root: warncom.kaven.mybatisplus.dao: tracepattern:console: '%p%m%n'

实体类User:

package com.kaven.mybatisplus.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@TableName("user")
@Data
public class User {@TableIdprivate String id;@TableField("username")private String username;@TableField("password")private String password;@TableField("age")private Integer age;/*** 使用 @TableField(exist = false) ,表示该字段在数据库中不存在 ,所以不会插入数据库中* 使用 transient 、 static 修饰属性也不会插入数据库中*/@TableField(exist = false)private String phone;
}

启动类:

package com.kaven.mybatisplus;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan(basePackages = "com.kaven.mybatisplus.dao")
public class AppRun {public static void main(String[] args) {SpringApplication.run(AppRun.class , args);}
}

@MapperScan(basePackages = "com.kaven.mybatisplus.dao")这个一定要加上。

我们先在数据库中添加几行数据,方便演示。

使用MyBatis-Plus来自定义sql,可以用Mybatis的方式来实现。

  • 通过Mybatis的注解

Mapper接口UserMapper:

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.kaven.mybatisplus.entity.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;import java.util.List;@Component
public interface UserMapper extends BaseMapper<User> {@Select("select * from user ${ew.customSqlSegment}")List<User> selectBySql(@Param(Constants.WRAPPER) Wrapper<User> userWrapper);
}

测试方法:

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.kaven.mybatisplus.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.HashMap;
import java.util.List;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperSqlTest {@Autowiredprivate UserMapper userMapper;@Testpublic void selectBySql(){LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();userLambdaQueryWrapper.like(User::getUsername , "k").lt(User::getAge , 40).last("limit 4");List<User> userList = userMapper.selectBySql(userLambdaQueryWrapper);userList.forEach(System.out::println);}
}

结果如下:

结果是正确的。

  • 通过Mybatis的Mapper.xml

添加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.kaven.mybatisplus.dao.UserMapper"><select id="selectBySql" resultType="com.kaven.mybatisplus.entity.User">select * from user ${ew.customSqlSegment}</select>
</mapper>

修改配置文件:

spring:application:name: mybatis-plusdatasource:driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: ITkaven@123url: jdbc:mysql://47.112.7.219:3306/test?characterEncoding=utf-8&useSSL=falseserver:port: 8085logging:level:root: warncom.kaven.mybatisplus.dao: tracepattern:console: '%p%m%n'mybatis-plus:mapper-locations: classpath:mappers/*.xml

添加Mapper.xml文件路径的配置。

把UserMapper接口中@Select注解那一行删掉。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.kaven.mybatisplus.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;import java.util.List;@Component
public interface UserMapper extends BaseMapper<User> {List<User> selectBySql(@Param(Constants.WRAPPER) Wrapper<User> userWrapper);
}

测试代码不变。

package com.kaven.mybatisplus.dao;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.kaven.mybatisplus.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.HashMap;
import java.util.List;
import java.util.Map;@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperSqlTest {@Autowiredprivate UserMapper userMapper;@Testpublic void selectBySql(){LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();userLambdaQueryWrapper.like(User::getUsername , "k").lt(User::getAge , 40).last("limit 4");List<User> userList = userMapper.selectBySql(userLambdaQueryWrapper);userList.forEach(System.out::println);}
}

结果如下:

结果是一样的。

这样就使用MyBatis-Plus来自定义了sql,如果有些业务逻辑很难用MyBatis-Plus来实现,就可以通过自定义sql来完成。

写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!

MyBatis-Plus 之自定义sql相关推荐

  1. mybatis直接使用自定义sql查询数据

    2019独角兽企业重金招聘Python工程师标准>>> dao层,增加SqlMapper.java和 对应的SQLMapper.xml package rg.contacts.map ...

  2. Mybatis之执行自定义SQL举例

    本文说明如何使用Mybatis执行我自定义输入的SQL语句. 需要的mybaits文件包括:配置文件(mybatis-config-dao.xml 和 jdbc.properties).接口文件(IS ...

  3. java用tkmapper分组查询_tk.mybatis 中的通用Mapper自定义SQL语句

    前言 今天就是想写点什么,其实还有很多没写的东西呢!笔记里边好多东西都挺好的,经验加实践总结出来的.就是都没有系统的整理,至于原因吧,有很多,最重要的一点就是我有点懒.今天写个最简单的东西,现在的开发 ...

  4. Mybatis Plus——以XML方式使用 Wrapper 自定义SQL时IDEA错误[**expected, got ‘${‘]解决方案

    问题描述 '(', ',', CROSS, FOR, GROUP, HAVING, INNER, INTO, JOIN, LEFT, LIMIT, LOCK, NATURAL, ORDER, PROC ...

  5. mybatis plus按时间段查询_MybatisPlus自定义Sql实现多表查询的示例

    前言 前段时间看同事的代码,发现他用Layui+MybatisPlus做分页查询做得很规整,认真看了下代码发现这种方式不仅适用于与Layui做分页查询,在任何时候需要多表联查的时候都可以用到. 以下以 ...

  6. MyBatis 源码分析 - SQL 的执行过程

    本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程.该过程本身比较复杂,牵涉到的技术点比较多.包括但不限于 Mapper 接口代理类的生成.接口方法的解析.SQL 语句的解析.运 ...

  7. 自定义报错返回_MybatisPlus基础篇学习笔记(五)------自定义sql及分页查询

    本章目录 自定义sql 分页查询 1. 自定义sql 在dao文件中编写自定义接口,并在方法上使用注解形式注入SQL,如图所示: 第一种: 第二种 ① application.yml加入下面配置 my ...

  8. Mybaits自定义SQL

    最近有个同事要包装一个可以执行sql语句的功能用的是mybatis 最开始他想到的方案是拿到数据库连接再执行sql语句. 后来出了某些错误来问我,为了寻求比较快的解决方法于是我就试试了下下面的方法. ...

  9. mybatis对java自定义注解的使用——入门篇

    转自:https://www.cnblogs.com/sonofelice/p/4980161.html 1. 最近在学习spring和ibatis框架. 以前在天猫实习时做过的一个小项目用到的myb ...

  10. Mybatis(5)自定义Mybatis分析以及自定义实现

    执行查询所有和创建代理对象的分析 执行查询所有分析,是对selectList()方法的执行,执行步骤如下 提供:连接信息和映射信息 1.读取配置文件,SqlMapConfig.xml->IUse ...

最新文章

  1. Python爬虫-HTMLSession的使用
  2. PHP算法按数组某一字段进行排序
  3. Spring 3.1缓存和@CacheEvict
  4. [css] 元素竖向的百分比设置是相对容器的高度吗?
  5. cygwin 编译 android vlc,Cygwin 编译 VLC 问题
  6. 遍历字典_十三、Python字典三种遍历方法
  7. Emacs + ecb使用(Emacs必须24.3以上版本)
  8. linux下好用的截图工具,Linux系统下一款比较易用的截图工具
  9. java inputstream编码格式_纯文本-FileInputStream的编码与解码方式
  10. 解读OOM killer机制输出的日志
  11. python这个单词的含义是什么_python style是什么意思
  12. 自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码
  13. 注解和注解处理器APT
  14. 国内家具行业数据浅析
  15. qq邮件如何设置html阅读,如何得知对方是否已阅读QQ邮件?
  16. ZZULIOJ:1091: 童年生活二三事(多实例测试)
  17. 新手Web前八道题训练
  18. Listio官网教程
  19. SparkSQL讲解
  20. 搜狗浏览器收藏夹目录设置

热门文章

  1. iPad协议-小程序code非常稳定
  2. typedef 简介
  3. 罗马音平假名中文可复制_如何用学中文的方式学日语?这个方法要看看
  4. Cannot obtain license for Compiler (feature compiler) with license version = 2.2(转)
  5. C#编码格式转换,Url,escape,unicode编码和解码
  6. 面试题:如何在一千万个不重复整数(电话号码)中查找某个特定数 位运算 bitmap
  7. airtestide 下载后打不开_AirtestIDE详解
  8. 凌骥电源维修GV视频服务器电源维修BPL550AC12-GVG
  9. oracle 查询表中字段名称和注释
  10. ADS仿真微带型lange耦合器学习笔记