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); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Mybatis Plus整合PageHelper分页的实现示例
这篇文章主要介绍了Mybatis Plus整合PageHelper分页的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09Java编程synchronized与lock的区别【推荐】
互联网信息泛滥环境下少有的良心之作!如果您想对Java编程synchronized与lock的区别有所了解,这篇文章绝对值得!分享给大家,供需要的朋友参考。不说了,我先学习去了。2017-10-10
最新评论