java 基于Mybatis获取SQL
SqlSessionFactory工厂类可以从xml文件实现,也可以通过spring来注入,本章用了第二种方法;
@Service
public class TEventProcessLogServiceImpl{
@Autowired
private SqlSessionFactory sqlSessionFactory;
/**
* 获取执行SQL
* @param mapClass Mapper对应class 主要获取xml文件中的namespace
* @param mapId Mapper对应ID 例: <insert id="insertTEventGood"
* @param entity 传入参数
* @return
*/
public String getSql(Class mapClass,String mapId,Object entity) {
StringBuilder result=new StringBuilder();
String mapUrl=mapClass.getName()+"."+mapId;//地址
BoundSql boundSql=sqlSessionFactory.getConfiguration()
.getMappedStatement(mapUrl).getBoundSql(entity);
String sql=boundSql.getSql().replaceAll("(\\r\\n|\\n|\\n\\r| {3,})","");//SQL
String paramet=new Gson().toJson(boundSql.getParameterObject());//参数
result.append(mapUrl).append(":").append(sql).append(";").
append("paramet:").append(paramet).append(";");
return result.toString();
}
}
调用方法
@Autowired
private TEventGoodMapper tEventGoodMapper;
//这里是调用了一个SQL插入语句
tEventGoodMapper.insertTEventGood(tEventGood);
sqlStr.append(itEventProcessLogService.getSql(TEventGoodMapper.class,"insertTEventGood",tEventGood));