MyBatis-plus配置自定义SQL(执行用户传入SQL)

2023-08-10 08:19:20 浏览数 (1)

序号

类型

地址

1

MySQL

MySQL操作之概念、SQL约束(一)

2

MySQL

MySQL操作之数据定义语言(DDL)(二)

3

MySQL

MySQL操作之数据操作语言(DML)(三)

4

MySQL

MySQL操作之数据查询语言:(DQL)(四-1)(单表操作)

5

MySQL

MySQL操作之数据查询语言:(DQL)(四-2)(多表查询)

6

MySQL

MySQL操作之数据控制语言:(DC)(五)

7

MySQL

MySQL操作之数据库函数

8

MySQL

MySQL管理之数据类型

9

MySQL

MySQL管理之索引

10

MySQL

MySQL管理之事务管理

11

MySQL

MySQL管理之存储过程

12

MySQL

MySQL管理之视图

13

MySQL

MySQL管理之数据备份与还原

14

MySQL

Linux(centos 7.5)服务器安装MySQL

15

MyBatis

MyBatis从入门到多表关联

16

MyBatis

MyBatis常用方法

17

MyBatis

Mybatis逆向工程的使用(附文件地址)

18

MyBatis

spring boot连接Mybatis数据库的配置文件(MySql、SQLserver、Oracle)

19

MyBatis-Plus

Mybatis-Plus使用案例(包括初始化以及常用插件)

20

MyBatis-Plus

Mybatis-Plus(Service CRUD 接口)

21

MyBatis-Plus

Mybatis-plus 4种条件构造器方式

22

MyBatis-Plus

Mybatis-Plus 执行自定义SQL

23

MyBatis-Plus

MyBatis-plus配置自定义SQL(执行用户传入SQL)

24

MyBatis-Plus

Mybatis-Plus(连接Hive)

25

MyBatis-Plus

Mybatis-Plus 代码生成器

一、原生MyBatis执行

代码语言:javascript复制
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

代码语言:javascript复制
String sql = "Select * From User";
sqlMapper.explainQuery(sql);

2.2、dao层接口配置

代码语言:javascript复制
@SqlParser(filter = true)
void explainQuery(String sql);

2.3、dao中xml配置

代码语言:javascript复制
<update id="explainQuery">
  ${templateName,jdbcType=VARCHAR}
</update>

三、MyBatis-plus中Sql注入器

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

代码语言:javascript复制
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public interface MyBaseMapper<T> extends BaseMapper<T> {
    List<T> findAll();
}

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

代码语言:javascript复制
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中)

代码语言:javascript复制
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中)

代码语言:javascript复制
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、测试

代码语言:javascript复制
@Test
public void testFindAll() {
    List<User> users = this.userMapper.findAll();
    for (User user : users) {
        System.out.println(user);
    }
}

0 人点赞