spring-status-hibernate

来源:互联网 发布:手机vpn代理软件 编辑:程序博客网 时间:2024/06/05 00:45

web.xml配置 增加过滤器开启struts控制器和开启延迟加载并指定spring容器对象

<?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_2_5.xsd" version="2.5">    <!-- opensessioninviewfilter,放在struts2 filter之前  开启延迟加载 -->    <filter>        <filter-name>opensession</filter-name>        <filter-class>        org.springframework.orm.hibernate4.support.OpenSessionInViewFilter        </filter-class>    </filter>    <!-- 使用过滤加载strtus2控制器 -->    <filter-mapping>        <filter-name>opensession</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <filter>        <filter-name>strutsmvc</filter-name>        <filter-class>    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter        </filter-class>        <!-- 默认找src/struts.xml配置文件,找action和result配置 -->        <!-- 默认只有.action或没有扩展名请求会找action处理 -->    </filter>    <filter-mapping>        <filter-name>strutsmvc</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!-- 指定Spring容器配置文件 -->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:applicationContext.xml</param-value>    </context-param>    <!-- 创建Spring容器对象 -->    <listener>        <listener-class>        org.springframework.web.context.ContextLoaderListener        </listener-class>    </listener>    <distributable/></web-app>

maven pom.xml配置

  • 自动加载jar包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>cn.xdl</groupId>  <artifactId>ssh_01</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>war</packaging>  <!-- java源文件编码 -->    <properties>        <project.build.sourceEncoding>              UTF-8        </project.build.sourceEncoding>    </properties>  <!-- jar -->  <!-- http://maven.aliyun.com/nexus/ -->  <dependencies>  <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.12</version>  </dependency>  <dependency>      <groupId>Javax.servlet</groupId>      <artifactId>servlet-api</artifactId>      <version>3.0-alpha-1</version>  </dependency>  <dependency>      <groupId>org.apache.struts</groupId>      <artifactId>struts2-core</artifactId>      <version>2.3.31</version>      <exclusions>        <exclusion>            <groupId>javassist</groupId>            <artifactId>javassist</artifactId>        </exclusion>      </exclusions>  </dependency>  <dependency>  <groupId>org.apache.struts</groupId>  <artifactId>struts2-json-plugin</artifactId>  <version>2.3.31</version>  </dependency>    <dependency>      <groupId>org.apache.struts</groupId>      <artifactId>struts2-convention-plugin</artifactId>      <version>2.3.31</version>    </dependency>  <dependency>  <groupId>jstl</groupId>  <artifactId>jstl</artifactId>  <version>1.2</version></dependency>  <!-- spring环境 -->  <dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-orm</artifactId>  <version>4.1.6.RELEASE</version></dependency>  <dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-jdbc</artifactId>  <version>4.1.6.RELEASE</version></dependency>  <dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-aop</artifactId>  <version>4.1.6.RELEASE</version></dependency><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-web</artifactId>  <version>4.1.6.RELEASE</version></dependency><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-test</artifactId>  <version>4.1.6.RELEASE</version></dependency>  <!-- struts2-spring-plugin.jar -->  <dependency>  <groupId>org.apache.struts</groupId>  <artifactId>struts2-spring-plugin</artifactId>  <version>2.3.31</version></dependency><!-- hibernate --><dependency>  <groupId>org.hibernate</groupId>  <artifactId>hibernate-core</artifactId>  <version>4.2.21.Final</version></dependency><dependency>  <groupId>org.hibernate</groupId>  <artifactId>hibernate-ehcache</artifactId>  <version>4.2.21.Final</version></dependency><!-- c3p0 --><dependency>  <groupId>c3p0</groupId>  <artifactId>c3p0</artifactId>  <version>0.9.1.2</version></dependency><dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>5.1.8</version></dependency>  </dependencies>    <!-- 指定编译版本和编码 -->    <build>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <version>2.3.2</version>                <configuration>                    <source>1.7</source>                    <target>1.7</target>                    <encoding>UTF-8</encoding>                </configuration>            </plugin>        </plugins>        <defaultGoal>compile</defaultGoal>    </build></project>

spring配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"     xmlns:jdbc="http://www.springframework.org/schema/jdbc"      xmlns:jee="http://www.springframework.org/schema/jee"     xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:aop="http://www.springframework.org/schema/aop"     xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:util="http://www.springframework.org/schema/util"    xmlns:jpa="http://www.springframework.org/schema/data/jpa"    xsi:schemaLocation="        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd">    <!-- 扫描Action -->    <context:component-scan base-package="cn.xdl.action"/>    <!-- 扫描Dao -->    <context:component-scan base-package="cn.xdl.dao"/>    <!-- JdbcTemplate对象 -->    <bean id="template" class="org.springframework.jdbc.core.JdbcTemplate">        <property name="dataSource" ref="c3p0"></property>    </bean>    <!-- c3p0 -->    <bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <property name="user" value="root"></property>        <property name="password" value="root"></property>        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/studyonline?useUnicode=true&amp;characterEncoding=utf8"></property>    </bean>    <!-- HibernateTemplate -->    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">        <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <!-- SessionFactory -->    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">        <!-- 指定连接池 -->        <property name="dataSource" ref="c3p0">        </property>        <!-- 指定hibernate.cfg.xml -->        <property name="configLocations" value="classpath:hibernate.cfg.xml">        </property>    </bean>    <!-- Hibernate事务处理 -->    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <!-- 支持@Transactional -->    <tx:annotation-driven transaction-manager="txManager"         proxy-target-class="true"/></beans>

hibernate配置

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration>    <session-factory>        <property name="dialect">            org.hibernate.dialect.MySQLDialect        </property>        <!-- 显示底层sql语句 -->        <property name="show_sql">true</property>        <property name="format_sql">true</property>        <!-- 开启二级缓存 -->        <property name="hibernate.cache.use_sencond_level_cache">true</property>        <property name="hibernate.cache.region.factory_class">        org.hibernate.cache.ehcache.EhCacheRegionFactory        </property>        <!-- 开启查询缓存 -->        <property name="hibernate.cache.use_query_cache">true</property>        <!--关联映射的实体类-->         <mapping class="cn.xdl.entity.Note"/>         <mapping class="cn.xdl.entity.User"/>    </session-factory></hibernate-configuration>

实体类配置

//定义为映射组件@Entity//映射数据库的哪个表@Table(name="NOTE")//开启二级缓存的只读@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)public class Note {    @Id    @GeneratedValue(strategy=GenerationType.IDENTITY)    @Column(name="ID")    private Integer id;    @Column(name="CONTEXT")    private String context;    @Column(name="PUBLISH_TIME")    private Date publishTime;    @Column(name="LIKE_COUNT")    private Integer likeCount;//  @Column(name="USER_ID")//    private Integer userId;    @Column(name="VIDEO_ID")    private Integer videoId;    //追加关联属性 一级缓存    //在user属性前追加下面标记 表示多对一    //FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。页面需要时再执行查询    //FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。    @ManyToOne(fetch=FetchType.LAZY)    //建立User和Note的单表映射    //在Note类中加user属性,删除原有的userId属性    @JoinColumn(name="USER_ID")    //设置只读属性,只可以对数据库进行读取    //CacheConcurrencyStrategy.NONE    //CacheConcurrencyStrategy.READ_ONLY,只读模式,在此模式下,如果对数据进行更新操作,会有异常;    //CacheConcurrencyStrategy.READ_WRITE,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;    //CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不严格的读写模式则不会的缓存数据加锁;    //CacheConcurrencyStrategy.TRANSACTIONAL,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持JTA环境。    @Cache(usage=CacheConcurrencyStrategy.READ_ONLY)    private User user;

二级缓存的配置

<ehcache>    <diskStore path="java.io.tmpdir"/>    //默认缓存    <defaultCache        maxElementsInMemory="1000"<!-- 缓存最大数目 --eternal="false"<!-- 缓存是否持久 --timeToIdleSeconds="10"<!-- 当缓存闲置n秒后销毁 --timeToLiveSeconds="120"<!-- 当缓存存活n秒后销毁--overflowToDisk="true"<!-- 是否保存到磁盘,当系统当机时 查询出来的缓存数据超过了最大数目-->        />    <cache name="sampleCache1"        maxElementsInMemory="10000"        eternal="false"        timeToIdleSeconds="300"        timeToLiveSeconds="600"        overflowToDisk="true"        />    <cache name="sampleCache2"    maxElementsInMemory="1000"    eternal="true"    timeToIdleSeconds="0"    timeToLiveSeconds="0"    overflowToDisk="false"    /> </ehcache>

DAO接口实现类和查询缓存的开启

package cn.xdl.dao.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.orm.hibernate4.HibernateTemplate;import org.springframework.stereotype.Repository;import cn.xdl.dao.NoteDao;import cn.xdl.entity.Note;@Repository("noteDao1")public class HibernateNoteDao implements NoteDao{    @Resource    private HibernateTemplate hibernateTemplate;    @Override    public List<Note> selectByUserId(int userId) {        String hql = "from Note where user.id=?";        //启用缓存,查询缓存的开启,在执行查询语句之前调用该方法执行查询缓存        hibernateTemplate.setCacheQueries(true);        List list = hibernateTemplate.find(hql, userId);        return list;    }    @Override    public int deleteById(int id) {        Note note = hibernateTemplate.get(Note.class, id);        if(note==null){            return 0;        }else{            hibernateTemplate.delete(note);            return 1;        }    }    @Override    public Note selectById(int id) {        try{            Note note = hibernateTemplate.load(Note.class, id);            return note;        }catch(Exception e){            return null;        }    }}
原创粉丝点击