web.xml

 <!-- Spring配置 -->
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:config/springAnnotation-*.xml</param-value>
  </context-param>

  <!-- Spring监听 -->
  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- SpringMVC配置 -->
  <servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
        <!-- contextConfigLocation是个固定的参数 -->
            <param-name>contextConfigLocation</param-name>
            <!-- 加载配置文件 -->
            <param-value>classpath*:config/springAnnotation-servlet.xml</param-value>
        </init-param> 
     <load-on-startup>1</load-on-startup> 
  </servlet>

    <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

springAnnotation-hibernate.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" [
<!ENTITY contextInclude SYSTEM "org/springframework/web/context/WEB-INF/contextInclude.xml">
]>
<!--  hibernate5个对象-->
<!-- configLocations,sessionFactory,session ,transaction,Query-->
<beans>
<!-- 配置数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <!-- 指定连接数据库的驱动 -->
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
          <!-- 指定连接数据库的URL -->
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/>
          <!-- 指定连接数据库的用户名 -->
        <property name="userName" value="spring"/>
          <!-- 指定连接数据库的密码 -->
        <property name="password" value="spring"/>
    </bean>
       <!--配置数据库会话工厂-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <!-- 引用数据源 -->
        <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties">
        <!-- hibernate属性配置 -->
            <props>
            <!-- 指定一种方言, 允许Hibernate针对特定的关系数据库生成优化的SQL -->
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10Dialect</prop>
                <!--hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构  -->
<!--    在SessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库. 使用 create-drop时,在显式关闭SessionFactory时,将drop掉数据库schema.
取值 validate | update | create | create-drop -->
<!-- update:第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),
以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。
要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。-->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <!--输出所有SQL语句到控制台  --> 
                <prop key="hibernate.show_sql">true</prop>
                <!--在log和console中打印出更漂亮的SQL。 取值 true | fals-->
                <prop key="hiberante.format_sql">true</prop>
            </props>
        </property>
        <property name="configLocations">
            <list>
                <value>
                 <!--配置映射的类-->
                    classpath*:com/tgb/web/controller/hibernate/hibernate.cfg.test.xml
                </value>
            </list>
        </property>
    </bean>
    <!-- 配置事务容器 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <bean id="transactionBese" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true">
        <property name="transactionManager" ref="transactionManager"></property>
        <property name="transactionAttributes">
            <props>
            <!--配置事务的方法  -->
            <!-- 定义事务规则   定义当遇到Exception异常时 回滚,- 表示抛出该异常时并回滚,+表示即使抛出该异常事务同样要提交-->
            <!-- PROPAGATION_REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 -->
                <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="modify*">PROPAGATION_REQUIRED,-Exception</prop>
                <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
                <!-- PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常 -->
                <prop key="get*">PROPAGATION_NEVER</prop>
            </props>
        </property>
    </bean>
</beans>

hibernate.cfg.test.xml模板

<hibernate-configuration>
    <session-factory>
        <mapping class="com.tgb.web.controller.entity.User"/>
    </session-factory>
</hibernate-configuration>

映射表的类

//实体User映射到表T_USER
@Entity
@Table(name="T_USER")
public class User {

    @Id
    //数据库中的主键生成器,值为uuid
    @GeneratedValue(generator = "system-uuid")  
    @GenericGenerator(name = "system-uuid", strategy = "uuid")  
    private String id;

    @Column(length=32)
    private String userName;

    @Column(length=32)
    private String age;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}

springAnnotation-servlet.xml

   <!-- 注解扫描包 -->
    <context:component-scan base-package="com.tgb.web.controller" />
    <!-- 开启注解 -->

    <mvc:annotation-driven/>


<!--  视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

springAnnotation-core.xml
配置bean

<beans>
    <bean id="userDao" class="com.tgb.web.controller.dao.UserDAO">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <bean id="userManagerBase" class="com.tgb.web.controller.service.UserManager">
        <property name="userDao" ref="userDao"></property>
    </bean>
    <!--parent="transactionBese"  继承transactionBese(事务管理)  -->
    <!--ref="userManagerBase"" 实现userManagerBase  -->
    <bean id="userManager" parent="transactionBese">
        <property name="target" ref="userManagerBase"></property>
    </bean>

</beans>

配置bean的原因:

public class UserDAO implements IUserDAO  {

//<bean id="userDao" class="com.tgb.web.controller.dao.UserDAO">
//  <property name="sessionFactory" ref="sessionFactory"></property>
//</bean>
    private SessionFactory sessionFactory;

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

    @Override
    public void addUser(User user) {
        sessionFactory.getCurrentSession().save(user);
    }



}
public class UserManager implements IUserManager {
    //  <bean id="userManagerBase" class="com.tgb.web.controller.service.UserManager">
    //<property name="userDao" ref="userDao"></property>
    //</bean>
    private IUserDAO userDao;


    public void setUserDao(IUserDAO userDao) {
        this.userDao = userDao;
    }


    @Override
    public void addUser(User user) {
        userDao.addUser(user);
    }

controller

@Controller
@RequestMapping("/user")
public class UserController {

    @Resource(name="userManager")
    private IUserManager userManager;

    @RequestMapping("/toAddUser")
    public String toAddUser(){
        return "/addUser";
    }
posted on 2017-04-13 18:34  2637282556  阅读(117)  评论(0编辑  收藏  举报