1. <context-param>
2. <param-name>contextConfigLocation</param-name>
3. <param-value>
4. /WEB-INF/applicationContext.xml
5. <!--classpath*:/spring-config/applicationContext.xml-->
6. </param-value>
7. </context-param>
8. <!-- hibernate open session in view -->
9. <filter>
10. <filter-name>hibernateFilter</filter-name>
11. <filter-class>
12. org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
13. </filter-class>
14. </filter>
15.
16. <!-- 編碼 -->
17. <filter>
18. <filter-name>encodingFilter</filter-name>
19. <filter-class>
20. org.springframework.web.filter.CharacterEncodingFilter
21. </filter-class>
22. <init-param>
23. <param-name>encoding</param-name>
24. <param-value>UTF-8</param-value>
25. </init-param>
26. <init-param>
27. <param-name>forceEncoding</param-name>
28. <param-value>true</param-value>
29. </init-param>
30. </filter>
31. <!-- hibernate open session in view -->
32. <filter-mapping>
33. <filter-name>hibernateFilter</filter-name>
34. <url-pattern>/*<url-pattern>
35. </filter-mapping>
36. <!-- 編碼 -->
37. <filter-mapping>
38. <filter-name>encodingFilter</filter-name>
39. <url-pattern>*.jsp<url-pattern>
40. </filter-mapping>
41.
42. <listener>
43. <listener-class>
44. org.springframework.web.context.ContextLoaderListener
45. </listener-class>
46. </listener>
47.
48. <listener>
49. <listener-class>
50. org.springframework.web.context.request.RequestContextListener
51. </listener-class>
52. </listener>
53.
54. <!-- 要負責處理由 JavaBeans Introspector的使用而引起的緩沖泄露 -->
55. <listener>
56. <listener-class>
57. org.springframework.web.util.IntrospectorCleanupListener
58. </listener-class>
59. </listener>
2.applicationContext.xml 配置
2. <param-name>contextConfigLocation</param-name>
3. <param-value>
4. /WEB-INF/applicationContext.xml
5. <!--classpath*:/spring-config/applicationContext.xml-->
6. </param-value>
7. </context-param>
8. <!-- hibernate open session in view -->
9. <filter>
10. <filter-name>hibernateFilter</filter-name>
11. <filter-class>
12. org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
13. </filter-class>
14. </filter>
15.
16. <!-- 編碼 -->
17. <filter>
18. <filter-name>encodingFilter</filter-name>
19. <filter-class>
20. org.springframework.web.filter.CharacterEncodingFilter
21. </filter-class>
22. <init-param>
23. <param-name>encoding</param-name>
24. <param-value>UTF-8</param-value>
25. </init-param>
26. <init-param>
27. <param-name>forceEncoding</param-name>
28. <param-value>true</param-value>
29. </init-param>
30. </filter>
31. <!-- hibernate open session in view -->
32. <filter-mapping>
33. <filter-name>hibernateFilter</filter-name>
34. <url-pattern>/*<url-pattern>
35. </filter-mapping>
36. <!-- 編碼 -->
37. <filter-mapping>
38. <filter-name>encodingFilter</filter-name>
39. <url-pattern>*.jsp<url-pattern>
40. </filter-mapping>
41.
42. <listener>
43. <listener-class>
44. org.springframework.web.context.ContextLoaderListener
45. </listener-class>
46. </listener>
47.
48. <listener>
49. <listener-class>
50. org.springframework.web.context.request.RequestContextListener
51. </listener-class>
52. </listener>
53.
54. <!-- 要負責處理由 JavaBeans Introspector的使用而引起的緩沖泄露 -->
55. <listener>
56. <listener-class>
57. org.springframework.web.util.IntrospectorCleanupListener
58. </listener-class>
59. </listener>
對于dataSource就省略了 可以使用c3p0連接池
1. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
2. <property name="dataSource" ref="dataSource"/>
3. <property name="annotatedClasses" ref="annotatedClasses"/>
4. <property name="hibernateProperties" ref="hibernateProperties"/>
5. </bean>
6.
7. <bean name="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
8. <property name="properties">
9. <props>
10. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
11. <prop key="hibernate.show_sql">true</prop>
12. <prop key="hibernate.hbm2ddl.auto">none</prop>
13. <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
14. <prop key="hibernate.cache.use_query_cache">true</prop>
15. <prop key="hibernate.default_batch_fetch_size">30</prop>
16. </props>
17. </property>
18. </bean>
19.
20. <!-- annotation table 類 -->
21. <bean id="annotatedClasses" class="org.springframework.beans.factory.config.ListFactoryBean">
22. <property name="sourceList">
23. <list>
24. <value>com.bask.model.Promotion</value>
25. <value>com.bask.model.PromotionGroup</value>
26. <value>com.bask.model.Largess</value>
27. </list>
28. </property>
29. </bean>
30.
31. <!-- 事務 begin -->
32. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
33. <property name="sessionFactory" ref="sessionFactory" />
34. </bean>
35.
36. <!-- 支持 @Transactional -->
37. <tx:annotation-driven/>
38.
39. <!-- 支持 @AspectJ -->
40. <aop:aspectj-autoproxy/>
41.
42. <!-- 以AspectJ方式定義AOP -->
43. <aop:config proxy-target-class="true">
44. <aop:advisor pointcut="execution(* com.bask.service.*Manager.*(..))" advice-ref="txAdvice"/>
45. </aop:config>
46.
47. <tx:advice id="txAdvice" transaction-manager="transactionManager">
48. <tx:attributes>
49. <!-- 以get 、 find 開頭的方法是只讀事務 -->
50. <tx:method name="get*" read-only="true" />
51. <tx:method name="find*" read-only="true" />
52. <!-- 其他方法是默認 -->
53. <tx:method name="save*" />
54. </tx:attributes>
55. </tx:advice>
56. <!-- 事務 end -->
57.
58. <context:annotation-config/>
59. <!-- service下是spring使用注解 -->
60. <context:component-scan base-package="com.bask.service"/>
3.說明
2. <property name="dataSource" ref="dataSource"/>
3. <property name="annotatedClasses" ref="annotatedClasses"/>
4. <property name="hibernateProperties" ref="hibernateProperties"/>
5. </bean>
6.
7. <bean name="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
8. <property name="properties">
9. <props>
10. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
11. <prop key="hibernate.show_sql">true</prop>
12. <prop key="hibernate.hbm2ddl.auto">none</prop>
13. <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
14. <prop key="hibernate.cache.use_query_cache">true</prop>
15. <prop key="hibernate.default_batch_fetch_size">30</prop>
16. </props>
17. </property>
18. </bean>
19.
20. <!-- annotation table 類 -->
21. <bean id="annotatedClasses" class="org.springframework.beans.factory.config.ListFactoryBean">
22. <property name="sourceList">
23. <list>
24. <value>com.bask.model.Promotion</value>
25. <value>com.bask.model.PromotionGroup</value>
26. <value>com.bask.model.Largess</value>
27. </list>
28. </property>
29. </bean>
30.
31. <!-- 事務 begin -->
32. <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
33. <property name="sessionFactory" ref="sessionFactory" />
34. </bean>
35.
36. <!-- 支持 @Transactional -->
37. <tx:annotation-driven/>
38.
39. <!-- 支持 @AspectJ -->
40. <aop:aspectj-autoproxy/>
41.
42. <!-- 以AspectJ方式定義AOP -->
43. <aop:config proxy-target-class="true">
44. <aop:advisor pointcut="execution(* com.bask.service.*Manager.*(..))" advice-ref="txAdvice"/>
45. </aop:config>
46.
47. <tx:advice id="txAdvice" transaction-manager="transactionManager">
48. <tx:attributes>
49. <!-- 以get 、 find 開頭的方法是只讀事務 -->
50. <tx:method name="get*" read-only="true" />
51. <tx:method name="find*" read-only="true" />
52. <!-- 其他方法是默認 -->
53. <tx:method name="save*" />
54. </tx:attributes>
55. </tx:advice>
56. <!-- 事務 end -->
57.
58. <context:annotation-config/>
59. <!-- service下是spring使用注解 -->
60. <context:component-scan base-package="com.bask.service"/>
在這里我們將會根據class生產數據庫表 自動創建|更新|驗證數據庫表結構
1. <prop key="hibernate.hbm2ddl.auto">none</prop>
2. <!-- auto 可以有create update and none 等-->
2. <!-- auto 可以有create update and none 等-->
接下來是Hibernate Annotation使用筆記
1. @Entity --聲明為一個實體bean
2. @Table(name="promotion_info") --為實體bean映射指定表(表名="promotion_info)
3. @Id --聲明了該實體bean的標識屬性
4. @GeneratedValue --可以定義標識字段的生成策略.
5. @Transient --將忽略這些字段和屬性,不用持久化到數據庫
6. @Column(name="promotion_remark")--聲明列(字段名="promotion_total") 屬性還包括(length=200等)
7. @Temporal(TemporalType.TIMESTAMP)--聲明時間格式
8. @Enumerated --聲明枚舉
9. @Version --聲明添加對樂觀鎖定的支持
10. @OneToOne --可以建立實體bean之間的一對一的關聯
11. @OneToMany --可以建立實體bean之間的一對多的關聯
12. @ManyToOne --可以建立實體bean之間的多對一的關聯
13. @ManyToMany --可以建立實體bean之間的多對多的關聯
14. @Formula --一個SQL表達式,這種屬性是只讀的,不在數據庫生成屬性(可以使用sum、average、max等)
以上是基本常用注解,下面是例子說明
2. @Table(name="promotion_info") --為實體bean映射指定表(表名="promotion_info)
3. @Id --聲明了該實體bean的標識屬性
4. @GeneratedValue --可以定義標識字段的生成策略.
5. @Transient --將忽略這些字段和屬性,不用持久化到數據庫
6. @Column(name="promotion_remark")--聲明列(字段名="promotion_total") 屬性還包括(length=200等)
7. @Temporal(TemporalType.TIMESTAMP)--聲明時間格式
8. @Enumerated --聲明枚舉
9. @Version --聲明添加對樂觀鎖定的支持
10. @OneToOne --可以建立實體bean之間的一對一的關聯
11. @OneToMany --可以建立實體bean之間的一對多的關聯
12. @ManyToOne --可以建立實體bean之間的多對一的關聯
13. @ManyToMany --可以建立實體bean之間的多對多的關聯
14. @Formula --一個SQL表達式,這種屬性是只讀的,不在數據庫生成屬性(可以使用sum、average、max等)
1. @Entity
2. @Table(name="promotion_info")
3. public class Promotion implements Serializable {
4.
5. //AUTO--可以是identity類型的字段,或者sequence類型或者table類型,取決于不同的底層數據庫
6. @Id
7. @GeneratedValue(strategy = GenerationType.AUTO)
8. private Long id;
9.
10. @Column(name="group_start_amount")
11. private Integer groupStartAmount=0;
12.
13. @Column(name="promotion_remark",length=200)
14. //@Lob 如果是文章內容可以使用 只需要把length=200去掉就可以了
15. private String remark;
16. //DATE - java.sql.Date
17. //TIME - java.sql.Time
18. //TIMESTAMP - java.sql.Timestamp
19. @Temporal(TemporalType.TIMESTAMP)
20. @Column(name="start_time")
21. private Date startTime;
22.
23. //顯示0 隱藏1
24. public static enum DisplayType {
25. 顯示,隱藏
26. }
27. @Enumerated(value = EnumType.ORDINAL)//ORDINAL序數
28. private DisplayType displayType = DisplayType.顯示;
29.
30. @Version
31. private Integer version;
32.
33. //CascadeType.PERSIST -- 觸發級聯創建(create)
34. //CascadeType.MERGE -- 觸發級聯合并(update)
35. //FetchType.LAZY -- 延遲加載
36. @ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE},fetch = FetchType.LAZY)
37. private PromotionGroup promotionGroup;
38.
39. //單向ManyToMany
40. //@JoinTable(關聯的表名)
41. //joinColumns -- promotion關聯的列的外鍵
42. //inverseJoinColumns -- largess 關聯列的外鍵
43. @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE})
44. @JoinTable(name="promotion_largess",joinColumns={@JoinColumn(name="promotion_id")},inverseJoinColumns={@JoinColumn(name="largess_id")})
45. private Set<Largess> largess;
46.
47. //get set 省略
.
48.
49. }
50. @Entity
51. @Table(name="promotion_group")
52. public class PromotionGroup implements Serializable {
53. @Id
54. @GeneratedValue(strategy = GenerationType.AUTO)
55. private Long id;
56.
57. //mappedBy的值"promotionGroup"指向owner(Promotion)端的關聯屬性,并且是雙向關系
58. @OneToMany(mappedBy="promotionGroup",cascade=CascadeType.ALL)
59. private List<Promotion> promotion;
60.
61. //get set 省略
.
62. }
63. @Entity
64. @Table(name="largess")
65. public class Largess implements Serializable {
66. @Id
67. @GeneratedValue(strategy = GenerationType.AUTO)
68. private Long id;
69.
70. //1.sql語句中的字段和表名都應該和數據庫相應,而不是類中的字段,
71. //若帶有參數如la.id= id,這個=id才是類中屬性
72. //2.操作字段一定要用別名
73. @Formula(select max(la.id) from largess as la)
74. private int maxId;
75.
76. @Formula(select COUNT(la.id) from largess la)
77. private int count;
78.
79. @Transient
80. private String img
81.
82. //get set 省略
.
83. }
2. @Table(name="promotion_info")
3. public class Promotion implements Serializable {
4.
5. //AUTO--可以是identity類型的字段,或者sequence類型或者table類型,取決于不同的底層數據庫
6. @Id
7. @GeneratedValue(strategy = GenerationType.AUTO)
8. private Long id;
9.
10. @Column(name="group_start_amount")
11. private Integer groupStartAmount=0;
12.
13. @Column(name="promotion_remark",length=200)
14. //@Lob 如果是文章內容可以使用 只需要把length=200去掉就可以了
15. private String remark;
16. //DATE - java.sql.Date
17. //TIME - java.sql.Time
18. //TIMESTAMP - java.sql.Timestamp
19. @Temporal(TemporalType.TIMESTAMP)
20. @Column(name="start_time")
21. private Date startTime;
22.
23. //顯示0 隱藏1
24. public static enum DisplayType {
25. 顯示,隱藏
26. }
27. @Enumerated(value = EnumType.ORDINAL)//ORDINAL序數
28. private DisplayType displayType = DisplayType.顯示;
29.
30. @Version
31. private Integer version;
32.
33. //CascadeType.PERSIST -- 觸發級聯創建(create)
34. //CascadeType.MERGE -- 觸發級聯合并(update)
35. //FetchType.LAZY -- 延遲加載
36. @ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE},fetch = FetchType.LAZY)
37. private PromotionGroup promotionGroup;
38.
39. //單向ManyToMany
40. //@JoinTable(關聯的表名)
41. //joinColumns -- promotion關聯的列的外鍵
42. //inverseJoinColumns -- largess 關聯列的外鍵
43. @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE})
44. @JoinTable(name="promotion_largess",joinColumns={@JoinColumn(name="promotion_id")},inverseJoinColumns={@JoinColumn(name="largess_id")})
45. private Set<Largess> largess;
46.
47. //get set 省略

48.
49. }
50. @Entity
51. @Table(name="promotion_group")
52. public class PromotionGroup implements Serializable {
53. @Id
54. @GeneratedValue(strategy = GenerationType.AUTO)
55. private Long id;
56.
57. //mappedBy的值"promotionGroup"指向owner(Promotion)端的關聯屬性,并且是雙向關系
58. @OneToMany(mappedBy="promotionGroup",cascade=CascadeType.ALL)
59. private List<Promotion> promotion;
60.
61. //get set 省略

62. }
63. @Entity
64. @Table(name="largess")
65. public class Largess implements Serializable {
66. @Id
67. @GeneratedValue(strategy = GenerationType.AUTO)
68. private Long id;
69.
70. //1.sql語句中的字段和表名都應該和數據庫相應,而不是類中的字段,
71. //若帶有參數如la.id= id,這個=id才是類中屬性
72. //2.操作字段一定要用別名
73. @Formula(select max(la.id) from largess as la)
74. private int maxId;
75.
76. @Formula(select COUNT(la.id) from largess la)
77. private int count;
78.
79. @Transient
80. private String img
81.
82. //get set 省略

83. }