(本测试项目--Helloworld下载地址: http://download.csdn.net/detail/partner4java/5045151为了减少刷屏,一些比如POJO的get和set方法就省略了,具体查看下载包)
相对于 p4jorm 对 JDBC的支持,hibernate和jpa的亮点在于formbean封装部分。
我们接下来将学习两部分:
1、省略Hibernate的dao或service代码。(能够做到大部分基本CURD,一行dao或service代码都不写)
2、简化HQL的封装。虽然我们使用ORM框架不需要书写SQL语句,但是HQL的查询条件等还是需要手工拼写,这里我们将帮您省去。
我们接下来不会像上一篇“《partner4java 讲述 p4jorm》之第二步:jdbc的使用”讲述细致,因为会hibernate的同学想必对spring也有了解,若真心不会spring,请查看:http://blog.csdn.net/partner4java/article/details/8194747
假设我们现在的hibernate实体、映射文件、spring配置文件等都已经完成(具体请查看附件测试项目):
entity --Contact:
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只需要继承:(具体请查看附件文档,后面我们就省略提醒,本文不会对提供的类或注解做过多说明,请动起手来看我提供的文档)
//继承P4jDao接口,传入实体泛型参数
public interface ContactDao extends P4jDao<Contact> {
}
实现我们提供了
P4jHibernateDaoSupport,这里ContactDaoImpl实现ContactDao也只需要额外继承P4jHibernateDaoSupport:
//实现了我们刚才定义的ContactDao接口,但是具体实现我们没有做,由P4jHibernateDaoSupport父类实现
@Service("contactDao")
public class ContactDaoImpl extends P4jHibernateDaoSupport<Contact> implements ContactDao {
}
是不是,dao的接口和实现我们一行代码也没写啊?请问,没写可以CURD么?
我们做下单元测试:
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:
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模糊查询),具体查看附件文档
/**
* 你会发现和我的Contact类很相似,通常情况下formbean会比entity少很多字段,或者多一些时间字段,这不是我们这里的重点,就不多解释了
*
* @author partner4java
*
*/
@P4jQueryForm
public class ContactFormBean implements Serializable {
private static final long serialVersionUID = 4358513464951563450L;
// 表示我们会查找名字为此的数据
@P4jGeneral(generalQueryType = GeneralQueryType.EQ)
private String realName;
// 我没有任何注解,不会参与查询
private String qq;
// 表示我们会根据地址模糊查询
@P4jLike
private String address;
接下来就是我们的Servlet(和往常一样)这里就不贴出来了:
//你会发现,你至始至终没有进行HQL封装,只是传入了formbean,我就给你返回了结果列表
PageData<Contact> pageData = contactDao.query(formBean, new PageIndex(new Integer(currentPage)), null);
jsp和普通的界面一样,我又给大家封装了一个分页:
-
<inputtype="hidden"name="currentPage"value="${pageData.pageIndex.currentPage}"/>
-
<divclass="pager">
-
<c:iftest="${pageData.pageIndex.currentPage>1}">
-
<aclass="prv"href="javascript:topage('${pageData.pageIndex.currentPage-1}')"><span>上一页</span></a>
-
</c:if>
-
<c:forEachbegin="${pageData.pageIndex.startPage}"end="${pageData.pageIndex.endPage}"varStatus="varStatus">
-
<c:iftest="${pageData.pageIndex.currentPage==(pageData.pageIndex.startPage+varStatus.count-1)}">
-
<strong><span>${pageData.pageIndex.startPage+varStatus.count-1}</span></strong>
-
</c:if>
-
<c:iftest="${pageData.pageIndex.currentPage!=(pageData.pageIndex.startPage+varStatus.count-1)}">
-
<ahref="javascript:topage('${pageData.pageIndex.startPage+varStatus.count-1}')"><span>${pageData.pageIndex.startPage+varStatus.count-1}</span></a>
-
</c:if>
-
</c:forEach>
-
<c:iftest="${pageData.pageIndex.currentPage<pageData.totalCount/pageData.pageIndex.maxResult}">
-
<aclass="next"href="javascript:topage('${pageData.pageIndex.currentPage+1}')"><span>下一页</span></a>
-
</c:if>
-
</div>
使用非常简单。
jsp方面,我们只需要完成一个类似于users.jsp:
-
<formaction="userlist"method="post">
-
用户名:<inputtype="text"name="username"value="${username}"/><br/>
-
地址:<inputtype="text"name="address"value="${address}"/>
-
<inputtype="submit"value="查询"/><br/>
-
<c:forEachitems="${pageData.resultlist}"var="user">
-
${user.username}--${user.password}--${user.address}<br/>
-
</c:forEach>
-
-
<%@includefile="fenye.jsp"%>
-
-
</form>
到目前为止我们已经完成了CURD操作,回想一下,我都额外需要你做什么?至始至终只给formbean添加三个注解,你就摆脱了CURD的书写,连HQL都不需要自己拼写。
分享到:
相关推荐
5. **兼容性提升**:修复后,P4JORM 1.0.1与更多的JPA实现(如Hibernate、EclipseLink等)以及其他的JPA工具和库有更好的兼容性。 总的来说,P4JORM 1.0.1版本的发布是一个积极的步骤,它提升了框架的稳定性和用户...
你还写jdbc呢?还在反复HQL拼写工作?p4jorm让你无需写一行代码,即可进行CURD,真正的简单易学。本人用了3天时间完成,还请各位多多指点 http://blog.csdn.net/partner4java/article/details/8559661 ...
P4JORM,全称为“Perfected Java Object-Relational Mapping”,是一款基于Java语言的高效ORM(对象关系映射)框架。在1.0.3这个版本中,开发者针对用户需求和常见问题进行了重要的改进,提升了框架的稳定性和用户...
开始那个版本是1.7,有些同学遇到“java.lang.UnsupportedClassVersionError: Bad version ”问题,如果是jdk 1.6,请用此版本,或者自己编译一个,因为已发布源码
This project is based on Java, is a lightweight ORM model. Only concerned about the Object-Relationl Mapping, therefore more simple and easier to use, easier to control. Key support functions and ...
**标题解析:** ...综上所述,jorm-unit 是一个面向Java开发者的测试工具,它简化了使用JPA的项目的单元测试,特别是在没有真实数据库服务器的环境中。它对于提高测试质量和开发效率有着显著的帮助。
JORM的核心特性之一是它支持EJB 2.0 Container Managed Persistence (CMP),这是Java企业版(J2EE)中的一项重要规范,用于处理Java实体Bean的持久性。通过JORM,开发者可以将Java对象轻松地映射到数据库表,简化了...
jorm-1.0.7.GA-javadoc
不用写sql啦,不用创建表啦,一个比mybatis更轻量级,比hibernate好用的orm!
MVC的低耦合性、高重用性、可维护性、软件工程的可管理性等诸多优点使其在java平台中很受欢迎,其间,也诞生了许多优秀的MVC框架,如专注于控制层的Struts、WebWork, Struts2, JSF等框架,专注于业务逻辑方面的...
4. **SAP DB, Hypersonic/Hsql, McKoi, Xindice, OJB, Hibernate, Castor, Torque, JORM, XMLBeans, JiBX, JAXB Reference Implementation, JaxMe**:这些是数据库访问和对象关系映射(ORM)工具,它们帮助开发者在 ...
Java OR-Mapper(对象关系映射器)是一种技术,它允许Java开发人员将数据库操作转换为对普通Java对象的操作,从而简化数据访问层的代码。这个开源项目提供了一个轻量级且高性能的解决方案,旨在让开发者能够专注于...
健康的决定因素 健康的社会决定因素的开源可视化...捕获电子健康记录中的社会和行为领域和措施:第2阶段(2014年)。 华盛顿特区:国家科学院出版社。 Gruszin,S.和Jorm,L.(2010年12月)。 公共卫生分类项目(共和
最近收到的书籍 ...JORM, AF 阅读和拼写障碍的心理学。 波士顿:Routledge & Kegan Paul,1983 年,134 页,价格不详。 KNOWLES, D., & REEVES, N. 但是奶奶不需要她的袜子吗? 爱荷华州迪比克