MyBatis利用SQL语句构建器类实现动态sql

在工作中有一个需求就是动态的对某张表做增删查改,刚开始的思路是直接利用mybatis foreach标签生成,但是在开发过程中遇到一个问题就是必须得${}这种方式接收参数不然会报错(具体什么原因请自行了解不做解释),但是公司提倡尽量不用这种方式(特别是参数),所以强迫症范了就想看看还有没有什么好的办法。结果发现利用SQL语句构建器能够达到比较好的效果,所以就试了一下结果成功了。

用的是mybatis版本3.1.1,mybatis3.2版本以上写法有点不一样

        /**
		 * 新增
		 */
		SqlBuilder.BEGIN();
		String sequence = BaseUtil.getEuiSeq("SEQ_QC_POLICY", "");
		SqlBuilder.INSERT_INTO("T_QC_POLICY");
		SqlBuilder.VALUES("QC_POLICY_SNO", "#{id}");
		SqlBuilder.VALUES("QC_POLICY_NAME", "#{name}");
		
		Map<String,Object> values =new HashMap<>();
		values.put("sql", SqlBuilder.SQL());
		values.put("id", sequence);
		values.put("name", "zhangsan");
		
		
		
		/*	查询
	    SqlBuilder.SELECT("*");
		SqlBuilder.FROM("T_QC_TASK");
		SqlBuilder.WHERE("TASK_SNO=#{id}");
		Map<String,Object> values =new HashMap<>();
		values.put("sql", SqlBuilder.SQL());
		values.put("id", 879347);
		 */ 
		
		WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();   
		/*
		  此段代码可以忽略
		 String[] names = wac.getBeanDefinitionNames();   
		  for(int i=0; i<names.length; i++){  
		    System.out.println("---"+names[i]);  
		      
		}*/
		SqlSessionFactory sf  = (SqlSessionFactory)wac.getBean("sqlSessionFactory0");     
		SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sf);
		sessionTemplate.insert("abc", values);

由于项目种进行了封装所以没办法用spring注解生成SlqSessionTemplate对象,所以只能通过WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); 获取上下文,

然后获取到SqlSessionFactory

然后在通过SqlSessionFactory构造SqlSessionTemplate。

接下来xml文件中的写法就比较简单了

  <select id="abc" parameterType="java.util.HashMap" resultType="java.util.HashMap">
  	${sql}
  </select>

参考:http://www.mybatis.org/mybatis-3/zh/index.html

转载于:https://my.oschina.net/u/2242194/blog/1507144

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值