发表于: 2017-11-10 22:05:57
1 718
一.今天完成的主要事情
1.继续学习Hibernate框架,尝试用注解实现POJO对象和数据库表映射
Hibernate注解的目的是简化XXX.hbm.xml的配置,使用了注解,就不用在项目中配置XXX.hbm.xml
Hibernate注解主要分为两种,类注解和属性注解
类注解主要是和数据库表对应,而属性注解主要和数据库表中列产生对应
类注解有:@Entity,标识该类和数据库表产生映射,@Table,标识该类对应的数据库表
属性注解比较多,
@Id注解,标识出数据表中的主键
@Version注解,表示为该属性加乐观锁
@Column注解,表示该属性对应数据库表中的一个字段
@Transient注解,暂态属性注解,明确指示该属性不对应数据库表中的字段
其他的还有一对多,多对一,一对一,多对多注解,自己理解的不深刻,就不多说了,后续再继续深入学习吧
Hibernate注解类代码如下:
//标识该类为Hibernate映射实体类
@Entity
//标识该类映射的数据库表为demo表
@Table(name="demo")
public class User {
private Long id;
private String username;
private String cellphone;
//标识该属性为主键属性
@Id
//定义主键生成策略,AUTO表示根据底层数据库自主选择
@GeneratedValue(strategy= GenerationType.AUTO)
@Column(name = "id")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "username")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "cellphone")
public String getCellphone() {
return cellphone;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
2.将Hibernate和spring整合在一起
spring和Hibernate整合主要目的
一是通过springIOC来管理Hibernate的SessionFactory
二是用spring管理事务
使用了spring,我们就可以在项目中不再使用hibernate.cfg.xml配置文件,又可以少配置一个文件
spring整合Hibernate不必多说,和整合Mybatis差不太多
首先是项目目录结构
User类中就是上面展示出来的model
UserService接口提供基本的增删改查的方法
UserServiceImpl是Service接口的实现类,具体实现了增删改查的功能
代码如下
使用了spring注解配置
然后是application-context.xml的配置文件
扫描指定的包
<context:component-scan base-package="com.ptteng.hibernate.spring.demo.serviceImpl"></context:component-scan>
<!-- 加載配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:db.properties</value>
</list>
</property>
</bean>
<!-- 創建Hibernate的sqlSessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<!--数据库链接驱动-->
<prop key="hibernate.connection.driver_class">
com.mysql.cj.jdbc.Driver
</prop>
<!-- 数据库链接URL -->
<prop key="hibernate.connection.url">
jdbc:mysql://localhost:3306/student?serverTimezone=UTC
</prop>
<!--数据库用户名,密码-->
<prop key="hibernate.connection.username">
root
</prop>
<prop key="hibernate.connection.password">
123456789
</prop>
<!--c3p0数据库链接池配置-->
<prop key="c3p0.max_size">100</prop>
<prop key="c3p0.min_size">10</prop>
<prop key="c3p0.acquire_increment">10</prop>
<prop key="c3p0.max_statements">5</prop>
<prop key="c3p0.idle_test_period">60</prop>
<!--使用Hibernate方言-->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!--打印sql-->
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!--自动提交事务-->
<prop key="hibernate.connection.autocommit">true</prop>
</props>
</property>
<!--因为使用注解的配置方式,没有User.hbm.xml文件,所以要再属性中标明去具体哪个包中寻找Hibernate注解-->
<property name="packagesToScan">
<list>
<value>com.ptteng.hibernate.spring.demo.model</value>
</list>
</property>
</bean>
这个配置中没有用到事务,因为事务比较复杂,还需要后续再继续学习
二.明天的计划
1.总结梳理老大讲的关于敏捷开发的live,整理成一个全面系统的资料
2.如果有时间,尝试Hibernate的Query和Criteria查询方法
三,遇到的问题
今天整合spring和Hibernate时遇到一个问题,
这个问题是如果用spring直接配置c3p0的dataSource数据源,然后将配置好的数据源注入到Hibernate的sessionFactory中时,事务是无法提交的,运行测试,打印的结果显示操作成功,但是数据库中却看不到改变,但是如果直接在Hibernate中配置c3p0数据源,就没有这个问题,所以肯定是spring,Hibernate,c3p0之间某一个存在问题,但是在网上找了很久也没有找到解决方式,以后随着学习的深入再想办法解决把
四.收获
Hibernate的注解的使用以及spring和Hibernate整合
五,项目进度情况
暂时没有太多的事情做,所以继续学习基础知识把
评论