2021年7月29日星期四

Mybatis 动态执行SQL语句

有很多的接口都只是执行个SQL查询之后就直接返回给前端,那么我们能不能把这些SQL保存在数据库中,调用一个固定的接口就能根据传参查询出想要的数据呢?或者当为了加减个字段就得修改代码重启服务的痛苦能不能减少点呢?下面就是方案。

调用直接传入SQL语句(可以选择存数据库)和参数,SQL语句写法和在

<dependency> <groupId>org.ow2.asm</groupId> <artifactId>asm</artifactId> <version>7.0</version></dependency>

import lombok.extern.slf4j.Slf4j;import org.apache.ibatis.builder.//from fhadmin.cn@Component@Slf4jpublic class SqlExecutor {  @Autowired private SqlSessionFactory sqlSessionFactory;  public void parserString(String originSql,Map<String,Object> param) {  StringBuilder builder = new StringBuilder();  builder.append("<?");  builder.append("<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\r\n");  builder.append("<mapper namespace=\"cn.video.asm.TestMapper\">\r\n");  builder.append("  <select id=\"queryById\" resultType=\"java.util.Map\">\r\n");  builder.append(originSql);  builder.append("  </select>\r\n");  builder.append("</mapper>");  InputStream inputStream = new ByteArrayInputStream(builder.toString().getBytes());  Configuration baseConfig = sqlSessionFactory.getConfiguration();  // 不能使用原有的config对象加载,否则下次就不会重复加载导致传入的SQL语句不能切换  // 也可以在这里指定数据源,从对应的数据源做查询动作  Configuration configuration = new Configuration(baseConfig.getEnvironment());  String resource = "resource";  ErrorContext.instance().resource(resource);  = new = new DefaultSqlSessionFactory(configuration).openSession();  Object result = null;  try {   // 使用自定义的ClassLoader   MyClassLoader loader = new MyClassLoader();   // 生成二进制字节码   byte[] bytes = MyClassLoader.dump();   // 加载我们生成的 Mapper类   Class<?> clazz = loader.defineClass("cn.video.asm.TestMapper", bytes);   // 将生成的类对象加载到configuration中   configuration.addMapper(clazz);   Method query = clazz.getMethod("queryById", Map.class);   // 这里就是通过类对象从configuration中获取对应的Mapper   Object testMapper = sqlSession= query.invoke(testMapper, param);  } catch (Exception e) {   log.error("",e);  }  System.out.println("dyn : " + result); }}

package cn.video.common; import jdk.internal.org.objectweb.asm.ClassWriter;import jdk.internal.org.objectweb.asm.MethodVisitor; import static jdk.internal.org.objectweb.asm.Opcodes.*; //from fhadmin.cnpublic class MyClassLoade......

原文转载:http://www.shaoqun.com/a/892318.html

跨境电商:https://www.ikjzd.com/

haofang:https://www.ikjzd.com/w/1046

csa认证:https://www.ikjzd.com/w/904

square:https://www.ikjzd.com/w/2106


有很多的接口都只是执行个SQL查询之后就直接返回给前端,那么我们能不能把这些SQL保存在数据库中,调用一个固定的接口就能根据传参查询出想要的数据呢?或者当为了加减个字段就得修改代码重启服务的痛苦能不能减少点呢?下面就是方案。调用直接传入SQL语句(可以选择存数据库)和参数,SQL语句写法和在<dependency><groupId>org.ow2.asm</group
blackbird:https://www.ikjzd.com/w/950
skyee:https://www.ikjzd.com/w/290
四川这么美 只去一次怎么够:http://www.30bags.com/a/429718.html
四川这么美 只去一次怎么够_四川旅游攻略_四川旅游景点:http://www.30bags.com/a/415464.html
四川震区旅游振兴 :http://www.30bags.com/a/406797.html
四川助力文旅企业复工复产 出台"金融+文旅"帮扶措施:http://www.30bags.com/a/434409.html
口述:我与岳母和小姨子的美妙生活:http://www.30bags.com/m/a/249656.html
老师受不了脱了丝袜裙子坐上去 别急今晚让你弄个够:http://www.30bags.com/m/a/249771.html
深圳宝安科技馆8月展览汇总(持续更新):http://www.30bags.com/a/517601.html
2021时尚深圳展蝶讯馆展览好看吗:http://www.30bags.com/a/517602.html
2021时尚深圳蝶讯馆观展攻略:http://www.30bags.com/a/517603.html
深圳欢乐谷夏浪音乐节有朱星杰吗:http://www.30bags.com/a/517604.html

没有评论:

发表评论