当前位置:编程学习 > JAVA >>

《partner4java 讲述 p4jorm》之第三步:hibernate、jpa的使用

相对于 p4jorm 对 JDBC的支持,hibernate和jpa的亮点在于formbean封装部分。
 
我们接下来将学习两部分:
 
1、省略Hibernate的dao或service代码。(能够做到大部分基本CURD,一行dao或service代码都不写)
 
2、简化HQL的封装。虽然我们使用ORM框架不需要书写SQL语句,但是HQL的查询条件等还是需要手工拼写,这里我们将帮您省去。
 
我们接下来不会像上一篇“《partner4java 讲述 p4jorm》之第二步:jdbc的使用 ”讲述细致,因为会hibernate的同学想必对spring也有了解,若真心不会spring, 
 
假设我们现在的hibernate实体、映射文件、spring配置文件等都已经完成(具体请查看附件测试项目):
 
entity -- Contact:
 
 
[java]  
public class Contact implements Serializable {  
    private static final long serialVersionUID = -5446015810608365114L;  
    private Long contactId;  
    // ------基本联系方式  
    /** 真实的名字、公司名称、合作社名称、易做图单位名称 */  
    private String realName;  
    /** 所在地区 */  
    // private Area area;  
    /** 详细地址 */  
    private String address;  
    /** 手机号 */  
    private String phoneNumber;  
    /** 座机号 */  
    private String planeNumber;  
    /** 传真号 */  
    private String faxNo;  
    private String qq;  
    private String msn;  
上面的entity已经伴随hibernate实体映射时创建,我们接下来就要实现dao:
首先dao接口,我们提供了父类接口P4jDao,所以ContactDao只需要继承:(具体请查看附件文档,后面我们就省略提醒,本文不会对提供的类或注解做过多说明,请动起手来看我提供的文档)
 
 
[java] 
//继承P4jDao接口,传入实体泛型参数  
public inte易做图ce ContactDao extends P4jDao<Contact> {  
  
}  
实现我们提供了P4jHibernateDaoSupport,这里ContactDaoImpl实现ContactDao也只需要额外继承P4jHibernateDaoSupport:
 
[java] 
//实现了我们刚才定义的ContactDao接口,但是具体实现我们没有做,由P4jHibernateDaoSupport父类实现  
@Service("contactDao")  
public class ContactDaoImpl extends P4jHibernateDaoSupport<Contact> implements ContactDao {  
  
}  
是不是,dao的接口和实现我们一行代码也没写啊?请问,没写可以CURD么?
我们做下单元测试:
 
 
[java] 
public class ContactDaoImplTest {  
    private ContactDao contactDao;  
  
    @Before  
    public void setUp() throws Exception {  
        // 我们这里可以借助spring继承的test工程,这里不在使用,请参考  
        // http://blog.csdn.net/partner4java/article/details/7020300  
        // http://blog.csdn.net/partner4java/article/details/7020483  
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(  
                "/META-INF/spring/beans.xml");  
        contactDao = (ContactDao) applicationContext.getBean("contactDao");  
    }  
  
    // 首先来我们进行1000次的插入(说实话执行起来比我们上一篇的JDBC慢太多了)  
    @Test  
    public void testSave() {  
        for (int i = 0; i < 1000; i++) {  
            Contact contact = new Contact();  
            contact.setRealName("partner4java");  
            contact.setAddress("hello" + i);  
  
            // 我们虽然没有书写save方法,但是底层接口已经定义,P4jHibernateDaoSupport进行了实现  
            contactDao.save(contact);  
        }  
    }  
  
    // 删除某条数据,你可能疑惑,你也没告诉他是哪个实体,他如何删除的?别让了继承的时候我们传入了entity的类型“<Contact>”  
    @Test  
    public void testDeleteSerializableArray() {  
        contactDao.delete(2L);  
    }  
  
    // 获取一条数据,也是只需传入主键id  
    @Test  
    public void testFind() {  
        System.out.println(contactDao.get(1L));  
    }  
  
    // 更新  
    @Test  
    public void testUpdate() {  
        Contact contact = new Contact();  
        // 指定主键  
        contact.setContactId(1L);  
        contact.setAddress("hello 北京");  
        contactDao.update(contact);  
    }  
通过单元测试,我们很容易的掌握和验证了p4jorm的简答易用。
接下来,让您见识一下简化HQL封装:
 
 
查询数据:
 
每次你点击form表单的查询提交后,是否心里暗想,我都已经把数据给你了,你为什么不自动给我返回我想要的数据呢?为什么还需要我费劲的去拼写查询SQL呢?
 
好吧,我帮你实现,而且不对你奢求太多工作:
 
如果你使用了struts类似框架,你一定有一层叫formbean,你只需要在formbean为几个需要参与查询字段加上注解就可以了(额外让你劳苦了几秒钟)。
 
(首先说明一点哈,form的提交到formbean中的数据封装,这是MVC框架的工作,我不会帮你做)
 
我们这里没有使用MVC框架,直接使用了Servlet:com.partner4java.jdbctest.web.UserListServlet(这个不是我们的重点就不贴出来了,自己去看附件)
 
我们定义了formbean:
 
[java]  
public class ContactFormBean implements Serializable {  
    private static final long serialVersionUID = 4358513464951563450L;  
  
    private String realName;  
    private String qq;  
    private String address;  
有了formbean我们还是加俩注解:
P4jQueryForm(标注于类上,表明本类的字段赋值会用于查询拼写,必须指定本注解)、P4jGeneral(用于声明某字段为普通查询,如等值查询)、P4jLike(用于声明某字段为like模糊查询),具体查看附件文档
 
[java]  
/** 
 * 你会发现和我的Contact类很相似,通常情况下formbean会比entity少很多字段,或者多一些时间字段,这不是我们这里的重点,就不多解释了 
 *  
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,