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 ...
最新文章
- 浅谈CSS重构样式表性能
- 为什么要引入模式概念来设计软件
- 把一张的数据添加到另一张中
- python求扇形面积_Python随机生成均匀分布在单位圆内的点代码示例
- php并发访问mysql_php并发对MYSQL造成压力的解决方法_PHP
- Complete Tripartite CodeForces - 1228D(三分图染色)
- python收集数据程序_用一行Python代码进行数据收集探索!Python真牛逼!
- 《学习之道》第十三章练习大脑,改变思维
- jquery学习记录
- 在Java中VO , PO , BO , QO, DAO ,POJO是什么意思
- 如何给MindSpore添加一个新的硬件后端?快速构建测试环境!
- 【CNN】很细的讲解什么以及为什么是卷积(Convolution)!
- 电商金额计算的 4 个坑,千万注意了!
- innodb引擎的三大特性,插入缓冲(change buffer),两次写(doule write),自适应哈希索引(AHI)
- 泰坦尼克号数据挖掘项目实战——Task1 数据分析
- 弘辽科技:淘宝直通车推广无展现?该从何入手?
- ToDoList 案例完整 尚硅谷
- [洛谷 P3788] 幽幽子吃西瓜
- 抢先体验TPS轻松过万的SDAG区块链(一)
- Python爬虫:scrapy辅助功能实用函数
热门文章
- windows python安装包_Python-3.9安装包(windows版)
- mysql可以登陆sqlyog1862_MySQL错误号码1862:your password has expired
- Java头文件找出循环依赖_Node.js 如何找出循环依赖的文件?如何解决循环依赖问题?...
- mysql5.7 no password_MySQL5.7.20报错Access denied for user 'root'@'localhost' (using password: NO)
- java 日期时间工具_Java日期时间类工具
- python绘制音频频谱_Python 读取wav画频谱
- 程序员遇到问题的解决之道
- 20200127:(leetcode)四数之和(动态图解)
- 用matlab读取raw并做出图像,image - 如何在MATLAB中读取RAW图像? - 堆栈内存溢出
- es5中数组方法unshift、splice、reduce使用