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

猜你喜欢

转载自blog.csdn.net/qq_42402854/article/details/83475268