搭建好SSH的组合环境,简单的开发一个东西,一个页面输入用户的编号和用户名,年龄来进行页面的跳转,还用查询所有的对象信息。

安装Hibernate的真正意义是不用手动建数据库表的,只需要创建好实体类就通过Hibernate提供的

1.在MySql数据库中先创建一个数据库

  1. create database ssha

2.在数据库ssha中创建一张表emps表

  1. create table emps
  2. (
  3. empId int auto_increment primary key,
  4. empName varchar(29) not null,
  5. empAge int not null
  6. )

3.数据库中插入数据

4.使用MyEclipse生成实体类

  1. package xiao.zhang.bean;
  2. /**
  3. * Emps entity.
  4. *
  5. * @author MyEclipse Persistence Tools
  6. */
  7. public class Emps implements java.io.Serializable {
  8. // Fields
  9. private Integer empId;
  10. private String empName;
  11. private Integer empAge;
  12. // Constructors
  13. /** default constructor */
  14. public Emps() {
  15. }
  16. /** minimal constructor */
  17. public Emps(String empName) {
  18. this.empName = empName;
  19. }
  20. /** full constructor */
  21. public Emps(String empName, Integer empAge) {
  22. this.empName = empName;
  23. this.empAge = empAge;
  24. }
  25. // Property accessors
  26. public Integer getEmpId() {
  27. return this.empId;
  28. }
  29. public void setEmpId(Integer empId) {
  30. this.empId = empId;
  31. }
  32. public String getEmpName() {
  33. return this.empName;
  34. }
  35. public void setEmpName(String empName) {
  36. this.empName = empName;
  37. }
  38. public Integer getEmpAge() {
  39. return this.empAge;
  40. }
  41. public void setEmpAge(Integer empAge) {
  42. this.empAge = empAge;
  43. }
  44. }

5.Emps.hbm.xml文件信息如下:

  1. <hibernate-mapping>
  2. <class name="xiao.zhang.bean.Emps" table="emps" catalog="ssha">
  3. <id name="empId" type="java.lang.Integer">
  4. <column name="empId" />
  5. <generator class="native" />
  6. </id>
  7. <property name="empName" type="java.lang.String">
  8. <column name="empName" length="20" not-null="true" />
  9. </property>
  10. <property name="empAge" type="java.lang.Integer">
  11. <column name="empAge" />
  12. </property>
  13. </class>
  1. </hibernate-mapping>

在Spring配种文件中配置实体类的映射文件,这一部分属于Hibernate和Spring的组合:

  1. <bean id="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <property name="dataSource">
  4. <ref bean="dataSource" />
  5. </property>
  6. <property name="hibernateProperties">
  7. <props>
  8. <prop key="hibernate.dialect">
  9. org.hibernate.dialect.MySQLDialect
  10. </prop>
  11. </props>
  12. </property>
  13. <!--*********************************************************-->
  14. <property name="mappingResources">
  15. <list>
  16. <value>xiao/zhang/bean/Emps.hbm.xml</value>
  17. </list>
  18. </property>
  19. <!--*********************************************************-->
  20. </bean>

*星号括起的部分信息。

6.生成Emps的DAO

  1. public class EmpsDAO extends HibernateDaoSupport implements ImpEmpsDao {
  2. private static final Log log = LogFactory.getLog(EmpsDAO.class);
  3. // property constants
  4. public static final String EMP_NAME = "empName";
  5. public static final String EMP_AGE = "empAge";
  6. protected void initDao() {
  7. // do nothing
  8. }
  9. public void save(Emps transientInstance) {
  10. log.debug("saving Emps instance");
  11. try {
  12. getHibernateTemplate().save(transientInstance);
  13. log.debug("save successful");
  14. } catch (RuntimeException re) {
  15. log.error("save failed", re);
  16. throw re;
  17. }
  18. }
  19. public void delete(Emps persistentInstance) {
  20. log.debug("deleting Emps instance");
  21. try {
  22. getHibernateTemplate().delete(persistentInstance);
  23. log.debug("delete successful");
  24. } catch (RuntimeException re) {
  25. log.error("delete failed", re);
  26. throw re;
  27. }
  28. }
  29. public Emps findById(java.lang.Integer id) {
  30. log.debug("getting Emps instance with id: " + id);
  31. try {
  32. Emps instance = (Emps) getHibernateTemplate().get(
  33. "xiao.zhang.bean.Emps", id);
  34. return instance;
  35. } catch (RuntimeException re) {
  36. log.error("get failed", re);
  37. throw re;
  38. }
  39. }
  40. public List findByExample(Emps instance) {
  41. log.debug("finding Emps instance by example");
  42. try {
  43. List results = getHibernateTemplate().findByExample(instance);
  44. log.debug("find by example successful, result size: "
  45. + results.size());
  46. return results;
  47. } catch (RuntimeException re) {
  48. log.error("find by example failed", re);
  49. throw re;
  50. }
  51. }
  52. public List findByProperty(String propertyName, Object value) {
  53. log.debug("finding Emps instance with property: " + propertyName
  54. + ", value: " + value);
  55. try {
  56. String queryString = "from Emps as model where model."
  57. + propertyName + "= ?";
  58. return getHibernateTemplate().find(queryString, value);
  59. } catch (RuntimeException re) {
  60. log.error("find by property name failed", re);
  61. throw re;
  62. }
  63. }
  64. public List findByEmpName(Object empName) {
  65. return findByProperty(EMP_NAME, empName);
  66. }
  67. public List findByEmpAge(Object empAge) {
  68. return findByProperty(EMP_AGE, empAge);
  69. }
  70. public List findAll() {
  71. log.debug("finding all Emps instances");
  72. try {
  73. String queryString = "from Emps";
  74. return getHibernateTemplate().find(queryString);
  75. } catch (RuntimeException re) {
  76. log.error("find all failed", re);
  77. throw re;
  78. }
  79. }
  80. public Emps merge(Emps detachedInstance) {
  81. log.debug("merging Emps instance");
  82. try {
  83. Emps result = (Emps) getHibernateTemplate().merge(detachedInstance);
  84. log.debug("merge successful");
  85. return result;
  86. } catch (RuntimeException re) {
  87. log.error("merge failed", re);
  88. throw re;
  89. }
  90. }
  91. public void attachDirty(Emps instance) {
  92. log.debug("attaching dirty Emps instance");
  93. try {
  94. getHibernateTemplate().saveOrUpdate(instance);
  95. log.debug("attach successful");
  96. } catch (RuntimeException re) {
  97. log.error("attach failed", re);
  98. throw re;
  99. }
  100. }
  101. public void attachClean(Emps instance) {
  102. log.debug("attaching clean Emps instance");
  103. try {
  104. getHibernateTemplate().lock(instance, LockMode.NONE);
  105. log.debug("attach successful");
  106. } catch (RuntimeException re) {
  107. log.error("attach failed", re);
  108. throw re;
  109. }
  110. }
  111. public static EmpsDAO getFromApplicationContext(ApplicationContext ctx) {
  112. return (EmpsDAO) ctx.getBean("EmpsDAO");
  113. }
  114. }

将数据访问对象交由Spring容器管理,在Spring的配置文件中配置该类的信息

  1. <!-- 数据库访问对象 -->
  2. <bean id="EmpsDAO" class="xiao.zhang.dao.imp.EmpsDAO">
  3. <property name="sessionFactory">
  4. <ref bean="sessionFactory" />
  5. </property>
  6. </bean>

7.为了实现面向接口编程,同时能够将业务逻辑部分与数据库访问部分的代码进行解耦合。下面是文件树图:

8.接下来应该是手工编程,这样利于代码的控制。

9.根据7中已经对业务和数据访问进行的了分离,下面是分离后的代码:

  1. public interface ImpEmpsDao {
  2. public void save(Emps transientInstance);
  3. public void delete(Emps persistentInstance);
  4. public Emps findById(java.lang.Integer id);
  5. public List findByExample(Emps instance);
  6. public List findByProperty(String propertyName, Object value);
  7. public List findByEmpName(Object empName);
  8. public List findByEmpAge(Object empAge);
  9. public List findAll();
  10. public Emps merge(Emps detachedInstance);
  11. public void attachDirty(Emps instance);
  12. public void attachClean(Emps instance);
  13. }

上面是数据访问的接口,这样就可以面向接口编程

10.下面是业务逻辑层的代码:

先定义业务处理的接口:

  1. /**
  2. *
  3. * 实现了业务逻辑的封装,将业务操作和数据操作分离
  4. *
  5. * @author aiilive
  6. *
  7. */
  8. public interface ImpEmpsService {
  9. public void addEmps(Emps transientInstance);
  10. public void deleteEmpsById(int empId);
  11. public List findAll();
  12. public Emps getEmpsById(int empId);
  13. }

实现业务逻辑:

  1. import java.util.List;
  2. import xiao.zhang.bean.Emps;
  3. import xiao.zhang.dao.ImpEmpsDao;
  4. import xiao.zhang.service.ImpEmpsService;
  5. public class EmpsServiceImp implements ImpEmpsService {
  6. private ImpEmpsDao empsDao;
  7. public void addEmps(Emps transientInstance) {
  8. empsDao.save(transientInstance);
  9. }
  10. public void deleteEmpsById(int empId) {
  11. Emps emps = empsDao.findById(empId);
  12. if (emps == null) {
  13. return;
  14. }
  15. empsDao.delete(emps);
  16. }
  17. public List findAll() {
  18. return empsDao.findAll();
  19. }
  20. public Emps getEmpsById(int empId) {
  21. return empsDao.findById(empId);
  22. }
  23. public ImpEmpsDao getEmpsDao() {
  24. return empsDao;
  25. }
  26. public void setEmpsDao(ImpEmpsDao empsDao) {
  27. this.empsDao = empsDao;
  28. }
  29. }

在实现业务逻辑中有数据访问对象的实例属性,在Spring的配置文件中应该配置,来实现交由Spring容器对业务逻辑处理类的对象的管理

  1. <!-- 业务处理对象 -->
  2. <bean id="EmpsService"
  3. class="xiao.zhang.service.imp.EmpsServiceImp">
  4. <property name="empsDao">
  5. <ref bean="EmpsDAO" />
  6. </property>
  7. </bean>

这样就将业务逻辑层和数据访问层分开,这一部分主要是Hibernate和Spring的组合使用。

Struts1.2 Hibernate Spring框架组合(二)相关推荐

  1. Java学习笔记-Day64 Spring 框架(二)

    Java学习笔记-Day64 Spring 框架(二) 一.控制反转IOC和依赖注入DI 1.控制反转IOC 2.依赖注入DI 3.Spring IOC容器 3.1.简介 3.2.实现容器 3.2.获 ...

  2. 深入学习Spring框架(二)- 注解配置

    1.为什么要学习Spring的注解配置? 基于注解配置的方式也已经逐渐代替xml.所以我们必须要掌握使用注解的方式配置Spring. 关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 ...

  3. Spring框架(二)Spring控制反转IoC详解

    目录 一,什么是Spring IoC容器 二,IoC有哪些优点 三,控制反转(IoC)有什么作用 四,IoC和DI有什么区别⭐ 五,Spring IoC的实现机制⭐ 六,IoC支持哪些功能 七,Bea ...

  4. stust2 hibernate spring 框架复习(二)

    上节主要讲了stust2的相关配置,本节将讨论代码实现的原理 第二节:Stust2 登录验证实例代码详解 首先,我们先理清文件结构: 从java resources开始从上到下,有用的文件为: src ...

  5. Pomer Flex J2EE (Flex+BlazeDS+Hibernate + spring )框架

    1.为什么使用POMER Pomer是一 个开源的企业信息管理系统基础框架,它提供了一系列企业信息管理系统的基础功能,包括企业组织架构管理,角色权限管理,菜单管理,数据权限控制等功能. Pomer提供 ...

  6. spring 框架(二)

    目录 一.Spring配置数据源 1.1 数据源(连接池)的作用 1.2数据源的使用 1.3基本实现 1.4.抽取配置文件,降低耦合性(druid) 1.4.1抽取jdbc.properties文件 ...

  7. schema类SpringMVC+Hibernate+Spring整合(二)

    这段时间笔者几篇文章介绍了改schema类的文章. 关联文章的地址 这篇接着上篇,把没贴完的代码写完,上篇主要实现了一些公共配置和界面的东西,这篇把后台的代码实现. 首先是web包下属于的contro ...

  8. 大数据WEB阶段Spring框架(二)简化配置的操作

    Spring简化配置的操作 零.复习 IOC控制反转, 之前是通过new创建对象 , IOC是由Spring容器创建对象 , 需要用时getBean获取 . 导入约束文件 获取对象两种方式 : 通过I ...

  9. Spring框架(二) ---- bean的歧义性

    自动装配bean时,如果符合条件的bean超过一个,就会出现歧义性,抛出NoUniqueBeanDefinitionException异常,有如下两种方法保证bean的唯一性: 一.使用@Primar ...

最新文章

  1. 权限的继承,取消继承,强制继承
  2. java月份列表_java – 如何获取两个日期之间的月份和年份列表
  3. Redis介绍及部署在CentOS7上(一) 1
  4. pythontype(1+0xf*3.14)_numpy强制类型转换|图像线性增强|不同数据类型与图像的显示...
  5. mysql 多数据库实例_Mysql多实例安装
  6. img 标签 点击跳出图层_你竟然不知道cad图层也可以导出与导入?
  7. android引入开源库_为好目录引入开源:通过代码帮助公益组织
  8. tmux常用命令(分屏工具)
  9. MSCI发布最新ESG评级 三七互娱位居A股游戏行业最高
  10. Python编程及应用师资研修班--昆明
  11. python config模块_用Python内置模块处理ini配置文件
  12. linux内核循环,模仿Linux内核kfifo实现的循环缓存
  13. 21. jQuery 遍历 - 后代
  14. 安装VS2008(转)
  15. 锁定计算机和睡眠有什么区别,电脑的睡眠和休眠选项有什么区别?怎么唤醒休眠的电脑?...
  16. autocad2007二维图画法_CAD2007如何画平面图
  17. 洛谷 [P3110] 驮运
  18. VUE Cascader省市二级联动 二级联动数据
  19. Django-路由管理 path view
  20. 现如今99%的区块链都是空气项目

热门文章

  1. android系统打印功能实现,Android实现系统打印功能
  2. new Vue 发生了什么?
  3. git checkout切换到指定commit
  4. Vue多组件切换,并相互传值(在created和mounted生命周期钩子函数中渲染数据的区别)
  5. Android百度SDK定位
  6. php中%3c w() %3e,DedeCMS V5.7 SP2后台存在代码执行漏洞
  7. 20220307:力扣第283场周赛(上)
  8. 20211130:力扣第267周周赛(下)
  9. 20200715:动态规划复习day06
  10. 计算机组成安徽大学,2安徽大学《计算机组成与结构》B卷及答案.pdf