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