新聞中心
最近做了很多動(dòng)態(tài)的查詢,尤其是排序,以及一些狀態(tài)字段,所以就做了一個(gè)總的動(dòng)態(tài)查詢,以不變應(yīng)萬(wàn)變,呵呵

創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元河?xùn)|做網(wǎng)站,已為上家服務(wù),為河?xùn)|各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
ibatis動(dòng)態(tài)查詢里面的sql代碼:
ibatis動(dòng)態(tài)查詢Xml代碼:
parameterClass="map">
select count(id) from p_Topic
]]>
authorId=#authorId#
marketId=#marketId#
isDelete=#isDelete#
isBest=#isBest#
$statusStr$
#marketIdList[]#
ibatis動(dòng)態(tài)查詢Xml代碼:
parameterClass="map">
select count(id) from p_Topic
]]>
authorId=#authorId#
marketId=#marketId#
isDelete=#isDelete#
isBest=#isBest#
$statusStr$
#marketIdList[]#
這里需要注意的是:
#xxx# 代表xxx是屬性值,map里面的key或者是你的pojo對(duì)象里面的屬性,ibatis會(huì)自動(dòng)在它的外面加上引號(hào),表現(xiàn)在sql語(yǔ)句是這樣的 where xxx = 'xxx' ;而$xxxx$ 則是把xxxx作為字符串拼接到你的sql語(yǔ)句中,比如 order by topicId , 如果你不用$來(lái)拼接而用#的話,外面就會(huì)被加上引號(hào)的哦 比如你的語(yǔ)句這樣寫 ... order by #xxx# (xxx就是你傳進(jìn)來(lái)的字符串topicId),ibatis 就會(huì)把他翻譯成 order by 'topicId' 這樣就報(bào)錯(cuò)了,用$的結(jié)果就是這樣 order by topicId。
另外在ibatis動(dòng)態(tài)查詢里要注意它的iterate。
Java代碼
#marketIdList[]#
注意 iterate 的property屬性 ,雖然你上面的isNotNull什么的都有這句,但這里一定要寫清楚,否則ibatis會(huì)找不到你的list的,ibatis動(dòng)態(tài)查詢自然無(wú)法實(shí)現(xiàn)。
ibatis動(dòng)態(tài)查詢中的數(shù)據(jù)訪問(wèn)層代碼:
Java代碼
public List getTopics(Map map) {
return getSqlMapClientTemplate().queryForList("getTopics", map);
}
ibatis動(dòng)態(tài)查詢中的服務(wù)層代碼:
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());
//這個(gè)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());
//這個(gè)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動(dòng)態(tài)查詢中的Pagination代碼:
Java代碼:
public class Pagination {
/**
* 要查看的頁(yè)碼
*/
private int page;
/**
* 每頁(yè)顯示數(shù)
*/
private int pageSize;
/**
* 一共有多少頁(yè)
*/
private int totalPage;
/**
* 一共有多少條記錄
*/
private long total;
/**
* 當(dāng)前頁(yè)的記錄數(shù)
*/
private int size;
/**
* 只需要topxx,不需要頁(yè)數(shù)信息了
*/
private boolean topOnly;
/**
*從第幾條記錄開(kāi)始
*/
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
雖然代碼量有些大,但是這是一個(gè)總的ibatis動(dòng)態(tài)查詢實(shí)例,您在實(shí)際工作中遇到相應(yīng)的ibatis動(dòng)態(tài)查詢問(wèn)題可以參考一下。
名稱欄目:實(shí)例說(shuō)明ibatis動(dòng)態(tài)查詢
本文地址:http://fisionsoft.com.cn/article/dpdjpio.html


咨詢
建站咨詢
