MyBatis动态SQL之一使用 if 标签和 choose标签

        使用MyBatis写动态SQL查询相比Hiberntate是非常方便的。select不仅能够根据mapper接口中的返回值自动匹配

查询selectOne还是selectList,而且在查询中还可以灵活的定制查询的方式,添加if 或者 choose等标签进行查询。

        下面我们来看一看怎么通过这些标签灵活的定义查询的语句,最大限度的提升查询的效率:

         我以一个自关联的商品类型为例ItemsType类型为例,商品类型里面有一个父类型即parentType属性,现在就需要通过

父类型查询商品类型,返回的结果是一个List的集合类型,也就是相当于一棵树的查询,根据父节点查询子节点

在mapper.java中代码如下:

     public List getItems(IntegerEntity ie);  //mapper接口中的方法
上面方法中的参数是一个包装类,里面封装了父类节点的ID属性(int型):

    //封装了父类型的ID
   public class IntegerEntity {
	public IntegerEntity(){}
	public IntegerEntity(int parentId){
		this.parentId=parentId;
	}
        private int parentId;

	public int getParentId() {
		return parentId;
	}

	public void setParentId(int parentId) {
		this.parentId = parentId;
	}
    
因为MyBatis中如果直接使用int类型的会报 there is no getter for property named propertyType in java.lang.Integer

的异常,所以使用了包装类来避免这样的情况发生。

所以在mapper.xml中查询的方式是:

以上两种方式查询都能够得到正确的结果,语句中使用到的值是使用OGNL的方式传递的。设置好参数类型之后直接

使用ognl表达式就可以了!

个人总结,还请多多指!

你可能感兴趣的:(MyBatis)