对于框架Hibernate以及iBatis的个人认知

问题一:很多新手感觉框架繁琐,绕来绕去。是否有用,是否好!
问题二:很多新手感觉H难以学习,配置方面弄得心烦意乱,有必要用H么!


好,就以上问题,高人有高人的解答。但往往让新手看的心理缥缈,因为高人会从理论的角度说一大偏让新手更加莫不找头脑的言语。

现在我就以一个刚刚做过SSH2以及SSI2的新人的角度来作为解答!希望能给与各位新人解惑!

就个人目前状态,增对框架甚至Java莫名其妙。学习路程也比较颠倒。

所以通过学习,把实例Struts+Spring+hibernate的项目完整的学习了一边,但学了会忘记,所以又自己根据原来的框架,在掌握了Struts2以及JPA,把项目完整的进行了改造,做好了第一个SSJ2的项目。

通过第一个项目的成功,我加紧利用SSJ2的框架再作了一些其他需求。稍微将SSJ2熟练了点。

但,这时候我还是糊里糊涂,感觉java的SSj2一些操作数据的方式跟以往其他VB,以及php,asp的方式很两样。感觉H或者J很深奥。虽然做出项目来了,但对J或者H心里十分崇敬和没底!因为里面涉及到的知识太多了!不可能通过一两个项目完全掌握!


后来我把J更改成iBatis,项目的持久层进行了改变,但其他层都不动。把原来的项目进行完全不动需求,进行了改编!

主要利用iBatis对用户以及权限部分进行了改造。

通过这个项目,回头再看!啊!从新人的角度来看,J或者H太好了!!!在关系比较复杂表关联比较多的情况下,J或者H通过实体的定义,操作这个实体,可以自动帮你实现复杂的SQL,这句话,我在做好两个SSH项目,都无法理解。现在我终于理解这番话了。 这是对第二个问题的解答!


至于第一个问题,框架就是先人们做大项目的经验,到处充满设计模式,例如工厂模式、抽象工厂模式、装饰模式等,所以对设计模式不太懂的人,利用套用框架,先死套,熟悉,之后再去看看设计模式中的一些模式,那么就对理解这些模式有很大帮助,相应的你就懂得为什么要框架,就是为了大型项目的代码复用以及科学化。

 

基于Hibernate持久层及iBatis持久层进行对比代码量和具体区别。
通过制作两种不同持久层的项目,得出以下个人感受!
1、Hibernate基于面向对象形式,自动映射,自动生成所有表以及关联表数据操作SQL。
2、iBatis仅仅对于SQL语句进行映射,所有表以及关联表都需要程序员自己写代码。
3、按照开发效率来说,基于本人初次制作感受:
 个人感觉在复杂关联情况下Hibernate开发效率至少比iBatis高出2倍以上。越复杂,侧开发效率更高。
 在没有表关联情况下,基于单独表,则开发效率Hibernate比iBatis至少高出1.5倍。
4、iBatis比较灵活,可以自行写SQL并优化之。提高程序运行效率。
5、根据教程文档了解Hibernate的二级缓存方面非常优秀,利用好,程序运行速度也比较高。这方面还没有详细去运用。
6、随着经验的加深,制作内网大型复杂程序,非Hibernate不可。开发效率,以及运行速度都可以随着经验的加深而成倍提高。
7、iBatis制作中小项目比较好,入门简单。面对外网访问,iBatis是非常好的选择

很多人新人对框架使用,特别是持久层框架使用,感觉非常头疼,感觉配置较多。对于开发是否有必要要用倒框架!
还有不少不喜欢接受新事物的老程序员,也口口声声说很反对框架。

这些人都是在没有彻底了解框架,和运用框架下,盲目做出说词!

初始,我也感到头疼。不过个人坚信必有存在道理,通过几个项目的开发,不同持久层的运用,感觉框架非常有必要。
大大节约了代码量。某些框架就是利用了设计模式。为了大型软件项目的开发做好了基础的奠定!

以上都是个人的一些使用结论。下面代码分别是Hibernate以及iBatis对于权限表操作的代码。

 

权限表有伍张表,其中三张表和两张关联表。

 

user (用户表)

字段: userName  password

 

 

privilegegroup (权限组)

字段: uuid  name

 

 

systemprivilege (权限值)

字段: model privilegeValue  name

 

 

user_role (角色表--用户表与权限组关联表)

字段: userName  groupID

 

 

group_privilege (权限组与权限值关联表)

字段: groupID  model privilegeValue

 

上面表以及字段都列出来了.相信各位应该能看懂.若看不懂的那么没必要看着篇文章了.

 

 

(以下代码分别是Hibernate 以及 iBatis对权限初始化, 都省略了一些判断,假定在数据全空的情况下第一次运行。)

 

public class HibernateTestOfInit {

 @Test 
 public void initTest(){
  initSystemPrivilege();
  initSystemGroup();
  initUser();
 }
 
 private void initUser() {
  User user = new User("admin");
  user.setPassword("123456");
                //下面这一句,自动生成相关联表的操作.代替了iBatis中的initGroup_Privilege()模块
  user.getGroups().addAll(groupService.getScrollData().getResultlist());  
  userService.update(user);  
 }
 
 private void initSystemGroup() {
  PrivilegeGroup group = new PrivilegeGroup();
  group.setName("系统管理组");
  //下面这一句,自动生成相关联表的操作.代替了iBatis中的initUser_Role()模块
  group.getPrivileges().addAll(systemPrivilegeService.getScrollData().getResultlist());
  groupService.save(group);
 }
 private void initSystemPrivilege() {
  List<SystemPrivilege> privileges = new ArrayList<SystemPrivilege>();
  privileges.add(new SystemPrivilege("privilegeGroup","update","权限组修改"));
  privileges.add(new SystemPrivilege("privilegeGroup","list","权限组查看"));
  privileges.add(new SystemPrivilege("user","delete","管理员删除"));
  privileges.add(new SystemPrivilege("user","insert","管理员添加"));
                systemPrivilegeService.batchSave(privileges);
 }

}

 

 


public class IBatisTestOfInit {

 @Test 
 public void initTest(){
  initSystemPrivilege();
  initPrivilegeGroup();
  initUser();

  initGroup_Privilege();
  initUser_Role();
 }
 private void initUser() {
  User newUser = new User("admin");
  user.setPassword("123456");
  userService.update(user);
 }
  
 private void initPrivilegeGroup() {
  PrivilegeGroup group = new PrivilegeGroup();
  group.setName("系统管理组");
  privilegeGroupService.insert(group);
 }
  
 private void initSystemPrivilege() {
  List<SystemPrivilege> privileges = new ArrayList<SystemPrivilege>();
  privileges.add(new SystemPrivilege("privilegeGroup","update","权限组修改"));
  privileges.add(new SystemPrivilege("privilegeGroup","list","权限组查看"));
  privileges.add(new SystemPrivilege("user","delete","管理员删除"));
  privileges.add(new SystemPrivilege("user","insert","管理员添加"));
  systemPrivilegeService.batchSave(privileges);
 }
  
 private void initGroup_Privilege() {
  String groupID = privilegeGroupService.queryByName("系统管理组").getUuid();
   
  List<Group_Privilege> group_Privileges = new ArrayList<Group_Privilege>();
  group_Privileges.add(new Group_Privilege(groupID,"privilegeGroup","update"));
  group_Privileges.add(new Group_Privilege(groupID,"privilegeGroup","list"));
  group_Privileges.add(new Group_Privilege(groupID,"user","insert"));
  group_Privileges.add(new Group_Privilege(groupID,"user","delete"));
   
  group_PrivilegeService.batchSave(group_Privileges);
 }
  
 private void initUser_Role(){
  String groupID = privilegeGroupService.queryByName("系统管理组").getUuid();
  User_Role newUser_Role = new User_Role();
  newUser_Role.setGroupID(groupID);
  newUser_Role.setUserName("admin");
  user_RoleService.insert(entity);
 } 
}

 

欢迎转载,作者大苯熊.

你可能感兴趣的:(设计模式,Hibernate,框架,ibatis,user,持久层框架)