SSH是 struts+spring+hibernate的一个集成框架,是16年之前较为流行的一种Web应用程序开源框架,因为是非常老的技术了,所以现在大部分公司的新项目都不会
再使用此框架了。由于学校的javaee课程有要求学习这个框架,所以在这记录一下SHH框架的搭建过程。
集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,
负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。
Hibernate,是负责了跟数据库的交接。通过持久化数据对象,进行对象关系的映射,并以对象的角度来访问数据库,对JDBC进行了封装。通过hibernate.cfg.xml文.件来配置与数据库的连接,类对应的hbm.xml文
件来与数据库的具体表进行映射。并且Hibernate有自己的HQL语句,与数据库的SQL语句相似,但不同的是HQL语句在面向对象编程的角度上,通过Session的createQuery方
法创建户一个query对象,由这个对象来完成对数据库的增删改查等操作
Struts与SSH框架-样同样具有开源性,合理恰当的使用Struts技术可以在一定程度上减少基于MVC模型的Web应用系统的开发时间,从而有效控制系统开发成本。事实上,绝大多数程序员在使用Servlet和JSP的可
扩展的应用时已经将Struts框架技术作为系统开发的标准。
Struts技术基于MVC框架,Struts的实现依赖Servlet和JSP实现。EJB和JavaBean两个组件是Struts框架业务功能实现的基础部件;Action和ActionServlet部件是框架实现控制力能的重要部件;视图部分主要是交互界
面,主要由jsp和html界面构成。
Spring的核心功能则是控制反转(IOC)和面向切面编程(AOP)。使用Spring,意味着一个对象的创建再也不是自己new出来的,而是全权交给了IOC容器去实例化。与此同时,Spring通过采用依赖注入(DI)
的方式,通过属性的Setter和Getter方法或者构造方法来注入这个对象的属性,这样的好处就是不完全依赖于容器的API,且查询依赖与代码实现了解耦。而AOP,则是将应用的业务逻辑和系统级服务(例如事
务)分离开来,进行内聚性的开发,应用对象只负责完成业务逻辑而不关心日志或者事务的处理。
这里我们使用maven包管理工具来管理项目的jar包,在maven中添加如下代码
<dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.3.2.Final</version> </dependency> </dependencies>
由于只用到Hibernate原生的功能,所以只导入一个核心jar包足矣
maven下载的Hibernate包如下图所示
本次使用的数据库是mysql数据库
由于和数据库连接必须用到JDBC,所以我们要导入和数据库连接的工具包
在maven中添加如下代码
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency>
这里使用的是8.0.20版本的jar包
在项目的src目录下创建hibernate.cfg.xml文件
初步的文件配置如下
<?xml version=‘1.0‘ encoding=‘utf-8‘?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--方言配置--> <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property> <!--数据库配置--> <property name="connection.url">jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&useSSL=false&characterEncoding=utf8</property> <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="connection.username">root</property> <property name="connection.password">123</property> <!--显示数据库的操作语句--> <property name="show_sql">true</property> <property name="format_sql">true</property> </session-factory> </hibernate-configuration>
其中方言配置要和你的数据库连接工具包版本对上,如果用的是8.0版本就用mysql8的方言,5.0版本就用MySQL5Dialect
数据库配置这块,URL是连接数据库的地址,3306是mysql的默认端口,后面的mydb是数据库名,后面是配置的参数。如果是8.0版本,必须要设定时区,加上serverTimezone=UTC。编码集
的配置要和数据库表的配置相同。比如我的数据库是utf-8的编码集,就配置characterEncoding=utf8。
driver_class是数据库驱动配置,8.0版本是com.mysql.cj.jdbc.Driver,5.0版本是com.mysql.jdbc.Driver。username和password是配置连接数据库的账号密码。
show_sql设置为开,可以显示执行的hql语句。
在项目的根目录下创建bean包,本包下放置所有的实体类,实体类主要用于对数据库表内容的映射。
这里说一下怎么用idea自动创建实体类和对应的数据库映射配置文件。
点击右侧的Database
选择你的数据库种类,这里选择mysql
输入数据库名,用户名和密码后点击test connection测试连接
显示Successful说明成功,点击apply和确定进行连接
连接成功后是这样的
接下来生成实体类和映射配置文件
点击idea左下角的Persistence
右键,选择最后一个
选择导入的数据库,生成文件的位置,和需要生成的表,配置如图所示,点击确定。
自动生成完毕
关于映射配置文件的配置,其中一个映射文件配置如下
<?xml version=‘1.0‘ encoding=‘utf-8‘?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Pro456.bean.Customer" table="customer" schema="mydb"> <id name="id" column="Id"> <generator class="native"/> </id> <property name="idCard" column="IdCard"/> <property name="name" column="Name"/> <property name="phone" column="Phone"/> <property name="birthday" column="Birthday"/> </class> </hibernate-mapping>
name是类的具体位置和名称,table代表映射的表名,schema是连接数据库的名称,接下来就是实体类属性和数据库表字段的一一映射。id为表的主键,配置generator属性为native是为了插入数据时候按
数据库本身的配置的来,比如mysql里就会自动递增主键。
原文:https://www.cnblogs.com/TidalCoast1034/p/14806093.html