Struts1.2 Hibernate Spring框架组合(二)
搭建好SSH的组合环境,简单的开发一个东西,一个页面输入用户的编号和用户名,年龄来进行页面的跳转,还用查询所有的对象信息。
安装Hibernate的真正意义是不用手动建数据库表的,只需要创建好实体类就通过Hibernate提供的
1.在MySql数据库中先创建一个数据库
- create database ssha
2.在数据库ssha中创建一张表emps表
- create table emps
- (
- empId int auto_increment primary key,
- empName varchar(29) not null,
- empAge int not null
- )
3.数据库中插入数据
4.使用MyEclipse生成实体类
- package xiao.zhang.bean;
- /**
- * Emps entity.
- *
- * @author MyEclipse Persistence Tools
- */
- public class Emps implements java.io.Serializable {
- // Fields
- private Integer empId;
- private String empName;
- private Integer empAge;
- // Constructors
- /** default constructor */
- public Emps() {
- }
- /** minimal constructor */
- public Emps(String empName) {
- this.empName = empName;
- }
- /** full constructor */
- public Emps(String empName, Integer empAge) {
- this.empName = empName;
- this.empAge = empAge;
- }
- // Property accessors
- public Integer getEmpId() {
- return this.empId;
- }
- public void setEmpId(Integer empId) {
- this.empId = empId;
- }
- public String getEmpName() {
- return this.empName;
- }
- public void setEmpName(String empName) {
- this.empName = empName;
- }
- public Integer getEmpAge() {
- return this.empAge;
- }
- public void setEmpAge(Integer empAge) {
- this.empAge = empAge;
- }
- }
5.Emps.hbm.xml文件信息如下:
- <hibernate-mapping>
- <class name="xiao.zhang.bean.Emps" table="emps" catalog="ssha">
- <id name="empId" type="java.lang.Integer">
- <column name="empId" />
- <generator class="native" />
- </id>
- <property name="empName" type="java.lang.String">
- <column name="empName" length="20" not-null="true" />
- </property>
- <property name="empAge" type="java.lang.Integer">
- <column name="empAge" />
- </property>
- </class>
- </hibernate-mapping>
在Spring配种文件中配置实体类的映射文件,这一部分属于Hibernate和Spring的组合:
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- </props>
- </property>
- <!--*********************************************************-->
- <property name="mappingResources">
- <list>
- <value>xiao/zhang/bean/Emps.hbm.xml</value>
- </list>
- </property>
- <!--*********************************************************-->
- </bean>
*星号括起的部分信息。
6.生成Emps的DAO
- public class EmpsDAO extends HibernateDaoSupport implements ImpEmpsDao {
- private static final Log log = LogFactory.getLog(EmpsDAO.class);
- // property constants
- public static final String EMP_NAME = "empName";
- public static final String EMP_AGE = "empAge";
- protected void initDao() {
- // do nothing
- }
- public void save(Emps transientInstance) {
- log.debug("saving Emps instance");
- try {
- getHibernateTemplate().save(transientInstance);
- log.debug("save successful");
- } catch (RuntimeException re) {
- log.error("save failed", re);
- throw re;
- }
- }
- public void delete(Emps persistentInstance) {
- log.debug("deleting Emps instance");
- try {
- getHibernateTemplate().delete(persistentInstance);
- log.debug("delete successful");
- } catch (RuntimeException re) {
- log.error("delete failed", re);
- throw re;
- }
- }
- public Emps findById(java.lang.Integer id) {
- log.debug("getting Emps instance with id: " + id);
- try {
- Emps instance = (Emps) getHibernateTemplate().get(
- "xiao.zhang.bean.Emps", id);
- return instance;
- } catch (RuntimeException re) {
- log.error("get failed", re);
- throw re;
- }
- }
- public List findByExample(Emps instance) {
- log.debug("finding Emps instance by example");
- try {
- List results = getHibernateTemplate().findByExample(instance);
- log.debug("find by example successful, result size: "
- + results.size());
- return results;
- } catch (RuntimeException re) {
- log.error("find by example failed", re);
- throw re;
- }
- }
- public List findByProperty(String propertyName, Object value) {
- log.debug("finding Emps instance with property: " + propertyName
- + ", value: " + value);
- try {
- String queryString = "from Emps as model where model."
- + propertyName + "= ?";
- return getHibernateTemplate().find(queryString, value);
- } catch (RuntimeException re) {
- log.error("find by property name failed", re);
- throw re;
- }
- }
- public List findByEmpName(Object empName) {
- return findByProperty(EMP_NAME, empName);
- }
- public List findByEmpAge(Object empAge) {
- return findByProperty(EMP_AGE, empAge);
- }
- public List findAll() {
- log.debug("finding all Emps instances");
- try {
- String queryString = "from Emps";
- return getHibernateTemplate().find(queryString);
- } catch (RuntimeException re) {
- log.error("find all failed", re);
- throw re;
- }
- }
- public Emps merge(Emps detachedInstance) {
- log.debug("merging Emps instance");
- try {
- Emps result = (Emps) getHibernateTemplate().merge(detachedInstance);
- log.debug("merge successful");
- return result;
- } catch (RuntimeException re) {
- log.error("merge failed", re);
- throw re;
- }
- }
- public void attachDirty(Emps instance) {
- log.debug("attaching dirty Emps instance");
- try {
- getHibernateTemplate().saveOrUpdate(instance);
- log.debug("attach successful");
- } catch (RuntimeException re) {
- log.error("attach failed", re);
- throw re;
- }
- }
- public void attachClean(Emps instance) {
- log.debug("attaching clean Emps instance");
- try {
- getHibernateTemplate().lock(instance, LockMode.NONE);
- log.debug("attach successful");
- } catch (RuntimeException re) {
- log.error("attach failed", re);
- throw re;
- }
- }
- public static EmpsDAO getFromApplicationContext(ApplicationContext ctx) {
- return (EmpsDAO) ctx.getBean("EmpsDAO");
- }
- }
将数据访问对象交由Spring容器管理,在Spring的配置文件中配置该类的信息
- <!-- 数据库访问对象 -->
- <bean id="EmpsDAO" class="xiao.zhang.dao.imp.EmpsDAO">
- <property name="sessionFactory">
- <ref bean="sessionFactory" />
- </property>
- </bean>
7.为了实现面向接口编程,同时能够将业务逻辑部分与数据库访问部分的代码进行解耦合。下面是文件树图:
8.接下来应该是手工编程,这样利于代码的控制。
9.根据7中已经对业务和数据访问进行的了分离,下面是分离后的代码:
|
上面是数据访问的接口,这样就可以面向接口编程
10.下面是业务逻辑层的代码:
先定义业务处理的接口:
- /**
- *
- * 实现了业务逻辑的封装,将业务操作和数据操作分离
- *
- * @author aiilive
- *
- */
- public interface ImpEmpsService {
- public void addEmps(Emps transientInstance);
- public void deleteEmpsById(int empId);
- public List findAll();
- public Emps getEmpsById(int empId);
- }
实现业务逻辑:
- import java.util.List;
- import xiao.zhang.bean.Emps;
- import xiao.zhang.dao.ImpEmpsDao;
- import xiao.zhang.service.ImpEmpsService;
- public class EmpsServiceImp implements ImpEmpsService {
- private ImpEmpsDao empsDao;
- public void addEmps(Emps transientInstance) {
- empsDao.save(transientInstance);
- }
- public void deleteEmpsById(int empId) {
- Emps emps = empsDao.findById(empId);
- if (emps == null) {
- return;
- }
- empsDao.delete(emps);
- }
- public List findAll() {
- return empsDao.findAll();
- }
- public Emps getEmpsById(int empId) {
- return empsDao.findById(empId);
- }
- public ImpEmpsDao getEmpsDao() {
- return empsDao;
- }
- public void setEmpsDao(ImpEmpsDao empsDao) {
- this.empsDao = empsDao;
- }
- }
在实现业务逻辑中有数据访问对象的实例属性,在Spring的配置文件中应该配置,来实现交由Spring容器对业务逻辑处理类的对象的管理
- <!-- 业务处理对象 -->
- <bean id="EmpsService"
- class="xiao.zhang.service.imp.EmpsServiceImp">
- <property name="empsDao">
- <ref bean="EmpsDAO" />
- </property>
- </bean>
这样就将业务逻辑层和数据访问层分开,这一部分主要是Hibernate和Spring的组合使用。
Struts1.2 Hibernate Spring框架组合(二)相关推荐
- Java学习笔记-Day64 Spring 框架(二)
Java学习笔记-Day64 Spring 框架(二) 一.控制反转IOC和依赖注入DI 1.控制反转IOC 2.依赖注入DI 3.Spring IOC容器 3.1.简介 3.2.实现容器 3.2.获 ...
- 深入学习Spring框架(二)- 注解配置
1.为什么要学习Spring的注解配置? 基于注解配置的方式也已经逐渐代替xml.所以我们必须要掌握使用注解的方式配置Spring. 关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 ...
- Spring框架(二)Spring控制反转IoC详解
目录 一,什么是Spring IoC容器 二,IoC有哪些优点 三,控制反转(IoC)有什么作用 四,IoC和DI有什么区别⭐ 五,Spring IoC的实现机制⭐ 六,IoC支持哪些功能 七,Bea ...
- stust2 hibernate spring 框架复习(二)
上节主要讲了stust2的相关配置,本节将讨论代码实现的原理 第二节:Stust2 登录验证实例代码详解 首先,我们先理清文件结构: 从java resources开始从上到下,有用的文件为: src ...
- Pomer Flex J2EE (Flex+BlazeDS+Hibernate + spring )框架
1.为什么使用POMER Pomer是一 个开源的企业信息管理系统基础框架,它提供了一系列企业信息管理系统的基础功能,包括企业组织架构管理,角色权限管理,菜单管理,数据权限控制等功能. Pomer提供 ...
- spring 框架(二)
目录 一.Spring配置数据源 1.1 数据源(连接池)的作用 1.2数据源的使用 1.3基本实现 1.4.抽取配置文件,降低耦合性(druid) 1.4.1抽取jdbc.properties文件 ...
- schema类SpringMVC+Hibernate+Spring整合(二)
这段时间笔者几篇文章介绍了改schema类的文章. 关联文章的地址 这篇接着上篇,把没贴完的代码写完,上篇主要实现了一些公共配置和界面的东西,这篇把后台的代码实现. 首先是web包下属于的contro ...
- 大数据WEB阶段Spring框架(二)简化配置的操作
Spring简化配置的操作 零.复习 IOC控制反转, 之前是通过new创建对象 , IOC是由Spring容器创建对象 , 需要用时getBean获取 . 导入约束文件 获取对象两种方式 : 通过I ...
- Spring框架(二) ---- bean的歧义性
自动装配bean时,如果符合条件的bean超过一个,就会出现歧义性,抛出NoUniqueBeanDefinitionException异常,有如下两种方法保证bean的唯一性: 一.使用@Primar ...
最新文章
- 权限的继承,取消继承,强制继承
- java月份列表_java – 如何获取两个日期之间的月份和年份列表
- Redis介绍及部署在CentOS7上(一) 1
- pythontype(1+0xf*3.14)_numpy强制类型转换|图像线性增强|不同数据类型与图像的显示...
- mysql 多数据库实例_Mysql多实例安装
- img 标签 点击跳出图层_你竟然不知道cad图层也可以导出与导入?
- android引入开源库_为好目录引入开源:通过代码帮助公益组织
- tmux常用命令(分屏工具)
- MSCI发布最新ESG评级 三七互娱位居A股游戏行业最高
- Python编程及应用师资研修班--昆明
- python config模块_用Python内置模块处理ini配置文件
- linux内核循环,模仿Linux内核kfifo实现的循环缓存
- 21. jQuery 遍历 - 后代
- 安装VS2008(转)
- 锁定计算机和睡眠有什么区别,电脑的睡眠和休眠选项有什么区别?怎么唤醒休眠的电脑?...
- autocad2007二维图画法_CAD2007如何画平面图
- 洛谷 [P3110] 驮运
- VUE Cascader省市二级联动 二级联动数据
- Django-路由管理 path view
- 现如今99%的区块链都是空气项目
热门文章
- android系统打印功能实现,Android实现系统打印功能
- new Vue 发生了什么?
- git checkout切换到指定commit
- Vue多组件切换,并相互传值(在created和mounted生命周期钩子函数中渲染数据的区别)
- Android百度SDK定位
- php中%3c w() %3e,DedeCMS V5.7 SP2后台存在代码执行漏洞
- 20220307:力扣第283场周赛(上)
- 20211130:力扣第267周周赛(下)
- 20200715:动态规划复习day06
- 计算机组成安徽大学,2安徽大学《计算机组成与结构》B卷及答案.pdf