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

来源:互联网 发布:淮安悠迅网络 编辑:程序博客网 时间:2024/05/22 06:28

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() {
  • 1
  • 2
  • 3
  • 4

对非主属性

    @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事务管理器、定义事务通知、定义切面、将事务通知和切面组合起来


  • 加入c3p0数据源(实例化数据源)
<!-- 配置数据源 -->    <bean id="dataSource"          class="com.mchange.v2.c3p0.ComboPooledDataSource">          <property name="driverClass" value="com.mysql.jdbc.Driver" />          <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实例 -->    <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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 配置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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

  • 基于tx和aop名字空间的xml配置文件
  • 基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。
  • 开启注释处理器
    <!-- 开启注解处理器 -->    <context:annotation-config />
  • 1
  • 2
  • 3

  • 基于@Transactional注解方式的事务管理
<!-- 开启Spring的Bean自动扫描机制来检查与管理Bean实例 -->    <context:component-scan base-package="com.digital" />
  • 1
  • 2

  • 开启自动扫描机制检查与管理Bean实例
<tx:annotation-driven transaction-manager="transactionManager" />




  • 定义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 {
  • 1
  • 2
  • 使用注解@Autowired完成SessionFactory属性的注入
// 通过@Autowired注解注入Spring容器中的SessionFactory实例    @Autowired    SessionFactory sessionFactory;


  • 定义Bean为在UserInfoServiceImpl类中的属性name=”userInfoDAO“注入ref=“userInfoDAO”实例
    <!-- 定义UserInfoServiceImpl类,并为其userInfoDAO属性注入值-->    <bean id="userInfoService" class="com.digital.service.impl.UserInfoServiceImpl">              <property name="userInfoDAO" ref="userInfoDAO" />    </bean>
  • 1
  • 2
  • 3
  • 4
  • 使用@Service注解:在Service服务层实例化UserInfoServiceImpl类放入Spring容器中
//使用@Transactional注解实现事务管理@Transactional//使用@Service注解在Spring容器中注册名为userInfoService的UserInfoServiceImpl实例@Service("userInfoService")public class UserInfoServiceImpl implements UserInfoService {//使用@Autowired注解注入UserInfoDAOImpl实例    @Autowired    UserInfoDAO userInfoDAO;   



阅读全文
0 0