1. 程式人生 > >JPA註解實體類整合SSH

JPA註解實體類整合SSH

上篇文章:SSH三大框架整合:https://mp.csdn.net/postedit/82826858

       實體類的orm對映檔案由hibernate的*.hbm.xml管理,xml太多不方便管理。

現在 我們依然使用 hibernate的 sessionFactory例項,然後實體類的對映交由 JPA 的註釋來對映

 

一、配置步驟和上篇文章類似:修改幾個地方:

1、pom.xml引入JPA的包依賴

      hibernate-entitymanager 包含hibernate

<!-- hibernate -->		
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>5.2.17.Final</version>
		</dependency>
<!-- hibernate-c3p0包含c3p0 -->		
        <dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-c3p0</artifactId>
			<version>5.2.17.Final</version>
		</dependency>

改為:
<!-- hibernate-entitymanager 包含hibernate-->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>5.2.17.Final</version>
		</dependency>
<!-- c3p0 -->
		<dependency>
		    <groupId>com.mchange</groupId>
		    <artifactId>c3p0</artifactId>
		    <version>0.9.5.2</version>
		</dependency>

2、實體類使用JPA註釋對映

@Entity
@Table(name="t_user")
public class User {
	@Id
	@GeneratedValue(generator="hhibernate_uuid2")
	@GenericGenerator(name="hhibernate_uuid2",strategy="uuid2")
	private String id;
	private String username; 	//姓名
	private String sex; 		//性別
	@Temporal(TemporalType.DATE)
	private Date birthday; 		//出生日期
...
}

3、Spring配置檔案spring.xml,新增 packagesToScan

        刪除讀取 *.hbm.xml 的對映檔案 mappingLocations 屬性,新增自動掃描實體類 packagesToScan

<!-- orm對映檔案 *.hbm.xml  -->
<property name="mappingLocations" value="classpath:cn/jq/sshwebui/model/*.hbm.xml"></property>
	<!-- 2. 整合Hibernate, 配置Hibernate的Sessionfactory例項 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<!-- 資料來源 -->
		<property name="dataSource" ref="dataSource"></property>
		<!-- hibernate配置資訊 -->
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
			</props>
		</property>
		<!--自動掃描實體類 -->
                <property name="packagesToScan" value="cn.jq.sshweb.model."/>
	</bean>

配置hibernate的sessionFactory實體,使用jpa註解實體類整合SSH,到此完成。

 

二、補充 packagesToScan 路徑解析:

1、 <property name="packagesToScan" value="com.xxx.entity" />, 會解析成"classpath*:com/xxx/entity**/*.class",這個路徑可以找出com/xxx/entity根目錄下的類檔案 

<property name="packagesToScan" value="cn.jq.sshweb.model"/>

    親測:找出 cn.jq.sshweb.model 根目錄及其子孫目錄下所有的類檔案,model不能寫mod等

                      

2、 <property name="packagesToScan" value="com.xxx.entity.*" />, 會解析成"classpath*:com/xxx/entity/***/*.class",這個路徑可以找出com/xxx/entity根目錄下一級子目錄中的類檔案,如com/xxx/entity/son/Hi.class ,而不能找出com/xxx/entity目錄下的類檔案。

<property name="packagesToScan" value="cn.jq.sshweb.model.*"/>

親測:找出 cn.jq.sshweb.model 根目錄的下一級子目錄及其下一級目錄的子孫目錄所有的類檔案,



3、 <property name="packagesToScan" value="com.xxx.entity." />(注意最後的點) , 會轉換成"classpath*:com/xxx/entity/**/*.class",這個路徑可以找出com/xxx/entity根目錄下及其子孫目錄下所有的類檔案. 一般來講,這些就是我們要的檔案。

<property name="packagesToScan" value="cn.jq.sshweb.model."/>

親測:找出 cn.jq.sshweb.model 根目錄及其子孫目錄所有的類檔案,同1一樣建三個表

 

參考文章:SSH配置:Hibernate的packagesToScan路徑解析分析

https://blog.csdn.net/iteye_6233/article/details/82233851

本人親測和參考文章結果有點不一致,具體要檢視原始碼啦,本人學習階段功力不夠,看不太明白  ^-^。

PathMatchingResourcePatternResolver implements ResourcePatternResolver