最近做了很多动态的查询,尤其是排序,以及一些状态字段,所以就做了一个总的动态查询,以不变应万变,呵呵

创新互联从2013年成立,是专业互联网技术服务公司,拥有项目成都做网站、成都网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元河东做网站,已为上家服务,为河东各地企业和个人服务,联系电话:13518219792
ibatis动态查询里面的sql代码:
ibatis动态查询Xml代码:
   
   
   
   
    parameterClass="map">   
                        select count(id) from p_Topic    
        ]]>   
    
        
            
                authorId=#authorId#     
               
        
        
            
                marketId=#marketId#     
               
        
   
        
            
                isDelete=#isDelete#     
               
        
   
        
            
                isBest=#isBest#    
            
        
   
        
            
                $statusStr$    
            
        
        
            
                
                    #marketIdList[]#    
                
            
        
    
ibatis动态查询Xml代码:
  
  
  
  
    parameterClass="map">  
                        select count(id) from p_Topic   
        ]]>  
    
        
            
                authorId=#authorId#    
               
        
        
            
                marketId=#marketId#    
               
        
  
        
            
                isDelete=#isDelete#    
               
        
  
        
            
                isBest=#isBest#   
            
        
  
        
            
                $statusStr$   
            
        
        
            
                
                    #marketIdList[]#   
                
            
        
    
这里需要注意的是:
#xxx# 代表xxx是属性值,map里面的key或者是你的pojo对象里面的属性,ibatis会自动在它的外面加上引号,表现在sql语句是这样的 where xxx = 'xxx' ;而$xxxx$ 则是把xxxx作为字符串拼接到你的sql语句中,比如 order by topicId , 如果你不用$来拼接而用#的话,外面就会被加上引号的哦 比如你的语句这样写 ... order by #xxx# (xxx就是你传进来的字符串topicId),ibatis 就会把他翻译成 order by 'topicId' 这样就报错了,用$的结果就是这样 order by topicId。
另外在ibatis动态查询里要注意它的iterate。
Java代码
    
        
            #marketIdList[]#    
        
    
注意 iterate 的property属性 ,虽然你上面的isNotNull什么的都有这句,但这里一定要写清楚,否则ibatis会找不到你的list的,ibatis动态查询自然无法实现。
ibatis动态查询中的数据访问层代码:
Java代码
public List getTopics(Map map) {    
   
        return getSqlMapClientTemplate().queryForList("getTopics", map);    
    }    
ibatis动态查询中的服务层代码:
Java代码
public List getTopicsByMarketIdList(Long authorId,List marketIdList,    
        Integer orderby, Integer status, Pagination pagination) {    
    Map map = new HashMap ();    
    map.put("authorId", authorId);    
    map.put("isDelete", false);    
    map.put("marketIdList", marketIdList);    
    map.put("orderStr", "这里你组装你的order字符串");    
    map.put("statusStr","这里你组装你的status字符串");    
    map.put("begin", pagination.getOffset());    
    map.put("max", pagination.getPageSize());    
              //这个getTopicCount()方法和getTopics()大体是一致的,所以我的dao里面省略了它    
    Long total = topicDao.getTopicCount(map);    
    if (total == 0) {    
        return new ArrayList ();    
    } else {    
        pagination.setTotal(total);    
        List res = topicDao.getTopics(map);    
        return res;    
    }    
} 
Java代码
public List getTopicsByMarketIdList(Long authorId,List marketIdList,   
        Integer orderby, Integer status, Pagination pagination) {   
    Map map = new HashMap ();   
    map.put("authorId", authorId);   
    map.put("isDelete", false);   
    map.put("marketIdList", marketIdList);   
    map.put("orderStr", "这里你组装你的order字符串");   
    map.put("statusStr","这里你组装你的status字符串");   
    map.put("begin", pagination.getOffset());   
    map.put("max", pagination.getPageSize());   
              //这个getTopicCount()方法和getTopics()大体是一致的,所以我的dao里面省略了它   
    Long total = topicDao.getTopicCount(map);   
    if (total == 0) {   
        return new ArrayList ();   
    } else {   
        pagination.setTotal(total);   
        List res = topicDao.getTopics(map);   
        return res;   
    }   
} 
Java代码
public class Topic extends BaseObject implements Serializable {    
    /**   
     *    
     */   
    private static final long serialVersionUID = -851973667810710701L;    
   
    private Long id;    
    private Long authorId;    
    private String authorName;    
    private Long marketId;    
    private String title;    
    private String tags;    
    private String content;    
    private Date pubdate;    
    private Integer isBest;    
    private Integer status;    
    private Integer isDelete;    
    private Integer clickCount;    
    private Integer replyCount;    
    private Date lastReplyTime;    
       //getter and setter 省略...    
}
Java代码
public class Topic extends BaseObject implements Serializable {   
    /**  
     *   
     */  
    private static final long serialVersionUID = -851973667810710701L;   
  
    private Long id;   
    private Long authorId;   
    private String authorName;   
    private Long marketId;   
    private String title;   
    private String tags;   
    private String content;   
    private Date pubdate;   
    private Integer isBest;   
    private Integer status;   
    private Integer isDelete;   
    private Integer clickCount;   
    private Integer replyCount;   
    private Date lastReplyTime;   
       //getter and setter 省略...   
}  
ibatis动态查询中的Pagination代码:
Java代码:
public class Pagination {    
   
    /**   
     * 要查看的页码   
     */   
    private int page;    
   
    /**   
     * 每页显示数   
     */   
    private int pageSize;    
   
    /**   
     * 一共有多少页   
     */   
    private int totalPage;    
   
    /**   
     * 一共有多少条记录   
     */   
    private long total;    
   
    /**   
     * 当前页的记录数   
     */   
    private int size;    
   
    /**   
     * 只需要topxx,不需要页数信息了   
     */   
    private boolean topOnly;    
   
      /**   
       *从第几条记录开始       
       */   
    private int offset;    
        
    public void setOffset(int offset) {    
        this.offset = offset;    
    }    
   
    public Pagination(int page, int pageSize) {    
        this.page = page;    
        this.pageSize = pageSize;    
    }    
   
    public Pagination() {    
    }    
   
    public boolean require() {    
        return pageSize > 0 ? true : false;    
    }    
   
    public int from() {    
        return page * pageSize;    
    }    
   
    public int to() {    
        return from() + size;    
    }    
   
    public int getPage() {    
        return page;    
    }    
   
    public void setPage(int page) {    
        this.page = page;    
    }    
   
    public int getPageSize() {    
        return pageSize;    
    }    
   
    public void setPageSize(int pageSize) {    
        this.pageSize = pageSize;    
    }    
   
    public int getTotalPage() {    
        return totalPage;    
    }    
   
    public void setTotalPage(int totalPage) {    
        this.totalPage = totalPage;    
    }    
   
    public long getTotal() {    
        return total;    
    }    
   
    public void setTotal(long total) {    
        this.total = total;    
        if (pageSize > 0) {    
            this.totalPage = (int) Math.ceil(total / (double) pageSize);    
        } else {    
            this.totalPage = 1;    
        }    
        if (page >= totalPage) {    
            page = totalPage - 1;    
        }    
        if (page < 0)    
            page = 0;    
        if (pageSize > 0) {    
            if (page < totalPage - 1)    
                this.size = pageSize;    
            else   
                this.size = (int) (total % pageSize);    
        } else
虽然代码量有些大,但是这是一个总的ibatis动态查询实例,您在实际工作中遇到相应的ibatis动态查询问题可以参考一下。
                网页名称:实例说明ibatis动态查询
                
                文章起源:http://www.csdahua.cn/qtweb/news49/44549.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网