基於Annotation註解整合SSH框架和基於XML檔案配置Bean整合SSH框架

藍星花發表於2017-12-06

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;   



相關文章