问题一:很多新手感觉框架繁琐,绕来绕去。是否有用,是否好!
问题二:很多新手感觉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);
}
}
欢迎转载,作者大苯熊.