日期:2014-05-18  浏览次数:20719 次

Mybatis映射DAO接口问题

/**
 * 搜索条件类
 * 
 */
//为了做查询方便,添加了一个搜索条件类
public class Condition {
public String propName;  //类属性
public Object propValue; //类属性值
public Relation relation; //关系类,一个枚举类,存放一些关系,如:>=,<=,like等

public Condition() {
}

public Condition(String propName, Object propValue, Relation relation) {
this.propName = propName;
this.propValue = propValue;
this.relation = relation;
}
}
//DAO接口里的方法,第二个参数和第三个参数为分页用
public List<T> findList(List<Condition> paramConditions,
int paramInt1, int paramInt2);
public List<T> findList(List<Condition> paramConditions);

这个方法在Mapper.XML里该怎么映射啊?还有如果DAO接口里的方法有重载又该怎么映射啊?怎么感觉Mybatis比Hibernate麻烦呢,还不如自己写HQL语句呢。。

------解决方案--------------------
mybatis对应dao里貌似不能有重载,否在对应的sql id就会冲突
有两种方式可以传递参数:
1:注解方式 比如参数 @param
可以在org.apache.ibatis.annotations包中找到所有的注解
2:在对应的映射文件中使用参数类型
比如

<insert id="insert" parameterType="com.xxx.XXXVo">

把参数包装成bean的形式,对外提供setter,getter方法即可
在slq中可以使用类似这样的形式抓取数据USERNAME=#{userName},
------解决方案--------------------
比如sql:select * from condition
queryForList("selectbypage", Condition, 3, 10)

queryForList("selectbypage")执行的是同一条sql,但是执行结果是不同的,第一个是根据起始index和查询条数查询出复合条件的10条数据,第二个是查询出所有复合条件的数据
------解决方案--------------------
myibatis 本来就是要自己写sql 的
------解决方案--------------------
自己写SqlBuilder类,或者SqlProvider类。