paoding-rose 框架BaseDAO
2016-04-26 12:04
411 查看
版本:
用的paoding-rose 久了,感觉DAO层书写还是挺方便的.
但是在其他非rose项目中各种baseDAO 用起来挺舒服的。
每每想到rose中update语句,因为修改字段或条件不同就要创建一个方法,就感觉疲惫...
下面是我写的通用DAO,希望对用rose的人提供方便,大家如果有好的建议也可以分享下..
其中:
$table:为子类中的表名
$field:为子类中的查询字段
在baseDAO 中没有save 需要自己在子类中自己实现
baseDAO<T>:
子类:
调用:
<dependency> <groupId>net.paoding</groupId> <artifactId>paoding-rose-jade</artifactId> <version>2.0.u01</version> </dependency> <dependency> <groupId>net.paoding</groupId> <artifactId>paoding-rose-web</artifactId> <version>2.0.u01</version> </dependency>
用的paoding-rose 久了,感觉DAO层书写还是挺方便的.
但是在其他非rose项目中各种baseDAO 用起来挺舒服的。
每每想到rose中update语句,因为修改字段或条件不同就要创建一个方法,就感觉疲惫...
下面是我写的通用DAO,希望对用rose的人提供方便,大家如果有好的建议也可以分享下..
其中:
$table:为子类中的表名
$field:为子类中的查询字段
在baseDAO 中没有save 需要自己在子类中自己实现
baseDAO<T>:
import java.util.List; import java.util.Map; import net.paoding.rose.jade.annotation.SQL; import net.paoding.rose.jade.annotation.SQLParam; /** * 公共dao * @author Administrator * * 实现一些共有方法 */ public interface CommonDAO<T> { @SQL("select $field from $table where id=:id") T byId(@SQLParam("id")long id); /** * 修改 * 为了形成sql 方便 sql语句的实现都加了 update table set id=id... ,"id=id"表明每个表都要有id字段。 * @param modField 需要修改的字段 key为字段名,value为要改变的值 字段不能为null * @param condField 条件字段 key为字段名,value为要改变的值,该字段不能为null * @param cIsEmpty 默认写:false 为了防止condField为空 造成修改全表。在condField为true时可以修改全表 * @return */ @SQL("update $table set id=id " + "#for(key in :m.keySet()){ ,##(:key) = #(:m[:key]) }" + "#if(:c==null || :c.keySet().size()==0){" + " #if(:cIsEmpty){}#else{ where 1=2}" + "}#else{" + " where 1=1 #for(key in :c.keySet()){ and ##(:key) = #(:c[:key]) }" + "}" ) int update(@SQLParam("m")Map<String, Object> modField, @SQLParam("c")Map<String, Object> condField,@SQLParam("cIsEmpty")boolean cIsEmpty); /** * 分页 * * @param condField 条件字段 * @param start 开始数 * @param size 每页个数 * @param orderField 排序的字段 * @param direction 正序(asc),倒序(desc) * @return */ @SQL("select $field from $table " + "#if(:c!=null || :c.keySet().size()>0){" + " where 1=1 #for(key in :c.keySet()){ and ##(:key) = #(:c[:key]) }" + "}" + " order by ##(:orderField) ##(:direction)" + " limit :start,:size ") List<T> FindPage(@SQLParam("c")Map<String, Object> condField,@SQLParam("start")long start ,@SQLParam("size")int size,@SQLParam("orderField")String orderField, @SQLParam("direction")String direction); /** * 条件查询 总数量 * @return */ @SQL("select count(*) from $table " + "#if(:c!=null || :c.keySet().size()>0){" + " where 1=1 #for(key in :c.keySet()){ and ##(:key) = #(:c[:key]) }" + "}") int FindCount(@SQLParam("c")Map<String, Object> condField); /** * 根据条件查找一个 * @param condField * @return 条件为空 返回空 */ @SQL("select $field from $table " + "#if(:c!=null || :c.keySet().size()>0){" + " where 1=1 #for(key in :c.keySet()){ and ##(:key) = #(:c[:key]) }" + "}#else{ where 1=2}") T findOne(@SQLParam("c")Map<String, Object> condField); /** * 根据条件查找 * @param condField * @return 条件为空 返回空 */ @SQL("select $field from $table " + "#if(:c!=null || :c.keySet().size()>0){" + " where 1=1 #for(key in :c.keySet()){ and ##(:key) = #(:c[:key]) }" + "}#else{ where 1=2}") List<T> find(@SQLParam("c")Map<String, Object> condField); }
子类:
@DAO public interface ProductDAO extends CommonDAO<Product> { String table="t_product"; String field="id,name"; @SQL("insert into $table(name)" + " values(:p.name)") int save(@SQLParam("p")Product p); }
调用:
@Service public class ProductService { @Autowired ProductDAO productDAO; public Product detail(int id){ return productDAO.byId(id); } }
相关文章推荐
- OpenGL入门学习
- 剑指offer(21):顺时针打印矩阵
- caffe源码学习(四) layer
- 数据共享和数据传递
- cocos学习笔记:快速上手
- RHEL7.0 配置网络IP的三种方法
- Hibernate知识
- 优化TableViewCell高度计算的问题
- Qt之读写文件
- Java锁----Synchronized实现原理
- 【Android framework】am命令启动Activity流程
- android学习4-25 使用canvas绘制几何图形(在View内)
- 杨氏矩阵查找
- Java发送HTTP请求
- Parcelable encountered IOException writing serializable 问题解决
- 快速开平方根算法
- linux文件安全与权限
- linux进程的一生形象比喻
- KMP算法中改进的nextval数组
- 函数封装成DLL