lcbatis 是mybatis的增强工具,在mybaits的基础上真正实现零配置扩展,对于一般的sql语句可以告别xml了。
用法(零配置,超简单)
把根目录那个Lcbatis.jar包下载下来导入到项目里面就OK了。 (重要:因为我小小修改了mybatis源代码的几个地方,所以Lcbatis.jar的导入的优先级必须要高于mybaits.jar,如果你没改过包名,默认是优先的)
获取Service对象,Service service = Session.getService(“表名”);
执行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);//推荐用来在后台查看各种类型的数据 }