LcbatisMybatis 增强工具

联合创作 · 2023-09-30 01:57

lcbatis是mybatis的增强工具,在mybaits的基础上真正实现零配置扩展,对于一般的sql语句可以告别xml了。

用法(零配置,超简单)

  1. 把根目录那个Lcbatis.jar包下载下来导入到项目里面就OK了。 (重要:因为我小小修改了mybatis源代码的几个地方,所以Lcbatis.jar的导入的优先级必须要高于mybaits.jar,如果你没改过包名,默认是优先的)

  2. 获取Service对象,Service service = Session.getService("表名");

  3. 执行Service的方法,比如下面这句是根据主键id删除行,service.deleteById(27);

更多教程(可以将源代码下载下来看test包里的案例)

/* 执行添加操作,参数是按顺序传递
 * 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);
}
/* 执行添加操作,参数是按map的key进行匹配
 * 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);
}
/* 添加一个实体对象到数据库,参数自动匹配“表的字段名”与“实体的属性名”,匹配成功的属性将提交到数据库
 * sql:insert into laocheng_demo (`i`,`s`,`cid`) values (#{i},#{s},#{cid})
 * param:5(Integer), aaa(String), 45(Integer)
 * 自增id将自动映射到实体属性中(必须名字相同,类型也相同)
 */
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);//打印查看结果
}
/* 执行删除操作
 * 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();
}
/* 根据主键id执行删除操作
 * sql:delete from laocheng_demo where tid=#{tid}
 * param:27(Integer)
 */
public void t5(){		
	Service service = Session.getService("demo");
	//直接传主键id的值,程序会自动获取主键名并删除行
	service.deleteById(27);
}
/* 执行修改操作,参数会按setData的顺序读取,条件参数要写在结尾,当然如果你用参数改用hashmap,可以自动匹配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的值,程序会自动获取主键名并删除行
	service.where("tid=#{tid}").setData("abc",123,456,50).update("s","i","cid");
}
/* 根据实体对象保存修改,系统会根据属性自动匹配主键以及被修改的字段名
 * 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查询,除了执行必须排在最后,其他顺序不限制
 * 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}")//设置条件
		   .column("cid","s")//设置要查询的字段
		   .limit(0, 10)//取行数,仅支持mysql
		   .order("tid desc")//排序
	       .setData(50,"afdfsd")//传递参数	
	       .selectList();//返回一个list集合,适用于多条数据
		 //.selectMap();//返回一个map,适用于一条数据
		 //.selectOne(Demo.class);//返回一个实体对象
		 //.selectCount();//返回行数	
	Vardump.print(o);//打印查看结果
}
/* 对于复杂的sql,多表查询,可以用sql()方法,但还是建议老老实实写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")//设置条件
		   .limit(0, 10)//取行数,仅支持mysql
		   .order("a.tid desc")//排序
	       .setData(50,"afdfsd")//传递参数	
	       .selectList();//返回一个list集合,适用于多条数据	
	Vardump.print(list);//打印查看结果
}
/*
 * 可以在数据源中配置下面两个属性
 * <property name="servicePackage" value="cn.lcfms.service.{table}Service"/>
 * <property name="tablePrefix" value="laocheng_"/>
 * servicePackage为你service所在的包为cn.lcfms.service以及service的命名规范为“表名+Service”
 * 
 * tablePrefix为表前缀
 * 没配置了tablePrefix需要写表的完整名字Session.getService("laocheng_demo"),laocheng_demo是表名
 * 配置了tablePrefix可以简化为Session.getService("demo")
 * 
 * 这样你就可以像下面这样直接获取service对象
 */
@Test
public void t10(){	
	DemoService service = (DemoService) Session.getService("demo");
	service.test1();
	service.test2();
}

/*
 * 执行分页查询
 * 目前只支持mysql数据库,如果是多表查询,可以使用sql("sql语句").selectPage(10,7,request);
 * 可以单独使用Page p=new Page(总记录数, 每页行数, 页码数, request)来获取分页的页码
 * p.first()//首页
 * p.end()//末页
 * p.pagelist()//页码列表
 * p.count()//统计信息
 * p.nowpage()//当前页信息	
 * 
 */
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);//推荐用来在后台查看各种类型的数据		
}
浏览 13
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报