Mybatis 增强工具 Lcbatis

码农软件 · 软件分类 · ORM/持久层框架 · 2019-09-22 21:11:49

软件介绍

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);//推荐用来在后台查看各种类型的数据		
}

本文地址:https://codercto.com/soft/d/15185.html

Designing Web Navigation

Designing Web Navigation

James Kalbach / O'Reilly Media / 2007-8-15 / USD 49.99

Thoroughly rewritten for today's web environment, this bestselling book offers a fresh look at a fundamental topic of web site development: navigation design. Amid all the changes to the Web in the pa......一起来看看 《Designing Web Navigation》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具