文档章节

First Demo(Section one)

lzhnice
 lzhnice
发布于 2016/09/14 16:44
字数 1013
阅读 73
收藏 0

        花了几天时间做完了一个Demo,做的时候碰到了很多问题,问题解决了但没有及时总结,现在准备总结一下,把整个思路理清一下,方便以后处理类似的问题。因为第一次做一个像样的Demo,因此内容并不多,主要还是数据库的“CRUD”操作,此外增加了一些小功能的实现。下面是对这个Demo的简单介绍:
        这是一个员工信息管理系统的Demo,实现了对员工信息的增删改查操作,并增加了用户登录功能。后台使用的是SSH框架,服务器为Tomcat服务器,数据库为MySQL,前端使用的技术主要是JQuery、Ajax、JSON。本次总结的主题是Demo流程和其中遇到的问题及其解决方法,内容如下:
        首先是Struts-Spring-Hibernate整合开发环境的搭建, 这里遇到的第一个问题是版本的匹配问题,由于Hibernate使用的是5之后的版本,因此Sprin需要4之后的版本,但本Demo用的还是Struts1的技术,这里要同时导入一个Spring3才有的spring-struts包,放在WEB-INF的lib目录下,同时在lib目录下还要导入struts的核心包,如果使用struts标签库还要有taglib包。
        整合先从Spring-Hibernate开始,导入所需jar包之后,开始创建所需表格、实体类、以及映射文件。Demo中需要用到的表格有:存放员工信息的表格、存放jsp页面元素内容(如教育程度、爱好、职位等内容)的表格、存放登录信息(用户id、密码)的表格。创建完表格后需要创建每个表对应的实体类和映射文件。
                                                                        
        其中,user和logIn之间为一对一单向主键关联,由logIn维护关联关系。在配置logIn映射文件的时候,有些资料认为级联属性”cascade”在一对一关联中不需要配置,但在这次的Demo中,不配置无法实现级联,因此这里设置为”all”。

<one-to-one name="user" constrained="true" cascade="all"><one-to-one>


        接下来是配置hibnernate属性文件hibernate.cfg.xml,该文件可有可无,hibernate的属性(dialect、show_sql等)可以在applicationContext.xml中配置,但为了减少后者的内容,还是将这些内容拿出来放入单独的文件中。这里配置了一个特别的属性:

<property name="hibernate.temp.use_jdbc_metadata_defaults">false<property>


        目的是为了解决异常:Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException。
        接着配置spring的IOC容器,实现对hibernate的管理。首先配置数据源,这里采用的是c3p0数据源,因此要导入相应的包。这里有一个” destroy-method”属性,配置它的目的是保证线程能正常关闭。

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close>
        <property name="jdbcUrl" value="${jdbcUrl}"></property>
        <property name="driverClass" value="${driverClass}"></property>
        <property name="user" value="${user}"></property>
        <property name="password" value="${password}"></property>
        <property name="initialPoolSize" value="3"></property>
        <property name="minPoolSize" value="3"></property>
        <property name="maxPoolSize" value="10"></property>
        <property name="acquireIncrement" value="3"></property>
<bean>


        dataSource的属性通过分散配置添入,要引入属性文件:

<context:property-placeholder location="classpath:jdbc.properties"/>


        创建本地会话工厂bean,它是spring整合hibernate资源的核心入口:

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" >
        <!-- 依赖于数据源 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- hibernate属性信息 -->
        <property name="configLocation" value="WEB-INF/hibernate.cfg.xml"></property>
        <!-- 映射文件集,一个一个映射太麻烦
            <property name="mappingResources">
                <list>
                    <value>classpath:lzh/entity/LogIn.hbm.xml</value>
                </list>
            </property>
         -->
        <!-- 映射目录位置集 -->
        <property name="mappingDirectoryLocations">
            <list>
                <value>classpath:lzh/entity</value>
            </list>
        </property>
</bean>


        然后配置事务管理器,如果没有此项配置,则hibernate session的flushMode为默认值manual,会将所有的事务设置为readonly,无法进行增、删、改操作。

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <!-- 配置事务代理工厂bean -->
    <bean id="service" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="proxyInterfaces" value="lzh.service.Service"></property>
        <property name="transactionManager" ref="transactionManager"></property>
        <property name="target" ref="serviceImpl"></property>
        <!-- 配置事务属性 -->
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
</bean>


        spring-hibernate环境配置完成,接下来进行struts-spring整合。

© 著作权归作者所有

下一篇: 多线程
lzhnice
粉丝 0
博文 18
码字总数 22301
作品 0
广州
私信 提问
如何实现可收展的UITableView Section

iOS Collapsible Table Section A simple iOS swift project demonstrates how to implement collapsible table section. Demo 源码:https://github.com/jeantimex/ios-swift-collapsible-......

jeantimex
2016/05/31
313
0
Python ConfigParser

ConfigParser 在深度学习中,我打算用这个类来处理参数文件,xx.ini或者xx.cfg。 一、基本操作 1、基本的读取配置文件 read(filename) - 直接读取ini,cfg文件内容 sections() - 得到所有的s...

habits
2018/03/23
0
0
2015 年 15 个超棒的免费 Joomla 模板

Joomla 是个内容管理系统,与 Drupal 有点类似,并且每天都在进步。Drupal 适合社区网站和博客,Joomla 则倾向于电子商务(阅读更多有关两者的区别)。 本文向你推荐 15 个免费的 Joomla 模板...

oschina
2015/05/21
36.4K
7
libdvbpsi源码分析(三)PSI decocder详细分析

由上一篇libdvbpsi源码分析(二)main函数,简单分析了demo程序中main函数的执行流程。现在将对具体的PSI表作详细解析。主要是对main函数中的libdvbpsiinit和dvbpsinew以及相关的dvbpsipat_att...

地狱的烈火
2013/11/12
0
0
如何收起和展开UITableView Sections

这是一个简单的iOS swift项目,旨在介绍如何实现可收起和展开的table section,并且,项目不需要main storyboard, XIB, 注册nib等,只需要纯的Swfit代码! 项目源代码:https://github.com/...

jeantimex
2016/10/03
631
0

没有更多内容

加载失败,请刷新页面

加载更多

基于redis分布式锁实现“秒杀”

最近在项目中遇到了类似“秒杀”的业务场景,在本篇博客中,我将用一个非常简单的demo,阐述实现所谓“秒杀”的基本思路。 业务场景 所谓秒杀,从业务角度看,是短时间内多个用户“争抢”资源...

别打我会飞
30分钟前
8
0
Zookeeper的实践指南

本章重点 1.数据存储2.基于Java API初探Zookeeper的使用3.深入分析Watcher机制的实现原理4.Curator客户端的使用,简单高效 数据存储 事务日志快照日志运行时日志 bin/zookeepe...

须臾之余
33分钟前
1
0
MySQL mybatis Point类型数据

MySQL中的point用于表示GIS中的地理坐标,在GIS中广泛使用 如何写入mysql,如下图: CREATE TABLE `test-point` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序号', `point` ......

张欢19933
45分钟前
2
0
设计模式-适配器模式

适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入...

HOT_POT
今天
17
0
Qt编写自定义控件7-自定义可拖动多边形

前言 自定义可拖动多边形控件,原创作者是赵彦博(QQ:408815041 zyb920@hotmail.com),创作之初主要是为了能够在视频区域内用户自定义可拖动的多个区域,即可用来作为警戒区域,也可用来其他的...

飞扬青云
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部