LcbatisMybatis 增強(qiáng)工具
lcbatis是mybatis的增強(qiáng)工具,在mybaits的基礎(chǔ)上真正實(shí)現(xiàn)零配置擴(kuò)展,對(duì)于一般的sql語(yǔ)句可以告別xml了。
用法(零配置,超簡(jiǎn)單)
把根目錄那個(gè)Lcbatis.jar包下載下來(lái)導(dǎo)入到項(xiàng)目里面就OK了。 (重要:因?yàn)槲倚⌒⌒薷牧薽ybatis源代碼的幾個(gè)地方,所以Lcbatis.jar的導(dǎo)入的優(yōu)先級(jí)必須要高于mybaits.jar,如果你沒(méi)改過(guò)包名,默認(rèn)是優(yōu)先的)
獲取Service對(duì)象,Service service = Session.getService("表名");
執(zhí)行Service的方法,比如下面這句是根據(jù)主鍵id刪除行,service.deleteById(27);
更多教程(可以將源代碼下載下來(lái)看test包里的案例)
/* 執(zhí)行添加操作,參數(shù)是按順序傳遞
* sql:insert into laocheng_demo (`s`,`i`,`cid`) values (#{s},#{i},#{cid})
* param:abc(String), 1(Integer), 2(Integer)
* return:自增的id
*/
public void t1(){
Service service = Session.getService("demo");
int lastId=service.setData("abc",1,2).insert("s","i","cid");
System.out.println(lastId);
}
/* 執(zhí)行添加操作,參數(shù)是按map的key進(jìn)行匹配
* sql:insert into laocheng_demo (`s`,`i`,`cid`) values (#{s},#{i},#{cid})
* param:abcde(String), 1(Integer), 2(Integer)
* return:自增的id
*/
public void t2(){
Service service = Session.getService("demo");
HashMap<String, Object> map=new HashMap<>();
map.put("cid", 2);
map.put("i", 1);
map.put("s", "abcde");
int lastId=service.setData(map).insert("s","i","cid");
System.out.println(lastId);
}
/* 添加一個(gè)實(shí)體對(duì)象到數(shù)據(jù)庫(kù),參數(shù)自動(dòng)匹配“表的字段名”與“實(shí)體的屬性名”,匹配成功的屬性將提交到數(shù)據(jù)庫(kù)
* sql:insert into laocheng_demo (`i`,`s`,`cid`) values (#{i},#{s},#{cid})
* param:5(Integer), aaa(String), 45(Integer)
* 自增id將自動(dòng)映射到實(shí)體屬性中(必須名字相同,類型也相同)
*/
public void t3(){
Service service = Session.getService("demo");
Demo demo=new Demo();
demo.setI(5);
demo.setS("aaa");
demo.setCid(45);
service.insert(demo);
Vardump.print(demo);//打印查看結(jié)果
}
/* 執(zhí)行刪除操作
* sql:delete from laocheng_demo where tid=#{tid}
* param:1(Integer)
*/
public void t4(){
Service service = Session.getService("demo");
//where("tid=1")也可以,但如果1是變量的話不建議使用字符串拼接,不安全容易被注入
service.where("`tid`=#{tid}").setData(1).delete();
}
/* 根據(jù)主鍵id執(zhí)行刪除操作
* sql:delete from laocheng_demo where tid=#{tid}
* param:27(Integer)
*/
public void t5(){
Service service = Session.getService("demo");
//直接傳主鍵id的值,程序會(huì)自動(dòng)獲取主鍵名并刪除行
service.deleteById(27);
}
/* 執(zhí)行修改操作,參數(shù)會(huì)按setData的順序讀取,條件參數(shù)要寫(xiě)在結(jié)尾,當(dāng)然如果你用參數(shù)改用hashmap,可以自動(dòng)匹配key的值,不需要考慮順序
* sql:update laocheng_demo set `s`=#{s},`i`=#{i},`cid`=#{cid} where tid=#{tid}
* param:abc(String), 123(Integer), 456(Integer), 50(Integer)
*/
public void t6(){
Service service = Session.getService("demo");
//直接傳主鍵id的值,程序會(huì)自動(dòng)獲取主鍵名并刪除行
service.where("tid=#{tid}").setData("abc",123,456,50).update("s","i","cid");
}
/* 根據(jù)實(shí)體對(duì)象保存修改,系統(tǒng)會(huì)根據(jù)屬性自動(dòng)匹配主鍵以及被修改的字段名
* sql:update laocheng_demo set `i`=#{i},`s`=#{s},`cid`=#{cid} where tid=#{tid}
* param:5(Integer), aaa(String), 45(Integer), 50(Integer)
*/
public void t7(){
Service service = Session.getService("demo");
Demo demo=new Demo();
demo.setTid(50);//主鍵
demo.setI(5);
demo.setS("aaa");
demo.setCid(45);
service.update(demo);
}
/* 拼裝sql查詢,除了執(zhí)行必須排在最后,其他順序不限制
* sql:select cid,s from laocheng_demo where tid>#{tid} and s=#{s} order by tid desc limit 0,10
* param:50(Integer), afdfsd(String)
*/
public void t8(){
Service service = Session.getService("demo");
Object o=service.where("tid>#{tid} and s=#{s}")//設(shè)置條件
.column("cid","s")//設(shè)置要查詢的字段
.limit(0, 10)//取行數(shù),僅支持mysql
.order("tid desc")//排序
.setData(50,"afdfsd")//傳遞參數(shù)
.selectList();//返回一個(gè)list集合,適用于多條數(shù)據(jù)
//.selectMap();//返回一個(gè)map,適用于一條數(shù)據(jù)
//.selectOne(Demo.class);//返回一個(gè)實(shí)體對(duì)象
//.selectCount();//返回行數(shù)
Vardump.print(o);//打印查看結(jié)果
}
/* 對(duì)于復(fù)雜的sql,多表查詢,可以用sql()方法,但還是建議老老實(shí)實(shí)寫(xiě)xml,不然你不如用hibernate
* sql:select * from laocheng_demo a,laocheng_demochild b where a.cid=b.cid order by a.tid desc limit 0,10
* param:50(Integer), afdfsd(String)
*/
public void t9(){
Service service = Session.getService("demo");
List<HashMap<String, Object>> list = service
.sql("select * from laocheng_demo a,laocheng_demochild b")
.where("a.cid=b.cid")//設(shè)置條件
.limit(0, 10)//取行數(shù),僅支持mysql
.order("a.tid desc")//排序
.setData(50,"afdfsd")//傳遞參數(shù)
.selectList();//返回一個(gè)list集合,適用于多條數(shù)據(jù)
Vardump.print(list);//打印查看結(jié)果
}
/*
* 可以在數(shù)據(jù)源中配置下面兩個(gè)屬性
* <property name="servicePackage" value="cn.lcfms.service.{table}Service"/>
* <property name="tablePrefix" value="laocheng_"/>
* servicePackage為你service所在的包為cn.lcfms.service以及service的命名規(guī)范為“表名+Service”
*
* tablePrefix為表前綴
* 沒(méi)配置了tablePrefix需要寫(xiě)表的完整名字Session.getService("laocheng_demo"),laocheng_demo是表名
* 配置了tablePrefix可以簡(jiǎn)化為Session.getService("demo")
*
* 這樣你就可以像下面這樣直接獲取service對(duì)象
*/
@Test
public void t10(){
DemoService service = (DemoService) Session.getService("demo");
service.test1();
service.test2();
}
/*
* 執(zhí)行分頁(yè)查詢
* 目前只支持mysql數(shù)據(jù)庫(kù),如果是多表查詢,可以使用sql("sql語(yǔ)句").selectPage(10,7,request);
* 可以單獨(dú)使用Page p=new Page(總記錄數(shù), 每頁(yè)行數(shù), 頁(yè)碼數(shù), request)來(lái)獲取分頁(yè)的頁(yè)碼
* p.first()//首頁(yè)
* p.end()//末頁(yè)
* p.pagelist()//頁(yè)碼列表
* p.count()//統(tǒng)計(jì)信息
* p.nowpage()//當(dāng)前頁(yè)信息
*
*/
public void t11(HttpServletRequest request){
Map<String, Object> map=Session.getService("item")
.column("itemId")
.where("itemId>#{itemId}")
.setData(10)
.order("itemId desc")
.selectPage(10,7,request);
Vardump.print(map);//推薦用來(lái)在后臺(tái)查看各種類型的數(shù)據(jù)
}評(píng)論
圖片
表情
