一點點總結Spring整合Hibernate Day1
一點點總結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
新建項目勾選Spring和Hibernate jar包由IDEA自動下載(筆者用:Spring-4.3.12.RELEASE和Hibernate 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 }
Axe和Person接口
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