/**
 * 搜索条件类
 * 
 */
//为了做查询方便,添加了一个搜索条件类
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语句呢。。

解决方案 »

  1.   

    mybatis对应dao里貌似不能有重载,否在对应的sql id就会冲突
    有两种方式可以传递参数:
    1:注解方式 比如参数 @param
    可以在org.apache.ibatis.annotations包中找到所有的注解
    2:在对应的映射文件中使用参数类型
    比如
    <insert id="insert" parameterType="com.xxx.XXXVo">把参数包装成bean的形式,对外提供setter,getter方法即可
    在slq中可以使用类似这样的形式抓取数据USERNAME=#{userName},
      

  2.   

    你是没明白mybatis的原理,bean实现get、set方法,接口中也可以有重载,只是传递的参数不同而已,可以调用同一条sql,resultClass返回的都是同一个bean
      

  3.   

    比如sql:select * from condition
    queryForList("selectbypage", Condition, 3, 10)

    queryForList("selectbypage")执行的是同一条sql,但是执行结果是不同的,第一个是根据起始index和查询条数查询出复合条件的10条数据,第二个是查询出所有复合条件的数据
      

  4.   

    把参数包装成bean的形式,对外提供setter,getter方法即可
    这个说的什么意思?把3个参数包装成BEAN,然后每一个MODEL类里持有这个BEAN的对象?不是很理解。
    那个Condition只是一个自己定义的实体类,没有表,因为查询条件可能会很多,所以定义一个Condition类。
      

  5.   

    返回的不一定是COnditiong,而是你的查询结果,可以为集合类型、对象类型等等,不知道你的条件是什么形式的,为什么不放在Map里面
      

  6.   

    myibatis 本来就是要自己写sql 的
      

  7.   

    返回一般都是数组吧,比如一个学生类吧,有id,name,age等属性,搜索如果是名字和年龄那一定用到LIKE和between and,你需要知道搜索的属性,和属性的值还有关系是》=还是《=或者是between,多个条件当然用数组了,MAP的话怎么用?key=什么属性?value=属性值?那关系呢?
    本想用foreach但是貌似不行啊。封装好了到不知道怎么拼成SQL语句了。
      

  8.   

    可以返回一个list、map、bean、Object等等
      

  9.   

    我就纳闷了,你怎么想的,传递的参数无非就是一些指定的条件,比如用户名,年龄等,吧条件赋值给sql不就行了,返回你想要的list
      

  10.   

    Map map=new HashMap();
    map.put("id",Conditin.getId());
    map.put("name",Condition.getName());
    map.put("age",Condition.getAge());List<User> list=getSqlMapClientTemplate().queryForList("selectlistbyCondition",map);<select id="selectlistbyCondition"
    resultClass="com.entity.User" parameterClass="java.util.Map">select * from User where 1=1
    <isNotEmpty property="name" prepend="and">
    name like('%$name$%')
    </isNotEmpty>
    <isNotEmpty property="age" prepend="and">
    age =#age#
    </isNotEmpty>
    <isNotEmpty property="membNO" prepend="and">
    id=#id#
    </isNotEmpty>
    </select>
      

  11.   

    自己写SqlBuilder类,或者SqlProvider类。
      

  12.   

    额,自己写SqlBuilder类有些困难的,刚用了Mybatis Generate自动生成代码的插件,重构下还不错,2楼朋友的方法已经懂了,多谢了,不过我的意思是把关系也封装进去的。