《Java EE编程技术》综合应用系统开发 |
您所在的位置:网站首页 › 作业管理系统设计 › 《Java EE编程技术》综合应用系统开发 |
《Java EE编程技术》综合应用系统开发_作业管理系统_Struts2_Hibernate_设计报告
目录 一、连接数据源: 1 二、hibernate的引入与整合: 4 1. 首先导入必须的jar包: 4 2. 在module中引入hibernate tools工具: 5 3. 接下来即可自动生成配置hibernate.cfg.xml。 5 4. 目录结构: 6 ①hibernate.cfg.xml: 7 ②StudentEntity: 9 ③映射文件StudentEntity.hbm.xml: 11 5. 在项目中采用hibernate方式操作后部分结构变化如下(整合): 13
(这里下面的文档结构由于格式原因,序号标题等产生了一些问题,请见谅) 对于struts2相关内容及项目的设计实现流程请参见《Java EE编程技术》综合应用系统开发_作业管理系统_Struts2_设计报告,这里不再赘述,本文主要讲解hibernate的配置和使用以及struts2+hibernate整合思路。 一、连接数据源:为方便使用我们先连接数据源(即使用IDE方式直接与数据库进行连接,以便于我们更加直观的使用数据库): 选择MySQL输入相应的用户名、密码、URL (jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai)等配置信息即可。 1. 首先导入必须的jar包:
此时选择自动生成实体和对应的配置文件: 目录结构: 对应的实体类和配置文件已经生成完毕。 (根据软件工程思想,这属于逆向工程)(由于数据库我们已经建立完毕,因此这里采用的是逆向的,如果我们一开始确立的对象是java对象,我们也可以利用hibernate生成对应的数据库表文件,则称为正向): 正向工程:Java实体类 ---->mapping---- > DB数据库关系表。 逆向工程:先创建DB数据库关系表,用工具生成生成mapping 和Java实体类。 此时配置文件中内容如下(部分): ①hibernate.cfg.xml: 注意自动生成后的配置文件还需要添加一些属性: 例如:
true
true
update ...... com.mysql.cj.jdbc.Driver true true update 2 true 10 5 2 2000 2000 1000 1000②StudentEntity: package entity_hibernate; import javax.persistence.*; import java.util.Objects; @Entity @Table(name = "student", schema = "homework", catalog = "") public class StudentEntity { private int sId; private String sPassword; private String sName; private String sCollege; private String sDepartment; private Integer sClass; private String sSex; private String sEmail; @Id @Column(name = "s_id", nullable = false) public int getsId() { return sId; } public void setsId(int sId) { this.sId = sId; } @Basic @Column(name = "s_password", nullable = true, length = 20) public String getsPassword() { return sPassword; } public void setsPassword(String sPassword) { this.sPassword = sPassword; } @Basic @Column(name = "s_name", nullable = true, length = 20) public String getsName() { return sName; } public void setsName(String sName) { this.sName = sName; } @Basic @Column(name = "s_college", nullable = true, length = 30) public String getsCollege() { return sCollege; } public void setsCollege(String sCollege) { this.sCollege = sCollege; } @Basic @Column(name = "s_department", nullable = true, length = 30) public String getsDepartment() { return sDepartment; } public void setsDepartment(String sDepartment) { this.sDepartment = sDepartment; } @Basic @Column(name = "s_class", nullable = true) public Integer getsClass() { return sClass; } public void setsClass(Integer sClass) { this.sClass = sClass; } @Basic @Column(name = "s_sex", nullable = true, length = 10) public String getsSex() { return sSex; } public void setsSex(String sSex) { this.sSex = sSex; } @Basic @Column(name = "s_email", nullable = true, length = 30) public String getsEmail() { return sEmail; } public void setsEmail(String sEmail) { this.sEmail = sEmail; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; StudentEntity that = (StudentEntity) o; return sId == that.sId && Objects.equals(sPassword, that.sPassword) && Objects.equals(sName, that.sName) && Objects.equals(sCollege, that.sCollege) && Objects.equals(sDepartment, that.sDepartment) && Objects.equals(sClass, that.sClass) && Objects.equals(sSex, that.sSex) && Objects.equals(sEmail, that.sEmail); } @Override public int hashCode() { return Objects.hash(sId, sPassword, sName, sCollege, sDepartment, sClass, sSex, sEmail); } }③映射文件StudentEntity.hbm.xml: 对于上述配置完毕后,我们只需修改dao层的一些方法即可,对于简单的SQL语句我们可以直接采用native方式进行,无需修改。 在项目中采用hibernate方式操作后部分结构变化如下(整合):这里为了降低耦合度,dao层采用接口方式,分别利用JDBC或者c3p0进行实现,这里引入hibernate后又有了不同的实现方式,但是由于接口的透明性,我们隐藏了对上层服务的实现细节,因此如果整合hibernate只需增加更改hibernate实现即可。
需要注意的内容HibernateUtil: package db_util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; public final class HibernateUtil { private static SessionFactory sessionFactory; private static ThreadLocal session = new ThreadLocal(); private HibernateUtil() { } static { // 第一步:读取Hibernate的配置文件 hibernamte.cfg.xml文件 Configuration configuration = new Configuration().configure(); // 第二步:创建服务注册构建器对象,通过配置对象中加载所有的配置信息 StandardServiceRegistryBuilder regbulider = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()); // 创建注册服务 ServiceRegistry serviceRegistry = regbulider.build(); // 第三步:创建会话工厂 sessionFactory = configuration.buildSessionFactory(serviceRegistry); } public static Session getThreadLocalSession() { Session s = (Session) session.get(); if (s == null) { s = sessionFactory.openSession(); session.set(s); } return s; } public static void closeSession() { Session s = (Session) session.get(); if (s != null) { s.close(); session.set(null); } } }本项目无需采用Hibernate的高级特性,也无需使用HQL语言进行数据库操作,但是使用hibernate可以大大简化实现过程。 hibernate为我们提供了大量接口,除上述接口外还有如Transaction接口: commit():提交事务,transaction.commit()。 rollback():撤销事务操作,transaction.rollback()。 wasCommitted():检查事务是否提交,transaction.wasCommitted()。
Query接口等等: 使用Query接口提供的方法,可以方便地查询数据库中的数据,它主要通过HQL(Hibernate Query Language)查询数据。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |