mybatis多条件查询方法

蓝血的阿健 发布于 2015/09/25 17:28
阅读 5K+
收藏 0

收藏!数据建模最全知识体系解读!>>>

这次我用了一个新方法,不知道诸位看官觉得如何,就是当一张画面有多条件的情况下,用户肯定是有选择性的输入内容的,那么怎样做到多条件方便控制就成了问题。
先看一段代码,我自己写了一个BaseDao,就是为了给所有的Dao子类使用非空判断
BaseDao.java

protected boolean objectAttrNullCheck(Object object, String attributeName) {
		boolean returnValue = false;
		Class classz = object.getClass();
		String attrNameStart = attributeName.substring(0, 1).toUpperCase();
		String attrNameEnd = attributeName.substring(1, attributeName.length());
		String attr = attrNameStart + attrNameEnd;

		String methodName = new StringBuffer("get").append(attr).toString();
		try {
			Method method = classz.getMethod(methodName, null);
			Object newObj = method.invoke(object, null);
			if (newObj != null && !newObj.toString().equals("")) {
				returnValue = true;
			}
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return returnValue;
	}



然后在子类的时候,就可以根据之前页面传递过来的PO进行拆解,然后用刚才定义的函数进行非空判断
public List<Contact> searchByExample(Contact contact) {
		System.out.println("searchByExampleContact");
		ContactExample example = new ContactExample();
		ContactExample.Criteria cri = example.createCriteria();
		// //////////////////////////////////////////////////////////
		if (this.objectAttrNullCheck(contact, "username"))
			cri.andUsernameEqualTo(contact.getUsername());
		if (this.objectAttrNullCheck(contact, "password"))
			cri.andPasswordEqualTo(contact.getPassword());

		ContactMapper vcontactMapper = sqlSession
				.getMapper(ContactMapper.class);
		List<Contact> returnList = vcontactMapper.selectByExample(example);
		return returnList;
	}



各位估计要喷了,mybatis的mapper提供这种后台判断的方法的,何必这么写。我主要考虑的是,这样写了以后,非空判断在xmlmapper部分就可以省去了,否则还要改写生成出来的代码。

请高人给出出意见。谢谢了。

加载中
返回顶部
顶部