欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis-plus如何執(zhí)行自定義SQL

 更新時(shí)間:2024年02月19日 16:47:33   作者:ha_lydms  
這篇文章主要介紹了MyBatis-plus如何執(zhí)行自定義SQL問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、原生MyBatis執(zhí)行

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;

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

    //    開(kāi)啟鏈接
    private SqlSession openSession() {
        SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory();
        return sqlSessionFactory.openSession();
    }

    //    關(guān)閉鏈接
    private void closeSession(SqlSession sqlSession) {
        sqlSession.close();
    }
}

二、MyBatis 執(zhí)行

2.1、調(diào)用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、編寫(xiě)MyBaseMapper(要添加方法)

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

3.2、編寫(xiě)FindAll(方法具體實(shí)現(xiàn))

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、編寫(xiě)MySqlInjector(注冊(cè)到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()); // 再擴(kuò)充自定義的方法
        list.add(new FindAll());
        return methodList;
    }
}

3.4、編寫(xiě)MySqlInjector(注冊(cè)到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()); // 再擴(kuò)充自定義的方法
        list.add(new FindAll());
        return methodList;
    }
}

### 2.4、注冊(cè)到Spring容器

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

3.5、測(cè)試

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

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 圖文淺析Java序列化和反序列化

    圖文淺析Java序列化和反序列化

    序列化(Serialization)是將對(duì)象的狀態(tài)信息轉(zhuǎn)化為可以存儲(chǔ)或者傳輸?shù)男问降倪^(guò)程,下面這篇文章主要給大家介紹了關(guān)于Java序列化和反序列化的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • Idea和Docker如何集成

    Idea和Docker如何集成

    今天就介紹下idea和Docker如何集成,要集成之前,需要我們本機(jī)能夠訪(fǎng)問(wèn)docker服務(wù),也就是我們的docker服務(wù)需要開(kāi)啟遠(yuǎn)程模式,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • java調(diào)用js文件的兩種常用方法示例(支持V8引擎)

    java調(diào)用js文件的兩種常用方法示例(支持V8引擎)

    在Java中調(diào)用JavaScript的方法通常涉及到使用Java的腳本引擎,下面這篇文章主要給大家介紹了關(guān)于java調(diào)用js文件的兩種常用方法(支持V8引擎)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • 深入淺析drools中Fact的equality?modes

    深入淺析drools中Fact的equality?modes

    這篇文章主要介紹了drools中Fact的equality?modes的相關(guān)知識(shí),本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Java中處理郵件附件的方法(本地文件和在線(xiàn)URL)

    Java中處理郵件附件的方法(本地文件和在線(xiàn)URL)

    這篇文章主要介紹了在Java中處理郵件附件的方法,針對(duì)本地文件和在線(xiàn)URL兩種附件來(lái)源,提供了兩種解決方案,并提供了下載文件和發(fā)送郵件的代碼示例,需要的朋友可以參考下
    2025-03-03
  • 在SpringBoot中實(shí)現(xiàn)一個(gè)訂單號(hào)生成系統(tǒng)的示例代碼

    在SpringBoot中實(shí)現(xiàn)一個(gè)訂單號(hào)生成系統(tǒng)的示例代碼

    在Spring Boot中設(shè)計(jì)一個(gè)訂單號(hào)生成系統(tǒng),主要考慮到生成的訂單號(hào)需要滿(mǎn)足的幾個(gè)要求:唯一性、可擴(kuò)展性、以及可能的業(yè)務(wù)相關(guān)性,本文給大家介紹了幾種常見(jiàn)的解決方案及相應(yīng)的示例代碼,需要的朋友可以參考下
    2024-02-02
  • 使用JSONObject.toJSONString 過(guò)濾掉值為空的key

    使用JSONObject.toJSONString 過(guò)濾掉值為空的key

    這篇文章主要介紹了使用JSONObject.toJSONString 過(guò)濾掉值為空的key,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java對(duì)象深復(fù)制與淺復(fù)制實(shí)例詳解

    Java對(duì)象深復(fù)制與淺復(fù)制實(shí)例詳解

    這篇文章主要介紹了 Java對(duì)象深復(fù)制與淺復(fù)制實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 通過(guò)圖例了解PowerDesigner使用方法

    通過(guò)圖例了解PowerDesigner使用方法

    這篇文章主要介紹了通過(guò)圖例了解PowerDesigner使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java三級(jí)菜單工具類(lèi)實(shí)現(xiàn)方式

    Java三級(jí)菜單工具類(lèi)實(shí)現(xiàn)方式

    這篇文章通過(guò)實(shí)例代碼給大家介紹Java三級(jí)菜單工具類(lèi)實(shí)現(xiàn)方式,常用的三個(gè)字段,子級(jí)id、父級(jí)id、其次是數(shù)組children,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2024-05-05

最新評(píng)論