锁定老帖子 主题:造了个Hibernate的小轮子,显丑下
精华帖 (1) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (6)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-31
最后修改:2009-11-02
以下贴段分页查询的代码,展示下它的基本风格: /** * 以下的四个分页查询参数一样,结果也是一样的,只是编码风格不一样 * */ public Pagination<BookInfo> page1(Pagination<BookInfo> page, String bookName, int stock) { Selecter<BookInfo> s=this.createSelecter(); s.like("bookName", "%"+bookName+"%").and().large("stock", stock); //s.orderBy("stock"); //s.exclude("description"); s.page(page); return page; } public Pagination<BookInfo> page2(Pagination<BookInfo> page, String bookName, int stock) { this.pageByWhere(page, "$bookName like ? and $stock>?", "%"+bookName+"%",stock); return page; } public Pagination<BookInfo> page3(Pagination<BookInfo> page, String bookName, int stock) { //$开头表示成员变量名 ?开始为参数占位名 Executer e=this.createQueryExecuter("$bookName like ?bname and $stock>?stock"); e.set("bname", "%"+bookName+"%"); e.set(1, 0); e.pageBeans(BookInfo.class, page); return page; } public Pagination<BookInfo> page4(Pagination<BookInfo> page, String bookName, int stock) { String sql="select * from book_info where book_Name like ?bname and stock>?stock"; Executer e=this.getVisiter().createExecutor(sql); e.set("bname", "%"+bookName+"%"); e.set("stock",0); e.pageBeans(BookInfo.class, page); return page; } /**将查询结果封装到一个数组中*/ public Pagination<Object[]> pageArray(Pagination<Object[]> page, String bookName, int stock) { Executer e=this.createQueryExecuter("$bookName like ?bname and $stock>?stock"); e.set("bname", "%"+bookName+"%"); e.set(1, 0); e.pageArray(page); return page; } /**将查询结果封装到一个以列名为键,数据为值的Map集合*/ public Pagination<Map<String, Object>> pageMap( Pagination<Map<String, Object>> page, String bookName, int stock) { Executer e=this.createQueryExecuter("$bookName like ?bname and $stock>?stock"); e.set("bname", "%"+bookName+"%"); e.set(1, 0); e.pageMap(page); return page; } 贴下BaseDao接口 public interface IBaseDao <T extends Object> { T add(T bean); void update(T bean); void delById(Object id); int delByField(String field,Object value); T getById(Object id); T getFirstByField(String field,Object value); T getUniqueByField(String field,Object value); List<T> listAll(); List<T> list(Integer curPage,Integer perPage); List<T> list(Long beginRow,Long endRow); List<T> listByField(String field,Object value); Pagination<T> page(Pagination<T> page); Pagination<T> pageByField(Pagination<T> page,String field,Object value); } 再贴上下文(此项目无任何xml配置文件,全是anntation) @VisitConfig( dataSource={@Source(driverClazz=com.mysql.jdbc.Driver.class, url="jdbc:mysql://127.0.0.1:3300/books", userName="root", password="root", dbType=DBType.MYSQL ) } ) public class TestVisitContext extends VisitContext{ private TestVisitContext(){ this.init(); } private static VisitContext testContext; public static VisitContext getContext(){ if(testContext==null)testContext=new TestVisitContext(); return testContext; } } 自以为它的适用比较适用于大并发的互联网项目,对性能要求比较高的项目 再贴一个示例 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-10-31
最后修改:2009-10-31
这种造法没多大意义,如果一定要造,直接造Criteria查询,更符合OO风格。
|
|
返回顶楼 | |
发表时间:2009-10-31
fansofjava 写道 这种造法没多大意义,如果一定要造,直接造Criteria查询,更符合OO风格。
s.like("bookName", "%"+bookName+"%").and().large("stock", stock); 这是仿Criteria的,2007初时,我不知道Hibernate里有这玩意,不然也不会造轮子...... |
|
返回顶楼 | |
发表时间:2009-10-31
把那个Bean贴出来...吼吼
@Table(name="BOOK_INFO") public class BookInfo { @Column @Id @Value(strategy=Strategy.HHEX16) public String id; @Column() @VString(minLenth=2) public String bookName; @Column() @Value(def="true") public boolean showAble; @Column() @VString(minLenth=20,maxLenth=4000) public String description; @Column() public String img; @Column() @VString(nullable=false) public String typeId; @Column() @Value(def="0") public Integer stock; } |
|
返回顶楼 | |
发表时间:2009-11-02
很强大的说,似乎LZ自己做了压力测试。
|
|
返回顶楼 | |
发表时间:2009-11-02
不如写一个语法分析器,让hql支持动态查询方式。
如 select t from Table t where t.name = :name [and t.location=:location] 如果location为空就不要后面的条件。 |
|
返回顶楼 | |
发表时间:2009-11-02
好像不错,可否将visit3.0.jar 源码公布下
让大家学习下 |
|
返回顶楼 | |
发表时间:2009-11-02
treblesoftware 写道 很强大的说,似乎LZ自己做了压力测试。
以前版本做过压力测试(比较简单,不全面的),因为封装、抽象没有Hibernate那样深层化;功能也没那么多大全,够用就行;鄙人代码写的还不是太烂,所以测试中,比Ibatis略好。 |
|
返回顶楼 | |
发表时间:2009-11-02
matt.u 写道 不如写一个语法分析器,让hql支持动态查询方式。
如 select t from Table t where t.name = :name [and t.location=:location] 如果location为空就不要后面的条件。 这确实是个很重要的问题,比较方便啊,但是我为了简单抽象程度没这么高,只写了简单的扫描器,但有替代方案 s.like("bookName", "%"+bookName+"%").and().large("stock", stock); 这种模式下,参数值为null则不会做为查询条件 |
|
返回顶楼 | |
发表时间:2009-11-02
qiren83 写道 好像不错,可否将visit3.0.jar 源码公布下
让大家学习下 重构版本没写注释,不怎么好看啊!但比Hibernate的源码容易看多了 实在小啊,源码大小不及Hibernate的1/20.....哈哈,看看还是不错的 |
|
返回顶楼 | |