MyBatis-plus如何執(zhí)行自定義SQL
更新時間:2024年02月19日 16:47:33 作者:ha_lydms
這篇文章主要介紹了MyBatis-plus如何執(zhí)行自定義SQL問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
一、原生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);
}
// 開啟鏈接
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、編寫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(方法具體實現(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、編寫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);
}
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)與算法之二分查找詳解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法之二分查找詳解,二分查找算法是一種在有序數(shù)組中查找某一特定元素的搜索算法,其思想就是不斷地將有序查找表“一分為二”,逐漸縮小搜索區(qū)域,進而找到目標元素,需要的朋友可以參考下2023-12-12
Spring Boot集成教程之異步調(diào)用Async
在項目中,當訪問其他人的接口較慢或者做耗時任務(wù)時,不想程序一直卡在耗時任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線程來并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async。需要的朋友們下面來一起看看吧。2018-03-03
MybatisPlus使用Mybatis的XML的動態(tài)SQL的功能實現(xiàn)多表查詢
本文主要介紹了MybatisPlus使用Mybatis的XML的動態(tài)SQL的功能實現(xiàn)多表查詢,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11

