fireflyc 写道
嘿嘿,这个帖子挺热。似乎javaeye上的这种帖子都很热。。。。。都要成框架生产基地了。每天都有伟大的东西诞生,不知道是喜还是忧。
看了一下楼主的想法,无非是根据tableName和类的属性生成SQL语句。这种做的原因无非是觉得hibernate是如何如何的差。其实事情没有那么糟糕,
如果说Hibernate差,那么楼主的东西比Hibernate更差。
楼主的东西也是一种根据Class推导出SQL语句的。而hibernate也是这样的。所以设计思想上是相通的。而楼主的做法不如hibernate的原因是因为,hibernate底层有不通的数据库SQL生成引擎(这个命名。。。呵呵),而且有二级缓存,关联查询,HQL查询语句等等功能。而比起楼主的做法要丰富的多。所以如果说Hibernate差那么楼主的做法比Hibernate更差。
楼主觉得Hibernate差的原因无非是因为“我们需要一个与StudentSchema类似的POJO类,一个DAO类,一个*.hbm.xml映射文件,才能达到类似的效果,机制繁琐,性能消耗明显要高。 ”事实果真如此吗?不尽然,不妨分析一下:
首先是需要一个POJO得javabean,里面到底要不要包含序列化得业务逻辑?如果包含,那么就是富领域对象了,如果不包含就是贫血对象了。而对于java开发人员来讲贫血的是更普遍的。数据承载对象由javabean的model负责,而业务逻辑有service负责。所以POJO类是一定需要的。至于DAO,完全可以省略了,我们只需要一个Service层就可以了。这里不妨引用一下我随手找大一些代码段
public Page<SiteUser> findUserByPage(int pageno) {
String hql = "FROM SiteUser siteUser";
return siteUserDao.pagedQuery(hql, pageno, Constants.PAGE_SIZE);
}
public void saveUser(String userName) {
SiteUser entity = new SiteUser();
entity.setName(userName);
entity.setSiteId(UUIDGenerator.generateUUID());
entity.setPwd(MD5.crypt(entity.calPwdCode()));
siteUserDao.save(entity);
}
public void updateUser(String userId, String userName) {
SiteUser entity = siteUserDao.get(userId);
entity.setName(userName);
entity.setSiteId(UUIDGenerator.generateUUID());
entity.setPwd(MD5.crypt(entity.calPwdCode()));
siteUserDao.save(entity);
}
public SiteUser auth(String userName, String siteId) {
String hql = "FROM SiteUser siteUser WHERE siteUser.name=? AND siteUser.siteId=?";
return siteUserDao.findOne(hql, userName, siteId);
}
这里的DAO其实是
private HibernateDao<SiteUser> siteUserDao;
也就是所DAO层名存实亡了。
那么还有一个配置文件的问题,这个基本上不是问题,使用JPA的注解。最佳实践是尽量的少写JPA的注解,尽量默认。看我的注解对象
@Entity
public class SiteUser extends JPAModel {
@Id
private String id = UUIDGenerator.generateUUID();
@Column
private String name;
@Column
private String siteId;
@Column
private String pwd;
@Column
private Date addDate = new Date();
只需要在spring里的sessionFactory定义一下
<property name="namingStrategy">
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
</property>
就会完成名称的“约定大于配置”
如此,这些事情也不再繁琐了。得到的好处也是显而易见的了:我们能使用hibernate的save,update,deleteById等基本操作,书写HQL语句要比书写SQL语句更短一点更容易理解一点。现在Hibernate才是被我们玩而不是我们被它玩了。
分享到:
相关推荐
Struts+spring+hibernate学习笔记! - Struts原理与实践
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
Eclipse中Hibernate插件。
Eclipse用于Hibernate框架开发插件,全CSDN最低资源分下载,让你吃上真正的石灰。。。
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
hibernatetools-Update-4.1.1.zip
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
hibernate学习笔记 hibernate学习笔记 hibernate学习笔记 hibernate学习笔记 hibernate学习笔记 hibernate学习笔记 hibernate学习笔记 hibernate学习笔记
Hibernate学习笔记_特别详细 Hibernate学习笔记_特别详细
Hibernate学习笔记 Hibernate学习笔记 Hibernate学习笔记 Hibernate学习笔记
hibernate-commons-annotations-5.0.1.Final.jar的源码
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-release-5.0.7.Final压缩包 -document -lib -project 内部Hibernate依赖库: antlr-2.7.7.jar dom4j-1.6.1.jar geronimo-jta_1.1_spec-1.1.1.jar hibernate-commons-annotations-5.0.1.Final.jar ...
hibernate-jpa-2.1-api-1.0.0.final.jar.zip,内含hibernate-jpa-2.1-api-1.0.0.final.jar
Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
学习hibernate框架时,整理的笔记,对hibernate框架有全面的介绍
hibernate many-to-many级联保存,级联更新,级联删除
hibernate-jpa-2.1-api-1.0.0.Final.jar官方下载,请放心使用
hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向