上篇文章: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