mybatis可重用方案

本示例支持动态字段查询,动态条件查询,支持in等操作,反正简单的重复的事情都帮你做了,直接写好service接口就OK了(建议条件字段等都在service中定义)

网上各种从java类里面实现重用,我也是有点蒙...

个人不太喜欢,还是喜欢玩配置文件的重用...

找了半天没找到mybatis怎么继承配置文件(第一次用mybatis),还望知道的兄弟告知...

看了下官方文档,于是有了以下重用方案,喜欢这种方式的可以拿起去嫖...

先演示演示使用方式:

如此就可以实现查询ORG_PK=orgPk and LOGIN_NAME=loginName

有喜欢用的,有不喜欢用的,反正我目前挺喜欢用这种方式的

PS:(请勿使用前端传递字段和操作符参数,否则可能存在sql注入)

	@Override
	public Page<SysUser> findByLoginName(String orgPk,String loginName) {
		List<Model> conditions = MyBatisUtil.parseBase("ORG_PK,=,"+orgPk,"LOGIN_NAME,=,"+loginName);
		Page<SysUser> page =  getBaseMapper().selectExtend(conditions, null, null);
		return page;
	}
好了,屁话不多说,上xml配置文件代码,每次只需修改表名

<select id="selectExtend" resultMap="BaseResultMap">
		select
		<if test="columns==null">
			<include refid="Base_Column_List" />
		</if>
		<if test="columns!=null">
			<foreach collection="columns" index="index" item="c" open=""
				separator="," close="">
				${c}
			</foreach>
		</if>
		from sys_user
		<where>
			<foreach collection="conditions" index="index" item="c" open=""
				separator="and" close="">
				${c.column} ${c.operate}
				<if test="c.value!=null">#{c.value}</if>
				<if test="c.value==null">
					<foreach collection="c.values" index="index" item="v" open="("
						separator="," close=")">
						#{v}
					</foreach>
				</if>
				<if test="order!=null">
					ORDER BY ${order}
				</if>
			</foreach>
		</where>
	</select>

附上MybatisUtil代码,携带此工具类,才可使用上述方式,装逼利器.需者带走......初次使用mybatis,该工具未经时间验证,不保证不存在bug,代码其实很简单,有bug自己改...

package com.cykj.base.common.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.cykj.base.common.model.Model;

/**
 * MyBatis工具类
 * @author LeiYong
 *
 */
public class MyBatisUtil {
	private static final String splitCharacter = ",";
	/**
	 * 解析String为Model,切割符默认为","
	 * @param texts 如"pk,=,111","age,>,15"
	 * @return 
	 */
	public static List<Model> parseBase(String... texts){
		List<Model> list = new ArrayList<>();
		if (texts!=null&&texts.length>0) {
			for (String text : texts) {
				if (StringUtils.isNotBlank(text)) {
					String[] arr = StringUtil.indexOf(text, splitCharacter, 0);
					String[] arr2 = StringUtil.indexOf(arr[1], splitCharacter, 0);
					list.add(new Model(arr[0],arr2[0], arr2[1]));
				}
			}
		}
		return list;
	}
	/**
	 * 解析String为Model,默认使用,分割
	 * 例如:"name","in","张三,李四,王五"
	 * @param column 列
	 * @param operator 操作符
	 * @param values 值集
	 * @return
	 */
	public static Model parseList(String column,String operator,String values){
		return parseList(column, operator, values, splitCharacter);
	}
	/**
	 * 解析String为Model
	 * 例如:"name","in","张三#李四#王五","#"
	 * @param column 列
	 * @param operator 操作符
	 * @param values 值集
	 * @param split 切割符,支持正则
	 * @return
	 */
	public static Model parseList(String column,String operator,String values,String split){
		if (StringUtils.isNotBlank(values)) {
			List<String> list = Arrays.asList(values.split(split));
			return new Model(column,operator,list);
		}
		return null;
	}
}

最后附上Model类:

package com.cykj.base.common.model;

import java.util.List;

/**
 * 操作类
 * 考虑添加一组columns列来自定义查询的列
 * @author LeiYong
 *
 */
public class Model {
	private String column;
	private String operate;
	private Object value;
	private List<Object> values;
	
	public Model(String column, String operate, List<Object> values) {
		super();
		this.column = column;
		this.operate = operate;
		this.values = values;
	}

	public Model(String column, String operate, Object value) {
		super();
		this.column = column;
		this.operate = operate;
		this.value = value;
	}
	
	public String getColumn() {
		return column;
	}
	public void setColumn(String column) {
		this.column = column;
	}
	public String getOperate() {
		return operate;
	}
	public void setOperate(String operate) {
		this.operate = operate;
	}
	public Object getValue() {
		return value;
	}
	public void setValue(Object value) {
		this.value = value;
	}
	
	public List<Object> getValues() {
		return values;
	}

	public void setValues(List<Object> values) {
		this.values = values;
	}

	@Override
	public String toString() {
		StringBuffer sb = new StringBuffer();
		sb.append(column);
		sb.append(operate);
		sb.append(value==null?values.toString():value);
		return sb.toString();
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值