`
fantasy
  • 浏览: 506863 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

提速持久层开发-基于spring的CRUD组件(开源)

阅读更多

前提:

这个组件是基于Spring的getJdbcTemplate()来进行数据库操作。

 

组件特性:

1.子类只要继承父类SpringEntityDAO就能自动拥有添加,修改,删除,查询的方法 

2. 子类进行复杂查询的时候,不需要配置烦人的映射关系rowMapper

    这里的rowMapper是在父类中定义的,子类可以直接使用。

java 代码
  1. @SuppressWarnings("unchecked")  
  2.    public List queryNextFlows(String userId, String currentFlowState) {  
  3.        return getJdbcTemplate() .query( sql ,new Object[] { userId, currentFlowState }, rowMapper);  
  4.    } 

3.SpringEntityDAO提供一些比较常用的数据库操作方法,子类自动拥有。

   deleteAll 删除当前表的所有数据。

   queryAll 查询当前表的所有数据。

   queryBy根据属性名和属性值查询对象。

   queryBySql使用sql语句进行查询。

   具体可以参见SpringEntityDAO类。

4.兼容hibernate3.2.

   配置类似于hibernate annotation,但是不需要使用hibernate和hibernate annotation的jar包。

 

如何使用:

1.继承SpringEntityDAO,User是和数据库表对应的对象。

java 代码
  1. import org.kiral.model.User;  
  2. import org.kiral.widget.db.SpringEntityDAO;  
  3.   
  4. public class UserDAO extends SpringEntityDAO < User >  {  
  5.   
  6. }  

 


2. 使用注释配置表和对象的映射关系。

java 代码
  1. package org.kiral.model;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.kiral.widget.annotation.Column;  
  6. import org.kiral.widget.annotation.Id;  
  7. import org.kiral.widget.annotation.Table;  
  8. import org.kiral.widget.annotation.Transient;  
  9.   
  10. @Table(name = "USER_INFO")  
  11. public class User {  
  12.     private String id;  
  13.   
  14.     private String name;  
  15.   
  16.     private int old;  
  17.   
  18.     private String email;  
  19.   
  20.     private Date createDate;  
  21.   
  22.     private String memo;  
  23.   
  24.     private boolean isOnline;  
  25.   
  26.     @Transient  
  27.     public boolean isOnline() {  
  28.         return isOnline;  
  29.     }  
  30.   
  31.     public void setOnline(boolean isOnline) {  
  32.         this.isOnline = isOnline;  
  33.     }  
  34.   
  35.     @Column(name = "CREATE_DATE")  
  36.     public Date getCreateDate() {  
  37.         return createDate;  
  38.     }  
  39.   
  40.     public void setCreateDate(Date createDate) {  
  41.         this.createDate = createDate;  
  42.     }  
  43.   
  44.     public String getName() {  
  45.         return name;  
  46.     }  
  47.   
  48.     public void setName(String name) {  
  49.         this.name = name;  
  50.     }  
  51.   
  52.     public String getEmail() {  
  53.         return email;  
  54.     }  
  55.   
  56.     public void setEmail(String email) {  
  57.         this.email = email;  
  58.     }  
  59.   
  60.     @Id   
  61.     public String getId() {  
  62.         return id;  
  63.     }  
  64.   
  65.     public void setId(String id) {  
  66.         this.id = id;  
  67.     }  
  68.   
  69.     public String getMemo() {  
  70.         return memo;  
  71.     }  
  72.   
  73.     public void setMemo(String memo) {  
  74.         this.memo = memo;  
  75.     }  
  76.   
  77.     public int getOld() {  
  78.         return old;  
  79.     }  
  80.   
  81.     public void setOld(int old) {  
  82.         this.old = old;  
  83.     }  
  84.   
  85. }  

 

 

 

 


  3.执行测试

java 代码
  1. package org.kiral.dao;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.kiral.model.User;  
  6. import org.kiral.test.DaoTestCase;  
  7.   
  8. public class UserDAOTest extends DaoTestCase {  
  9.   
  10.     private UserDAO userDAO;  
  11.   
  12.     @Override  
  13.     protected void setUp() throws Exception {  
  14.         super.setUp();  
  15.         userDAO = (UserDAO) context.getBean("userDAO");  
  16.     }  
  17.   
  18.     public final void testALL() {  
  19.         // 构建用户  
  20.         User user = new User();  
  21.         final String id = "1";  
  22.         user.setId(id);  
  23.         user.setName("kiral");  
  24.         user.setEmail("main_shorttime@163.com");  
  25.         user.setCreateDate(new Date());  
  26.         user.setMemo("hello");  
  27.         user.setOld(100);  
  28.         // 添加用户  
  29.         userDAO.add(user);  
  30.         assertNotNull(userDAO.queryById(id));  
  31.   
  32.         // 更新用户  
  33.         user.setName("kiral2");  
  34.         userDAO.update(user);  
  35.         User newUser =userDAO.queryById(id);  
  36.         assertEquals("kiral2", newUser.getName());  
  37.   
  38.         // 查询用户  
  39.         assertNotNull(userDAO.queryAll());  
  40.   
  41.         // 删除用户  
  42.         userDAO.deleteById(id);  
  43.         assertNull(userDAO.queryById(id));  
  44.   
  45.     }  
  46. }  

 

  •    @Table(name="FLOW_TYPE"):配置表名,如果数据库的表名和对象名一致,则无需 配置。
  •    @Id:配置主键,每个对象都必须配置主键。@Id必须放在get方法上面。
  •    @Column(name="FLOW_TYPE_ID")  配置字段。当前的属性叫做ID,而数据库中的表的字段叫做FLOW_TYPE_ID,所以必须通过   Column配置对应关系。当前注释也必须放在get方法上面。
  •    @Transient:忽略当前属性,在get方法上面配置@Transient,表示数据库表中没有当前字段。
  •  

       一目了然!userDao直接使用CRUD方法。 


     

        附件是源代码和事例代码,直接作为project导入到eclipse下,然后执行org.kiral.dao.UserDAOTest。

        代码和注释都非常详细,大家一看就能明白。

       

    • widget.rar (3.2 MB)
    • 描述: 附件是源代码和事例代码,直接作为project导入到eclipse下,然后执行org.kiral.dao.UserDAOTest。
    • 下载次数: 1944
    分享到:
    评论
    11 楼 fantasy 2008-04-10  
    hibernate太复杂了,除非研究了很透彻,不然最好不要使用。
    我们公司就是因为这个原因放弃使用hibernate.
    10 楼 fantasy 2008-04-10  
    我们公司用的jboss
    9 楼 BadLuck 2007-12-19  
    penghao122 写道
    呵呵..不错啊..

    不过现在的应用程序都是基于jdk1.4的多

    最好能做到ror

    def  person < ActiveRecord
    scoflod:person
    end



    现在的grails可以这么搞了
    8 楼 liuchan7448 2007-12-18  
    不错,不错,讲的很清楚,看了以后很张知识
    7 楼 lovefly_zero 2007-12-18  
    spring太老点吧
    6 楼 lovefly_zero 2007-12-18  
    我们公司正准备改用1.5,很受用,我下载来看看
    5 楼 wangyugod 2007-12-17  
    向1.5转型
    4 楼 penghao122 2007-10-15  
    呵呵..不错啊..

    不过现在的应用程序都是基于jdk1.4的多

    最好能做到ror

    def  person < ActiveRecord
    scoflod:person
    end
    3 楼 fireflyjava 2007-10-15  
    不错的做法,但是目前的websphere server6.0或以下的都不支持1.5的特征吧!

    不知道你们公司是用什么服务器?
    2 楼 fantasy 2007-07-02  
    这个组件的思想来源于springside的HibernateEntityDao,也是对DAO层CRUD的封装,不同的是,springside是使用hibernate操作数据库,而我这个组件是使用spring的getJdbcTemplate()来操作数据库,但annotation是自己定义的,不需要依赖其他的jar包,更加轻量级。
    1 楼 fantasy 2007-07-02  
    目前这个组件已经经过真实项目的测试,在我们组开始做为公共组件使用,
    实例中演示了很多小的技术,如:
    使用hsqldb数据库,进行单元测试。
    使用ANNOTATION进行信息配置。
    使用反射调用方法,获得泛型。

    相关推荐

    Global site tag (gtag.js) - Google Analytics