1. 程式人生 > >一點點總結Spring整合Hibernate Day1

一點點總結Spring整合Hibernate Day1

dia .cn ror mysql5 dial word too locals spring整合

一點點總結Spring整合Hibernate Day1

IDE: IntelliJ IDEA 2017

數據庫:MySql

另外加入的的jar

1.用於Spring AOP需要的jar:aspectjrt.jar, aspectjweaver.jar (此項可以省略!)

2.用於spring-config.xml配置數據源需要的jar:mysql-connector-java-5.0.8-bin.jar,commons-pool-1.6.jar, commons-dbcp-1.4.jar

3.用於Hibernate調試信息需要的jar:log4j-1.2.17.jar,slf4j-api-1.7.25.jar,slf4j-log4j12-1.7.25.jar

(另外需要文件log4j.properties)

新建項目勾選SpringHibernate jar包由IDEA自動下載(筆者用:Spring-4.3.12.RELEASEHibernate 5.2.11-5.2.11

技術分享

技術分享

各部分源碼:

LogInterceptor.java(用於AOP織入的類)

 1 package com.pp.aop;
 2 
 3 import org.aspectj.lang.annotation.Aspect;
 4 import org.aspectj.lang.annotation.Before;
 5 import org.springframework.stereotype.Component;
6 7 @Aspect 8 @Component 9 public class LogInterceptor { 10 @Before("execution(public void com.pp.model.Chinese.useAxe())") 11 public void before(){ 12 System.out.println("LogInterceptor, Test AOP!"); 13 } 14 }

AxePerson接口

1 package com.pp.impl;
2 
3 public interface Axe {
4 public String chop(); 5 }
1 package com.pp.impl;
2 
3 public interface Person {
4     public void useAxe();
5 }

Chinese.java

 1 package com.pp.model;
 2 
 3 import com.pp.impl.Axe;
 4 import com.pp.impl.Person;
 5 import org.hibernate.Session;
 6 import org.hibernate.SessionFactory;
 7 import javax.annotation.Resource;
 8 
 9 public class Chinese implements Person {
10     private Axe axe;
11     private SessionFactory sessionFactory;
12 
13     public SessionFactory getSessionFactory() {
14         return sessionFactory;
15     }
16 
17 
18     @Resource
19     public void setSessionFactory(SessionFactory sessionFactory) {
20         this.sessionFactory = sessionFactory;
21     }
22 
23 
24     @Resource //(name = "stoneAxe")
25     public void setAxe( Axe axe){
26         this.axe = axe;
27     }
28     @Override
29     public void useAxe() {
30         System.out.println("sessionFactory.Class:"+sessionFactory.getClass());
31         Session session = sessionFactory.openSession();
32         session.beginTransaction();               //開始Transaction
33         session.save(new peopleInfo());     //數據存入數據庫
34         session.getTransaction().commit();        //得到Transaction並提交
35         session.close();                          //關閉連接
36 
37         System.out.println("我打算去看點柴火!");
38         System.out.println(axe.chop());
39     }
40 }

peopleInfo.java(與數據庫有相對應的表peopleInfo)

 1 package com.pp.model;
 2 
 3 import javax.persistence.*;
 4 
 5 @Entity
 6 @Table(name = "peopleInfo")
 7 public class peopleInfo {
 8     private int id;
 9     private String name;
10 
11     /**
12      * @Id 映射主鍵屬性,這裏采用uuid的主鍵生成策略
13      * @GeneratedValue —— 註解聲明了主鍵的生成策略。該註解有如下屬性
14      * strategy 指定生成的策略,默認是GenerationType. AUTO
15      * GenerationType.AUTO 主鍵由程序控制
16      * GenerationType.TABLE 使用一個特定的數據庫表格來保存主鍵
17      * GenerationType.IDENTITY 主鍵由數據庫自動生成,主要是自動增長類型
18      * GenerationType.SEQUENCE 根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列
19      * generator 指定生成主鍵使用的生成器
20      */
21     @Id
22     @GeneratedValue
23     @Column(name = "id")
24     public int getId() {
25         return id;
26     }
27 
28     public void setId(int id) {
29         this.id = id;
30     }
31 
32     public String getName() {
33         return name;
34     }
35 
36     public void setName(String name) {
37         this.name = name;
38     }
39 }

StoneAxe.java

 1 package com.pp.model;
 2 
 3 import com.pp.impl.Axe;
 4 import org.springframework.stereotype.Component;
 5 
 6 @Component
 7 public class StoneAxe implements Axe {
 8     @Override
 9     public String chop() {
10         return "石斧砍柴好慢!";
11     }
12 }

測試類:BeanTest.java

 1 package com.pp.test;
 2 
 3 import com.pp.impl.Person;
 4 import org.springframework.context.ApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 
 7 public class BeanTest {
 8     public static void main(String args[]){
 9         ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");
10         Person p = ctx.getBean("chinese", Person.class);
11         p.useAxe();
12     }
13 }

log4j.properties(自行百度copy即可)

# Root logger option
log4j.rootLogger=INFO, console
log4j.logger.com.ch.demo=INFO, console

# Direct log messages to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm}| %p | %F %L | %m%n

# direct messages to file hibernate.log
# log4j.logger.org.hibernate=DEBUG, hibernate
log4j.appender.hibernate=org.apache.log4j.RollingFileAppender
log4j.appender.hibernate.File=hibernate.log
log4j.appender.hibernate.layout=org.apache.log4j.PatternLayout
log4j.appender.hibernate.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n

# Hibernate主要的類別如下:

# 1)org.hibernate.SQL
# 日誌輸出所有Hibernate執行的SQL DML語句
log4j.logger.org.hibernate.SQL=debug 

# 2)org.hibernate.type
# 日誌輸出所有的JDBC參數

# 3)org.hibernate.transaction
# 日誌輸出所有活動相關的事務

# 4)org.hibernate.jdbc
# 日誌輸出所有的JDBC資源采集

# 5)org.hibernate.tool.hbm2ddl
# 日誌輸出所有Hibernate執行的SQL DDL語句
log4j.logger.org.hibernate.tool.hbm2ddl = Debug

# 6)org.hibernate
# 日誌輸出所有的Hibernate信息

# 如果指定日誌輸出類別為org.hibernate.SQL,那麽將會輸出SQL語句。但是,還有一種更簡單的查看SQL語句的方法,只需簡單地設置show_sql參數為true。

spring-config.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xmlns:aop="http://www.springframework.org/schema/aop"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans
 7         http://www.springframework.org/schema/beans/spring-beans.xsd
 8         http://www.springframework.org/schema/context
 9         http://www.springframework.org/schema/context/spring-context.xsd
10         http://www.springframework.org/schema/aop
11         http://www.springframework.org/schema/aop/spring-aop.xsd">
12     <context:annotation-config />
13     <context:component-scan base-package="com.pp" />
14     <aop:aspectj-autoproxy />
15 
16     <!--數據源的配置-->
17     <!--外加包:commons-pool, commons-dbcp, mysql-connector-java-->
18     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
19         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
20         <property name="url" value="jdbc:mysql://ip地址:端口號/ppsql" ></property>
21         <property name="username" value="root"></property>
22         <property name="password" value="root"></property>
23     </bean>
24 
25     <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
26         <!-- 註入datasource,給sessionfactoryBean內setdatasource提供數據源 -->
27         <property name="dataSource" ref="dataSource" />
28         <property name="annotatedClasses">                    <!--Hibernate關系映射的類集合-->
29             <list>
30                 <value>com.pp.model.peopleInfo</value>        <!-- 關系映射的類 -->
31             </list>
32         </property>
33         <property name="hibernateProperties">                 <!--Hibernate配置文件中的設置參數-->
34             <props>
35                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>    <!--需要根據數據庫版本來選擇對於的Dialect-->
36                 <prop key="hibernate.show_sql">true</prop>
37                 <prop key="hibernate.format_sql">true</prop>
38                 <prop key="hibernate.hbm2ddl.auto">update</prop>
39             </props>
40         </property>
41     </bean>
42 
43     <bean id="chinese" class="com.pp.model.Chinese" scope="singleton" />
44 
45 </beans>

配置過程中遇到的問題點:

1.Error executing DDL via JDBC Statement 解:org.hibernate.dialect.*Dialect (*:要選擇相對應的數據庫版本)

2.通過JDBC初始化dataSource連接MySql需要引入包commons-pool-1.6(建議用pool而不是pool2),commons-dbcp-1.4,mysql-connector-java三個包

感覺自己還是沒有總結的很好,以後繼續努力加油!!!!!!!

一點點總結Spring整合Hibernate Day1