获取mybatis可执行sql

本文介绍如何通过Spring和MyBatis结合,利用SqlHelper工具类获取可执行的SQL语句。该工具类依赖SqlSessionFactory,提供反射、参数处理等功能,方便在业务代码中获取Mapper接口对应的SQL。
摘要由CSDN通过智能技术生成

我是通过spring和mybatis结合做的这个事情,通过spring去管理SqlHelper工具类

1:建立一个SqlHelper工具类,

2:类里面必须有一个属性SqlSessionFactory。   

3:在你业务类里面,直接注入SqlHelper类,这样你就可以直接在你的业务类里面调用工具类,(工具类里面有好几个接口,自己可以根据实际情况适用)

4:在代码的最后我会贴一部分实例代码来给出结果

5:不多说了,下面贴SqlHelper工具类代码

package com.heygam.common.util;


import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.ParameterMode;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class SqlHelper {


@Autowired
private  SqlSessionFactory sqlSessionFactory;
private  final ObjectFactory DEFAULT_OBJECT_FACTORY = new DefaultObjectFactory();
private  final ObjectWrapperFactory DEFAULT_OBJECT_WRAPPER_FACTORY = new DefaultObjectWrapperFactory();




/**
* 反射对象,增加对低版本Mybatis的支持
*
* @param object 反射对象
* @return
*/
public  MetaObject forObject(Object object) {
return MetaObject.forObject(object, DEFAULT_OBJECT_FACTORY, DEFAULT_OBJECT_WRAPPER_FACTORY);
}


/**
* 通过接口获取sql
*
* @param mapper
* @param methodName
* @param args
* @return
*/
public  String getMapperSql(Object mapper, String methodName, Object... args) {
MetaObject metaObject = forObject(mapper);
SqlSession session = (SqlSession) metaObject.getValue("h.sqlSession");
Class mapperInterface = (Class) metaObject.getValue("h.mapperInterface");
String fullMethodName = mapperInterface.getCanonicalName() + "." + methodName;
if (args == null || args.length == 0) {
return getNamespaceSql(fullMethodName, null);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值