您的位置:首页 > 其它

基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框架

2017-07-06 17:31 477 查看

基于Annotation注解整合SSH框架和基于XML文件配置Bean整合SSH框

1.新建一个动态web工程添加jar包



2.在com.digital.entity包下创建实体类UserInfo与数据中digital数据表user_Info对应 创建映射UserInfo.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.digital.entity">
<class name="UserInfo" table="user_info" catalog="digital">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="userName" type="java.lang.String">
<column name="userName" length="16" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="16" not-null="true" />
</property>
</class>
</hibernate-mapping>


使用Annotation完成UserInfo实体类与数据表的映射关系

@Entity
@Table(name = "user_info", catalog = "digital")
public class UserInfo {


对类中的属性进行映射 -主键属性

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public int getId() {


对非主属性

@Column(name = "userName", length = 16)
public String getUserName() {
return userName;


使用注解类后,就不在需要UserInfo.hbx.xml映射文件删除

—————————————————————————————————————————————————————————

3.Spring整合hibernate

目的

-由Spring的IOC容器来管理Hibernate的SessionFactory

让Hibernate使用Spring的声明式事务

实现:

在src文件下创建Spring配置文件applicationContextxml

基于xml配置数据源dataSource

配置hibernate的sessionFactory实例

声明hibernate事务管理器、定义事务通知、定义切面、将事务通知和切面组合起来

—————————————————————————————————————————————————————————

4.配置applicationContext.xml文件

先加入头部声明文件、命名空间



并且将各个命名空间关联到项目里

加入c3p0数据源(实例化数据源)

<!-- 配置数据源 -->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
4000
<property name="jdbcUrl" value="jdbc:mysql:///digital" />
<property name="user" value="root" />
<property name="password" value="123456" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="10" />
</bean>


配置Hibernate的SessionFactory(引用ref bean注入数据源dataSource、设置Hibernate基本属性,配置方言mysql,实例化SessionFactory)

在jar文件中寻找class的类文件



定义SessionFactory 的id Bean从jar包内引用类orm.hibernate5.LocalSessionFactoryBean配置hibernate的SessionFactory实例

applicationcontext文件中为SessionFactory中name=“dataSource”属性注入数据源、

为SeesionFactory中基本属性name=“hibernateProperties”配置Hibernate基本属性方言

<!-- 配置Hibernate的sessionFactory实例 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 配置数据源属性 -->
<property name="dataSource">
<ref bean="dataSource" />
</property>
<!-- 配置 Hibernate的基本属性-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>


配置Hibernate的映射文件的位置名称(引用注入UserInfo.hbx.xml)

<!-- 配置 Hibernate映射文件的位置及名称-->
<property name="mappingResources">
<list>
<value>com/digital/entity/UserInfo.hbm.xml</value>
</list>
</property>
</bean>


定义Hibernate事务管理器Bean(为TransactionManager事务管理器属性name=“SessionFactory”引用ref= SessionFactory实例,注入事务管理器中)

<!-- 声明Hibernate事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>


声明式事务管理也有两种常用的方式

基于tx和aop名字空间的xml配置文件

基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。

基于annotation的配置(后面在applicacontext文件中添加的内容都删除)

开启注释处理器

<!-- 开启注解处理器 -->
<context:annotation-config />


基于@Transactional注解方式的事务管理

<!-- 开启Spring的Bean自动扫描机制来检查与管理Bean实例 -->
<context:component-scan base-package="com.digital" />


开启自动扫描机制检查与管理Bean实例

<tx:annotation-driven transaction-manager="transactionManager" />


简单的介绍事务的规则(传播行为)

常用required

Required

Support

Never

事务的管理主要任务:创建回滚提交事务 是否需要创建事务及如何创建事务有事务的传播行为控制

—————————————————————————————————————————————————————————

基于tx和aop名字空间的xml配置文件

定义数据通知,事务管理(将事务通知交给事务管理器处理,指定事务传播规则)

<!--  定义事务通知 ,需要事务管理器  -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 指定事务传播规则 -->
<tx:attributes>
<!-- 对所有方法应用REQUIRED事务规则 -->
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>


定义切面,并将事务通知和切面组合(定义那些方法应用那些规则)

<!--定义切面,并将事务通知和切面组合(定义哪些方法应用事务规则) -->
<aop:config>
<!-- 对com.digital.service包下的所有类的所有方法都应用事务规则 -->
<aop:pointcut id="serviceMethods" expression="execution(* com.digital.service.*.*(..))" />
<!--  将事务通知和切面组合   -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>


—————————————————————————————————————————————————————————

5.DAO层的开发

public interface UserInfoDAO {
public List<UserInfo> search(UserInfo cond);

}


调用注入的Session,进行增删改查数据库操作

public class UserInfoDAOImpl implements UserInfoDAO {

SessionFactory sessionFactory;

public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}


定义UserInfoDAOImpl类的Bean并且类中的属性name=sessionFactory 注入实例ref=SessionFactory

<!-- 定义com.digital.dao.impl.UserInfoDAOImpl类-->
<bean id="userInfoDAO" class="com.digital.dao.impl.UserInfoDAOImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>


使用注解@Repository(”userInfoDAO”)在Spring容器中注册一个userInfoDAO实例

@Repository("userInfoDAO")
public class UserInfoDAOImpl implements UserInfoDAO {


使用注解@Autowired完成SessionFactory属性的注入

// 通过@Autowired注解注入Spring容器中的SessionFactory实例
@Autowired
SessionFactory sessionFactory;


—————————————————————————————————————————————————————————

6.Service层的开发

UserInfoService类

public interface UserInfoService {
public List<UserInfo> login(UserInfo cond);
}


在UserInfoServiceImpl中userInfoDAO属性对象注入UserInfoDAO对象实例

public class UserInfoServiceImpl implements UserInfoService {

UserInfoDAO userInfoDAO;
public void setUserInfoDAO(UserInfoDAO userInfoDAO) {
this.userInfoDAO = userInfoDAO;
}


定义Bean为在UserInfoServiceImpl类中的属性name=”userInfoDAO“注入ref=“userInfoDAO”实例

<!-- 定义UserInfoServiceImpl类,并为其userInfoDAO属性注入值-->
<bean id="userInfoService" class="com.digital.service.impl.UserInfoServiceImpl">
<property name="userInfoDAO" ref="userInfoDAO" />
</bean>


使用@Service注解:在Service服务层实例化UserInfoServiceImpl类放入Spring容器中

@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService {


使用@Transactional实现事务管理(通过注解@Transactional的不同参数满足事务的不用事务要求)

//使用@Transactional注解实现事务管理
@Transactional
//使用@Service注解在Spring容器中注册名为userInfoService的UserInfoServiceImpl实例
@Service("userInfoService") public class UserInfoServiceImpl implements UserInfoService {


使用@Autowired实现userInfoDAO的实例注入

//使用@Transactional注解实现事务管理
@Transactional
//使用@Service注解在Spring容器中注册名为userInfoService的UserInfoServiceImpl实例
@Service("userInfoService") public class UserInfoServiceImpl implements UserInfoService {
//使用@Autowired注解注入UserInfoDAOImpl实例
@Autowired
UserInfoDAO userInfoDAO;


—————————————————————————————————————————————————————————

7.Action层的开发

public class UserInfoAction extends ActionSupport {

UserInfo ui;

public UserInfo getUi() {
return ui;
}

public void setUi(UserInfo ui) {
this.ui = ui;
}

UserInfoService userInfoService;

public void setUserInfoService(UserInfoService userInfoService) {
this.userInfoService = userInfoService;
}

public String doLogin() throws Exception {
List<UserInfo> uiList = userInfoService.login(ui);
if (uiList.size() > 0) {
// 登录成功,转发到到index.jsp
return "index";
} else {
// 登录失败,重定向到login.jsp
return "login";
}

}


在Spring配置文件中配置Action实例(在UsuerInfoAction类中属性userInfoService需要注入实例,设置原型模式scope=“prototype”每一个请求都注入新的



<!-- 定义UserInfoAction类 ,并为其中属性userInfoService注入值 -->
<bean name="uiAction" class="com.digital.action.UserInfoAction" scope="prototype">
<property name="userInfoService" ref="userInfoService" />
</bean>


在项目stc中目录创建struts2的配置文件struts.xml

class=“uiAction”为页面提交的action提交到Spring 中的方法uiAction,并注入Bean实例

method=“doLogin”为页面提交的action提交到UserInfoAction类中doLogin方法响应

<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<!-- 定义一个名称为digital的包,继承struts 2的默认包,指定命名空间为"/" -->
<package name="digital" namespace="/" extends="struts-default">
<!-- 为类中的方法配置映射 -->
<action name="doLogin" class="uiAction" method="doLogin">


为UserInfoAction类doLogin方法返回的结果响应到指定跳转的页面

<result name="index" type="dispatcher">index.jsp</result>
<result name="login" type="redirect">login.jsp</result>
</action>
</package>
</struts>


使用@controller:在容器中对UserInfoAction类实例化 使用

@scope(”prototype”):指定原型模式

//使用@Controller注解在Spring容器中注册UserInfoAction实例
//使用@Scope("prototype")指定原型模式
@Controller
@Scope("prototype")
public class UserInfoAction extends ActionSupport {

UserInfo ui;


使用@Autowired:对userInfoService注入实例化对象

// 使用@Autowired注解注入UserInfoServiceImpl实例
@Autowired
UserInfoService userInfoService;


使用@Action注解:ACTION中下的一个方法doLogin方法,通过改变value值响应多个不同的URL.

@Result中name值根据不同的type值 跳转到不同的location本地页面

@Action(value=”/doLogin”,results={
@Result(name=”index”,type=”dispatcher”,location=”/index.jsp”),
@Result(name=”login”,type=”redirect”,location=”/login.jsp”)})
public String doLogin()throws Exception
{
List<UserInfo> uiList = userInfoService.login(ui);
if(uiList.size()>0)
{
return "index";

}
else
return "login";
}


—————————————————————————————————————————————————————————

8.Spring整合Struts2

目的:

使用SpringIOC容器管理Struts2的Action

步骤:

在web.xml配置文件中制定以Lisetener的方式启动Spring,

并配置Struts2的StrutsPrepareAndExecuteFilter

实现步骤

指定Listerner方式启动Spring

监听类的导入



<!-- 指定以Listerner方式启动Spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


指定Spring的上下文配置文件applicationContext

<!-- 指定Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>


配置struts2的核心控制器



<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


整个web.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>digital-1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 指定以Listerner方式启动Spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
<!-- 指定Spring配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
</web-app>


—————————————————————————————————————————————————————————

9.Struts文件配置 头部声明

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">


Anction访问的Spring的bean实例(class=uiAction),完成Action类里面属性的配置

<struts>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<!-- 定义一个名称为digital的包,继承struts 2的默认包struts-default,指定命名空间为"/" -->
<package name="digital" namespace="/" extends="struts-default">
<!-- 为类中的方法配置映射 -->
<action name="doLogin" class="uiAction" method="doLogin">
<result name="index" type="dispatcher">index.jsp</result>
<result name="login" type="redirect">login.jsp</result>
</action>
</package>
</struts>


基于annotation配置修改struts配置文件

因为使用@anction注解已经完成上述内容,所以struts配置文件中上述内容不需要可以删除

@Action(value=”/doLogin”,results={
@Result(name=”index”,type=”dispatcher”,location=”/index.jsp”),
@Result(name=”login”,type=”redirect”,location=”/login.jsp”)})
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml ssh 框架 bean
相关文章推荐