SpringBoot集成MyBatis-Plus自定義SQL


1.說明

本文介紹Spring Boot集成MyBatis-Plus框架后,
基於已經創建好的Spring Boot工程,
添加自定義的SQL實現復雜查詢等操作。
自定義SQL主要有兩種方式,
一種是Annotation注解方式,
另一種是XML配置文件方式。

2.Annotation注解方式

直接先定義接口方法,
然后在接口方法上面開發注解即可。
下面的示例實現了通過@Select注解,
在注解中開發自定義SQL語句,
實現了通過ID查詢用戶的方法:

package com.example.demo.dao;

import org.apache.ibatis.annotations.Select;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;

public interface UserDao extends BaseMapper<User> {

    @Select("SELECT * FROM TBL_USER WHERE id=#{id};")
    public User getUserById(Long id);
}

3.XML配置文件方式

首先在Spring Boot中指定需要加載的XML文件,
然后新建對應接口類的XML文件,
開發對應接口方法的自定義SQL語句。

現有通過ID查詢用戶的自定義接口如下:

package com.example.demo.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;

public interface UserDao extends BaseMapper<User> {

    public User getUserById(Long id);
}

首先修改application.yml文件:

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

然后在src\main\resources目錄下,
創建目錄mapper,
在mapper下創建文件UserDao.xml,
在XML文件中開發自定義SQL語句:

<?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.dao.UserDao">
 
    <select id="getUserById" parameterType="Long" resultType="com.example.demo.entity.User">
        SELECT * FROM TBL_USER WHERE id = #{id}
    </select>
</mapper>

4.兩種方式共存

Annotation注解和XML配置文件這兩種方式,
可以同時使用,代碼可以正常執行,
不會沖突,也不會報錯。
但是如果自定義了一個接口方法,
沒有對應到任何實現的SQL語句,
就會報沒有找到SQL綁定的錯誤異常:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.demo.dao.UserDao.getUserByIdAnnotation
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)
    at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.<init>(MybatisMapperMethod.java:50)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.lambda$cachedMapperMethod$0(MybatisMapperProxy.java:101)
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(Unknown Source)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.cachedMapperMethod(MybatisMapperProxy.java:100)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:95)
    at com.sun.proxy.$Proxy79.getUserByIdAnnotation(Unknown Source)
    at com.example.demo.SampleTest.testSelectByAnnotations(SampleTest.java:31)

5.參考文章

MyBatis-Plus 自定義sql語句


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM