都知道,做数据库操作拼sql是个很磨人的工作,尤其是where,分享一点点小经验:
all.sql中引入book.sql
#namespace("book")
#include("book.sql")
#endbook.sql中定义getByQuery,里面实现了where子句的拼接
#sql("getByQuery")
select b.*
from t_book b
#set(isFirst=true)
#if(nos)
#(isFirst?"where":"and")
#set(isFirst=false)
b.no in ( #for(no : nos)
#para(no)
#if(!for.last) , #end
#end )
#end
#if(no)
#(isFirst?"where":"and")
#set(isFirst=false)
b.no = #para(no)
#end
#if(catelog_no)
#(isFirst?"where":"and")
#set(isFirst=false)
b.catelog_no = #para(catelog_no)
#end
#if(isbn)
#(isFirst?"where":"and")
#set(isFirst=false)
b.isbn = #para(isbn)
#end
#if(userNo)
#(isFirst?"where":"and")
#set(isFirst=false)
b.user_no = #para(userNo)
#end
order by create_time desc
#endservice中的方法query
public MyResult query(
Integer pageNumber,
Integer pageSize,
Book record){
Kv kv = Kv.create();
if (StrKit.notBlank(record.getNo())) {
if (record.getNo().contains(",")) {
kv.set("nos", record.getNo().split(","));
} else {
kv.set("no", record.getNo());
}
}
if (StrKit.notBlank(record.getCatelogNo())) {
kv.set("catelog_no", record.getCatelogNo());
}
if (StrKit.notBlank(record.getIsbn())) {
kv.set("isbn", record.getIsbn());
}
if (StrKit.notBlank(record.getUserNo())) {
kv.set("userNo", record.getUserNo());
}
SqlPara sqlPara = bookDao.getSqlPara("book.getByQuery", kv);
Page<Book> resultPage = bookDao.paginate(pageNumber, pageSize, sqlPara);
return MyResult.ok(resultPage);
}重点1:4个参数no,catelogNo,isbn,userNo都是可选的,即使全都没有也没关系,那就成了全表查询
重点2:no参数内容既可以是单个的id,比如“xxxx”;也可以是一个逗号分隔的ids,比如“xxx,yyy,zzz”
欢迎伙伴们点评。也请波总指教,看看还有没有可以调整或者优化的地方~