MyBatis-plus如何执行自定义SQL

 更新时间:2024年02月19日 16:47:33   作者:ha_lydms  
这篇文章主要介绍了MyBatis-plus如何执行自定义SQL问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、原生MyBatis执行

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;

import java.sql.SQLException;

public class TestMySql {
    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;

    //    自定义执行SQL
    public void mySql() throws SQLException {
        String sql = "select * from User";
        SqlSession sqlSession = openSession();
        sqlSession.getConnection().prepareStatement(sql);
        closeSession(sqlSession);
    }

    //    开启链接
    private SqlSession openSession() {
        SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory();
        return sqlSessionFactory.openSession();
    }

    //    关闭链接
    private void closeSession(SqlSession sqlSession) {
        sqlSession.close();
    }
}

二、MyBatis 执行

2.1、调用dao

String sql = "Select * From User";
sqlMapper.explainQuery(sql);

2.2、dao层接口配置

@SqlParser(filter = true)
void explainQuery(String sql);

2.3、dao中xml配置

<update id="explainQuery">
  ${templateName,jdbcType=VARCHAR}
</update>

三、MyBatis-plus中Sql注入器

3.1、编写MyBaseMapper(要添加方法)

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public interface MyBaseMapper<T> extends BaseMapper<T> {
    List<T> findAll();
}

3.2、编写FindAll(方法具体实现)

import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;

public class FindAll extends AbstractMethod {
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        String sqlMethod = "findAll";
        String sql = "select * from " + tableInfo.getTableName();
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
        return this.addSelectMappedStatement(mapperClass, sqlMethod, sqlSource, modelClass, tableInfo);
    }
}

3.3、编写MySqlInjector(注册到MyBatis-plus中)

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;

import java.util.List;

public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList() {
        List<AbstractMethod> methodList = super.getMethodList();
        methodList.add(new FindAll()); // 再扩充自定义的方法
        list.add(new FindAll());
        return methodList;
    }
}

3.4、编写MySqlInjector(注册到MyBatis-plus中)

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;

import java.util.List;

public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList() {
        List<AbstractMethod> methodList = super.getMethodList();
        methodList.add(new FindAll()); // 再扩充自定义的方法
        list.add(new FindAll());
        return methodList;
    }
}

### 2.4、注册到Spring容器

```java
/*** 自定义SQL注入器 */
@Bean
public MySqlInjector mySqlInjector() {
    return new MySqlInjector();
}

3.5、测试

@Test
public void testFindAll() {
    List<User> users = this.userMapper.findAll();
    for (User user : users) {
        System.out.println(user);
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java数据结构与算法之二分查找详解

    Java数据结构与算法之二分查找详解

    这篇文章主要介绍了Java数据结构与算法之二分查找详解,二分查找算法是一种在有序数组中查找某一特定元素的搜索算法,其思想就是不断地将有序查找表“一分为二”,逐渐缩小搜索区域,进而找到目标元素,需要的朋友可以参考下
    2023-12-12
  • Java如何导入Jsoup库做一个有趣的爬虫项目

    Java如何导入Jsoup库做一个有趣的爬虫项目

    Jsoup库是一款Java的HTML解析器,可用于从网络或本地文件中获取HTML文档并解析其中的数据,这篇文章给大家介绍Java导入Jsoup库做一个有趣的爬虫项目,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • Java中的CyclicBarrier同步屏障详解

    Java中的CyclicBarrier同步屏障详解

    这篇文章主要介绍了Java中的CyclicBarrier同步屏障详解,CyclicBarrier也叫同步屏障,在JDK1.5被引入,可以让一组线程达到一个屏障时被阻塞,直到最后一个线程达到屏障时,屏障才会开门,所有被阻塞的线程才会继续执行,需要的朋友可以参考下
    2023-09-09
  • Kotlin 泛型详解及简单实例

    Kotlin 泛型详解及简单实例

    这篇文章主要介绍了 Kotlin 泛型详解及简单实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • MyBatis一对一映射初识教程

    MyBatis一对一映射初识教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。在我们生活中一对一的例子很多见,下面通过本文给大家带来了mybatis一对一映射初识教程,感兴趣的朋友一起看下吧
    2016-08-08
  • Spring Boot集成教程之异步调用Async

    Spring Boot集成教程之异步调用Async

    在项目中,当访问其他人的接口较慢或者做耗时任务时,不想程序一直卡在耗时任务上,想程序能够并行执行,我们可以使用多线程来并行的处理任务,也可以使用spring提供的异步处理方式@Async。需要的朋友们下面来一起看看吧。
    2018-03-03
  • Java中wait()与sleep()两者的不同深入解析

    Java中wait()与sleep()两者的不同深入解析

    在Java多线程编程中,wait()和sleep()是控制线程执行和等待的两个关键方法,但它们在应用场景和实现上有显著差异,这篇文章主要介绍了Java中wait()与sleep()两者的不同,需要的朋友可以参考下
    2024-11-11
  • MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询

    MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询

    本文主要介绍了MybatisPlus使用Mybatis的XML的动态SQL的功能实现多表查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • SpringBoot Admin 使用指南(推荐)

    SpringBoot Admin 使用指南(推荐)

    这篇文章主要介绍了SpringBoot Admin 使用指南(推荐),Spring Boot Admin 是一个管理和监控你的 Spring Boot 应用程序的应用程序,非常具有实用价值,需要的朋友可以参考下
    2018-01-01
  • Spring实例化Bean的三种方式详解

    Spring实例化Bean的三种方式详解

    在Spring中,构建应用程序主干并且由Spring IoC容器管理的对象被称为beans,bean是一个由Spring容器实例化,组装和管理的对象,本文给大家介绍了Spring实例化Bean的三种方式,并有详细的代码示例供大家参考,需要的朋友可以参考下
    2025-08-08

最新评论