发表于: 2017-11-10 22:05:57

1 719


一.今天完成的主要事情

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整合

五,项目进度情况

暂时没有太多的事情做,所以继续学习基础知识把


返回列表 返回列表
评论

    分享到