`
firecool
  • 浏览: 83538 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Spring2.5 及 Hibernate Annotation 配置文件笔记

    博客分类:
  • java
阅读更多
1. web.xml 配置
 <context-param>  
   
     <param-name>contextConfigLocation</param-name>  
        <param-value>  
            /WEB-INF/applicationContext.xml  
            <!--classpath*:/spring-config/applicationContext.xml-->  
        </param-value>  
   
 </context-param>  
    <!-- hibernate open session in view -->  
    <filter>   
       <filter-name>hibernateFilter</filter-name>  
       <filter-class>       org.springframework.orm.hibernate3.support.OpenSessionInViewFilter  
       </filter-class>  
   </filter>     
     
   <!-- 编码 -->  
   <filter>   
       <filter-name>encodingFilter</filter-name>  
       <filter-class>  
           org.springframework.web.filter.CharacterEncodingFilter  
       </filter-class>  
       <init-param>  
           <param-name>encoding</param-name>  
           <param-value>UTF-8</param-value>  
       </init-param>  
       <init-param>  
           <param-name>forceEncoding</param-name>  
           <param-value>true</param-value>  
       </init-param>  
   </filter>     
   <!-- hibernate open session in view -->  
   <filter-mapping>    
       <filter-name>hibernateFilter</filter-name>  
       <url-pattern>/*<url-pattern>     
   </filter-mapping>    
   <!-- 编码 -->  
   <filter-mapping>    
       <filter-name>encodingFilter</filter-name>  
       <url-pattern>*.jsp<url-pattern>     
   </filter-mapping>  
     
   <listener>  
       <listener-class>  
           org.springframework.web.context.ContextLoaderListener  
       </listener-class>  
   </listener>  
     
   <listener>  
       <listener-class>             org.springframework.web.context.request.RequestContextListener  
       </listener-class>  
   </listener>  
     
   <!-- 要负责处理由  JavaBeans Introspector的使用而引起的缓冲泄露 -->  
   <listener>  
       <listener-class>  
           org.springframework.web.util.IntrospectorCleanupListener  
       </listener-class>  
   </listener>  

2.applicationContext.xml 配置
对于dataSource就省略了 可以使用c3p0连接池
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
        <property name="dataSource" ref="dataSource"/>  
        <property name="annotatedClasses" ref="annotatedClasses"/>  
        <property name="hibernateProperties" ref="hibernateProperties"/>  
    </bean>  
      
    <bean name="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  
        <property name="properties">  
            <props>  
               <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
               <prop key="hibernate.show_sql">true</prop>  
               <prop key="hibernate.hbm2ddl.auto">none</prop>  
               <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>  
               <prop key="hibernate.cache.use_query_cache">true</prop>  
               <prop key="hibernate.default_batch_fetch_size">30</prop>  
           </props>  
       </property>  
   </bean>  
     
   <!-- annotation table 类 -->  
   <bean id="annotatedClasses" class="org.springframework.beans.factory.config.ListFactoryBean">  
       <property name="sourceList">  
           <list>  
               <value>com.bask.model.Promotion</value>  
               <value>com.bask.model.PromotionGroup</value>  
               <value>com.bask.model.Largess</value>  
           </list>  
       </property>  
   </bean>  
     
   <!-- 事务 begin -->  
   <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
       <property name="sessionFactory" ref="sessionFactory" />  
   </bean>  
     
   <!-- 支持 @Transactional -->  
   <tx:annotation-driven/>  
     
   <!-- 支持 @AspectJ -->  
   <aop:aspectj-autoproxy/>  
     
   <!-- 以AspectJ方式定义AOP -->  
   <aop:config proxy-target-class="true">    
       <aop:advisor pointcut="execution(* com.bask.service.*Manager.*(..))" advice-ref="txAdvice"/>    
   </aop:config>  
     
   <tx:advice id="txAdvice" transaction-manager="transactionManager">  
       <tx:attributes>  
           <!-- 以get 、 find 开头的方法是只读事务 -->  
           <tx:method name="get*" read-only="true" />  
           <tx:method name="find*" read-only="true" />  
           <!-- 其他方法是默认 -->  
           <tx:method name="save*" />  
       </tx:attributes>  
   </tx:advice>  
   <!-- 事务 end -->  
     
   <context:annotation-config/>  
   <!-- service下是spring使用注解 -->  
   <context:component-scan base-package="com.bask.service"/>  

3.说明
在这里我们将会根据class生产数据库表 自动创建|更新|验证数据库表结构
<prop key="hibernate.hbm2ddl.auto">none</prop>  
<!-- auto 可以有create update and none 等-->  

接下来是Hibernate Annotation使用笔记
@Entity                         //声明为一个实体bean  
@Table(name="promotion_info")   //为实体bean映射指定表(表名="promotion_info)  
@Id                             //声明了该实体bean的标识属性  
@GeneratedValue                 //可以定义标识字段的生成策略.  
@Transient                      //将忽略这些字段和属性,不用持久化到数据库  
@Column(name="promotion_remark")//声明列(字段名="promotion_total") 属性还包括(length=200等)  
@Temporal(TemporalType.TIMESTAMP)//声明时间格式  
@Enumerated                     //声明枚举  
@Version                        //声明添加对乐观锁定的支持  
@OneToOne                       //可以建立实体bean之间的一对一的关联  
@OneToMany                      //可以建立实体bean之间的一对多的关联  
@ManyToOne                      //可以建立实体bean之间的多对一的关联  
@ManyToMany                     //可以建立实体bean之间的多对多的关联  
@Formula                        //一个SQL表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等)  

以上是基本常用注解,下面是例子说明
a.Promotion
@Entity  
@Table(name="promotion_info")  
public class Promotion implements Serializable {  
      
        //AUTO--可以是identity类型的字段,或者sequence类型或者table类型,取决于不同的底层数据库  
  @Id   
  @GeneratedValue(strategy = GenerationType.AUTO)  
  private Long id;  
      
  @Column(name="group_start_amount")  
  private Integer groupStartAmount=0;  
         
  @Column(name="promotion_remark",length=200)  
  //@Lob 如果是文章内容可以使用 只需要把length=200去掉就可以了  
   private String remark;  
  //DATE      - java.sql.Date  
  //TIME      - java.sql.Time  
  //TIMESTAMP - java.sql.Timestamp  
  @Temporal(TemporalType.TIMESTAMP)  
  @Column(name="start_time")  
  private Date startTime;  
     
  //显示0 隐藏1  
  public static enum DisplayType {  
           显示,隐藏  
  }  
  @Enumerated(value = EnumType.ORDINAL)//ORDINAL序数  
  private DisplayType displayType = DisplayType.显示;  
     
  @Version  
  private Integer version;  
     
  //CascadeType.PERSIST   -- 触发级联创建(create)  
  //CascadeType.MERGE     -- 触发级联合并(update)  
  //FetchType.LAZY        -- 延迟加载  
  @ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE},fetch = FetchType.LAZY)  
  private PromotionGroup promotionGroup;  
     
  //单向ManyToMany  
  //@JoinTable(关联的表名)  
  //joinColumns -- promotion关联的列的外键  
  //inverseJoinColumns -- largess 关联列的外键  
  @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE})  
  @JoinTable(name="promotion_largess",joinColumns={@JoinColumn(name="promotion_id")},inverseJoinColumns={@JoinColumn(name="largess_id")})  
  private Set<Largess> largess;   
     
  //get set 省略.  
     
}  

b.PrmotionGroup
@Entity  
@Table(name="promotion_group")  
public class PromotionGroup implements Serializable {  
  @Id   
  @GeneratedValue(strategy = GenerationType.AUTO)  
  private Long id;  
         
  //mappedBy的值"promotionGroup"指向owner(Promotion)端的关联属性,并且是双向关系  
   @OneToMany(mappedBy="promotionGroup",cascade=CascadeType.ALL)  
   private List<Promotion> promotion;  
     
   //get set 省略.  
} 

c.Largess
@Entity  
@Table(name="largess")  
public class Largess implements Serializable {  
  @Id   
  @GeneratedValue(strategy = GenerationType.AUTO)  
  private Long id;  
     
  //1.sql语句中的字段和表名都应该和数据库相应,而不是类中的字段,  
  //若带有参数如la.id= id,这个=id才是类中属性  
  //2.操作字段一定要用别名  
  @Formula(select max(la.id) from largess as la)  
  private int maxId;  
     
  @Formula(select COUNT(la.id) from largess la)  
  private int count;  
     
  @Transient  
  private String img  
     
  //get set 省略.  
}  
分享到:
评论

相关推荐

    Spring2.5_学习笔记.doc.zip

    首先,Spring2.5引入了基于注解的配置(Annotation-based Configuration),这极大地简化了XML配置文件的编写,使得应用程序的装配过程更加直观和简洁。开发者可以通过在类或方法上添加如@Service、@Repository、@...

    Hibernate Annotation 笔记 总结 注解

    1. **注解替代XML映射**:在Hibernate 3.2及更高版本中,引入了Annotation支持,开发者可以直接在Java实体类上使用注解来定义持久化字段和关系,不再需要创建单独的`.hbm.xml`映射文件。 2. **依赖**:使用...

    spring2.5 学习笔记

    ### Spring 2.5 学习笔记知识点梳理 #### 第一课:面向抽象编程 - **定义**:面向抽象编程是一种编程范式,强调通过抽象类或接口来设计程序结构,减少对具体实现的依赖。 - **优势**: - 提高了系统的可维护性与...

    Hibernate Annotation笔记

    通过以上步骤,我们可以看到使用Hibernate Annotation能够显著简化Hibernate的配置工作,使得开发过程更加高效和简洁。此外,它还提高了代码的可读性和可维护性,是现代Java应用程序中持久层设计的一个很好的选择。

    Spring和Hibernate学习笔记

    Hibernate: 第一课:第一个hibernate项目 第二课:测试实体对象的生命周期 第三课:hibernate基本映射 第四课:hibernate多对一关联映射 ...................... ...第五课:spring对AOP的只是(采用配置文件的方式)

    spring整合Hibernate学习笔记.docx

    1. **配置 Hibernate**: 首先,我们需要在 Spring 配置文件中定义 Hibernate 的 SessionFactory。SessionFactory 是 Hibernate 的核心,负责创建 Session 对象,它是与数据库交互的桥梁。配置通常包括数据库连接信息...

    spring笔记

    Spring笔记中提到的技术知识点主要围绕Hibernate框架展开,Hibernate是一个开放源代码的对象关系映射(Object/Relational Mapping,简称ORM)框架,用于Java环境。它对JDBC进行了非常轻量级的对象封装,使得开发者...

    spring+hibernate+struts2 +mybatis整合笔记

    ### Spring+Hibernate+Struts2+MyBatis 整合笔记 #### 一、SSM框架简介及整合意义 SSM框架是指Spring、SpringMVC和MyBatis三个开源框架的整合,通常用于快速开发Java Web应用。本篇笔记主要介绍如何将Spring、...

    SSH笔记-annotation配置注入关系1

    在`SSHnote_Spring_2_Annotation`压缩包文件中,你可能找到了进一步的示例和详细解释,包括如何配置Spring以启用注解处理,以及如何利用注解进行更复杂的依赖管理和配置。这些资料将帮助你更好地理解Spring 4.x中...

    Spring学习笔记(18)----使用Spring配置文件实现事务管理

    5. **事务的配置**: 在Spring的XML配置文件中,我们需要定义`&lt;tx:annotation-driven&gt;`标签来启用基于注解的事务管理,并指定事务管理器。事务管理器通常是`PlatformTransactionManager`接口的实现,如`...

    传智播客 Spring 完全文档 笔记总结

    ### 传智播客 Spring 完全文档 笔记总结 #### 一、Spring入门 ##### 1.1 Spring简介 - **定义**:Spring 是一个开源的控制反转(Inversion of Control, IoC)和面向切面(Aspect Oriented Programming, AOP)的...

    JAVA-hibernate笔记

    - **重Annotation,轻xml配置文件** 注解在现代Java开发中越来越普遍,理解如何使用注解替代XML配置,可以使代码更加简洁。 **资源** - **http://www.hibernate.org** Hibernate的官方网站,提供最新版本、文档...

    spring框架案例学习文档笔记

    ### Spring框架案例学习文档笔记知识点总结 #### 面向抽象编程 - **定义**:面向抽象编程是一种软件设计原则,旨在通过抽象层隔离具体实现细节。这种方式有助于提高代码的可维护性和灵活性。 - **实践**:在Spring...

    spring学习文档及源码笔记

    这个资源包含的"spring学习文档及源码笔记"是深入理解并掌握 Spring MVC 的宝贵资料。下面,我们将详细探讨 Spring MVC 的核心概念、工作原理以及如何利用它来构建 Web 应用。 1. **Spring MVC 架构** - **...

    马士兵spring学习笔记

    - 在Spring配置文件中定义Hibernate SessionFactory。 - 使用Spring的Transaction管理器来管理Hibernate事务。 - 通过OpenSessionInViewFilter保持会话持续时间,确保事务的一致性。 #### 七、Struts2+Spring+...

Global site tag (gtag.js) - Google Analytics