首页 > 编程语言 > 详细

框架SSH(Spring+Struts2+Hibernate)

时间:2020-03-02 18:42:51      阅读:78      评论:0      收藏:0      [点我收藏+]

一.正如我们所想的SSH老框架一个,没有研究的意义,(个人意见不要喷我)

但是SSH却有和现在较为流行的框架有相同的地方SSM(Spring+SpringBoot+mybatis)

二.SSH

    1.SSH是一个集成框架,从职责上来分为表示层,业务逻辑层,数据持久化层,域模块层

         1.1.表示层:位于最外层(最上层),最接近用户。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面(说人话就是各位老板上网时鼠标点的地方和键盘写的地方)        

         1.2.业务逻辑层:业务规则的制定、业务流程的实现等与业务需求有关的系统设计,对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者

(大概意思就是程序猿小哥哥们一天天实现的业务需求,功能啥的)

         1.3数据持久化层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。(就是注册的数据放到一个数据库里面,下次登录的时候可以取到,不至于丢了)

1.4.域模块层:(通俗意思javaBean)

 

技术分享图片

二.了解顺序

     2.1就个人理解一般业务先前端在后端,而后端又分为上面这几个部分,而后端的业务一般来说对于我们这种小白就是先dao->service->web(表示层)

当然也有大牛随便写代码都6的一*,dao也就是我们的Hibernate ,spring就是我们的业务逻辑层service,struts2相当于我们的servlet差不多吧

三.Hibernate了解.

      首先要了解Hibernate的工作原理:对Jdbc进行了封装,相当于使用了jdbc,对JDBC进行封装的框架有DBUtils,mybatis,还有就是主角Hibernate

      Hibernate的接口:1.SessionFactory获取session对象

                                  2.session操作数据库的接口相当于那个SQL中的statement

                                  3.Transaction对象,就是事务(我吐了,这个太多了)

                       事务是一个面试重点:1.ACID特性:原子性,隔离性,持久性,一致性.

                                                         2.事务的隔离级别:

                                                             2.1.脏读:这个太捞了,就是你没有提交的数据就可以读到数据

                                                             2.2.不可重复读:就是一个A事务不停读,B事务进行提交,A还在读,所以数据产生问题(这个用于数据修改)

                                                             2.3幻读:就是一个A事务不停读,B事务进行提交,A还在读,所以数据产生问题(这个用于插入和删除数据)

                                                        3.MySQL事务隔离级别(四种)

                                                             3.1.可重复读:不能解决幻读

                                                             3.2 .读未提交:什么问题都解决不了

                                                             3.3.不可重复读:不能解决 不可重复读和幻读

                                                             3.4.串行化:非常优秀没得一点问题,但是一般不使用,性能低.,对空间造成浪费

                                                    4.回滚.断点

                                                              4.1.回滚没啥好记得

                                                              4.2.保存点:有两组事务AB,CD,这样吧,每月15号放工资15000元,公司账户扣钱,你卡加钱成为一组事务AB.

                                                                              还有你和银行的短信服务,花10块钱就有短信的那种,刚好这一段时间网不好,短信没发过来,你也没收到

                                                                              叫做事务CD,例子可能不好你就这样理解,两组操作写在一起了,AB完成,CD未完成怎么办.算了看代码吧手录一段

                                                             //获取连接

                                                            Connection conn=null;//理解为已经获取到连接了,(不要和我杠)

                                                            try{
                                                                      Statement.update(A);Statement.update(B);

                                                                      SavePonit ap=new SavePoint();

                                                                      sp.set();

                                                                      Statement.update(C);Statement.update(D);

                                                                    }catch(SqlException e){

                                                                         if(sp!=null){

                                                                                conn.commit();

                                                                              }else{

                                                                                  conn.rollback();

                                                                                 }

                                                                       }finally{

                                                                                 conn.close();

                                                                           }     

                                                                  代码 分析:不管AB,CD   哪一个有问题都会跳到catch对吧,然后AB 出现问题sp必然为空 ,否则在异常情况下sp不为空提                                                                                        交 AB,否则直接回滚到ABCD之前 .问题得以解决                                    

 

 

 

 技术分享图片

 

 

 上面这个图就是解释,但是我不太喜欢PPT.

1.

 

 

 

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory >
		<!--1.配置数据库连接的4个参数  -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day1</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		
		<!--是否显示sql语句  -->
		<property name="show_sql">true</property>
		
		<!-- 是否格式化sql语句 -->
		<property name="format_sql">true</property>
	    <property name="hibernate.current_session_context_class">thread</property>
	    <!-- 是否自动提交事务 -->
	    <property name="hibernate.connection.autocommit">true</property>
	    <!--<property name="hibernate.hbm2ddl.auto"></property>
	    配置映射文件与数据库表的关系,
	    update:如果数据库没有表,自动帮你创建[常用]
	    create:每次启动hibernate都帮你创建表
	    create-drop,每次启动hibernate都帮你创建表,执行完成后删除表
	    validate:检验hbm文件,如果与数据库的字段不一致,会抛出异常-->
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
	    <!-- 配置JavaBean于表的映射关系 -->
	    <mapping resource="domain/User.hbm.xml"/>//这个就是写的时候使用的一个模型的映射可以改


3.2
技术分享图片

 

 

 

 

package untils;

import org.hibernate.session;
import org.hibernate.sessionfactory;
import org.hibernate.cfg.configuration;


public class hibernateutils {
    private static  sessionfactory sessionfactory;
    static {
        configuration configuration=new configuration().configure();//读取配置文件
         sessionfactory=configuration.buildsessionfactory();//使用Configureation获取会话工厂
         //监听程序关闭,这部分代码就是在数据库操作完成之后将session对象和sessionFactory关闭
        runtime.getruntime().addshutdownhook(new thread(){
            @override
            public void run() {
                //关闭会话工厂
                system.out.println("资源释放...");
                getsession().close();
                sessionfactory.close();
            }
        });
    }
    public static session getsession(){
        return  sessionfactory.opensession();//得到一个session,在hibernate中是session来操作数据库的
    }
    public static session getcurrentsession(){
        return sessionfactory.getcurrentsession();
    }
}

 四.操作数据库(由于代码较多,不好查找,并且不能只看代码理解,所以以后不可不粘贴代码只写理解)

           4.1,获取一个数据

                 session.get("填写sql或者hql","查询数据的类型");比如

                 User user=(User)session.get("sql语句",User.class).unique();

                 如果查询的是一堆数据的话后面就是.list,用ArrayList接收返回数据,之后遍历即可;

          4.2,load和get的区别

                  其实就是懒加载和及时加载的问题,get是直接去数据库查询如果没有就返回空(null),而load就是默认存在数据然后

                  交给一个代理,懒加载原理就是默认存在,当你使用当这一个数据是才会到数据库查询,如果使用懒加载不存在数据的话

                 就会报一个运行时异常,这里记不清了,大家可以自行实践,好像是一个nullpointException吧

         4.3 可以使用dbcp和c3p0来结合hibernate使用

                  这里不得不提c3p0和dbcp的区别的

                     4.3.1.c3p0在性能上回避我们的dbcp性能更高一点,因为dbcp如果你使用的个数超过了连接池个数就会全面崩盘,所有连接都断开

                                这依旧是看网课卡,甚至断线的原因之一,还有用分布式高并发处理问题时候用到一个技术叫hash分流技术,相当于一个布隆过滤器

                                而我们的c3p0这会使用LRU算法将长时间未使用的断开连接以达到拒绝卡顿,完美上网的作用.

                     4.3.2.其实这个就是把我们的配置文件进行读取获取连接.

五.hibernate里面的二级缓存

       5.1二级缓存的类型:类缓存,对象缓存,时间戳缓存

<property name="hibernate.cache.use_second_level_cache">true</property>开启二级缓存.默认关闭的
写不动了,过两天再写^~^https://music.163.com/#/song?id=1415566662

                   

框架SSH(Spring+Struts2+Hibernate)

原文:https://www.cnblogs.com/whr-blogs/p/12397157.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!