/**
* 搜索条件类
*
*/
//为了做查询方便,添加了一个搜索条件类
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:注解方式 比如参数 @param
可以在org.apache.ibatis.annotations包中找到所有的注解
2:在对应的映射文件中使用参数类型
比如
<insert id="insert" parameterType="com.xxx.XXXVo">把参数包装成bean的形式,对外提供setter,getter方法即可
在slq中可以使用类似这样的形式抓取数据USERNAME=#{userName},
queryForList("selectbypage", Condition, 3, 10)
和
queryForList("selectbypage")执行的是同一条sql,但是执行结果是不同的,第一个是根据起始index和查询条数查询出复合条件的10条数据,第二个是查询出所有复合条件的数据
这个说的什么意思?把3个参数包装成BEAN,然后每一个MODEL类里持有这个BEAN的对象?不是很理解。
那个Condition只是一个自己定义的实体类,没有表,因为查询条件可能会很多,所以定义一个Condition类。
本想用foreach但是貌似不行啊。封装好了到不知道怎么拼成SQL语句了。
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>