手记

hibernate学习笔记(2)

主要内容:
1.hibernate中 单向一对多关联关系
题外话:
多对一和一对多,本质是一回事。不同的角度而已

一、在数据库里建表
1.建立student表,项目有,id,name,sex,gid。其中把id设为主键,但不设立自增长
2.建立grade表,项目有,gid,gname,gdesc。其中把gid设为主键,但不设立自增长
3.在多方,也就是student表里,建立与grade表的gid的外键关系

二、写持久化类
新建grade.java和student.java两个类
1.序列化
implements Serializable接口,获取序列号
2.添加私有化的id、name等变量,并实现setget方法

三、给各持久化类生成映射文件
用hibernate工具生成下面两个映射文件
Grade.hbm.xml
Student.hbm.xml

具体如下,注意配置:

Grade.hbm.xml

<hibernate-mapping>
    <class name="com.yang.one2many.Grade" table="GRADE">
        <id name="gid" type="int">
            <column name="GID" />
            <generator class="increment" />
        </id>
        <property name="gname" type="java.lang.String">
            <column name="GNAME" />
        </property>
        <property name="gdesc" type="java.lang.String">
            <column name="GDESC" />
        </property>

        <!-- 在一方配置一对多关联关系-->
        <set name="student" table="student">
            <key column="gid"></key>
            <one-to-many class="com.yang.one2many.Student"/>
        </set>
    </class>
</hibernate-mapping>

Student.hbm.xml

<hibernate-mapping>
    <class name="com.yang.one2many.Student" table="STUDENT">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="increment" />
        </id>
        <property name="sex" type="java.lang.String">
            <column name="SEX" />
        </property>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>

    </class>
</hibernate-mapping>

四、配置hibernate.cfg.xml
这个文件在第二步配置也可以。最重要的是配置上面建好的两个映射文件

<hibernate-configuration>
    <session-factory>
         <!-- 数据库用户名-->
       <property name="connection.username">root</property>
        <!-- 数据库密码-->
       <property name="connection.password">root</property>
        <!--mysql的驱动下载 -->
       <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <!--指定数据库名。我创建的是testmysql。后面指定了字符编码,防止数据出现乱码 -->
       <property name="connection.url">jdbc:mysql:///one2many?userUnicode=true&amp;characterEncoding=UTF-8</property>

       <!-- 数据库方言-->
       <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
       <!-- 在控制台显示sql语句-->
       <property name="show_sql">true</property>
       <!-- 指定自动更新数据表。也可以配置create:这是自动生成,会覆盖原来数据-->
       <property name="hbm.2ddl.auto">update</property>
       <!--
       <property name="format_sql">true</property>
        -->

        <!-- 配置映射文件 -->
        <mapping resource="com/yang/one2many/Grade.hbm.xml" />
        <mapping resource="com/yang/one2many/Student.hbm.xml" />

    </session-factory>
</hibernate-configuration>

五、写个测试类来验证一下
写测试类之前,因为session会经常被调用,为了以后调用方便,所以先写个工具类。
HibernateUtil.java

public class HibernateUtil {
    private static SessionFactory sessionFactory;
    private static Session session;
    static{
        // 创建配置对象
        Configuration configure = new Configuration().configure();
        // 创建服务注册对象
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configure.getProperties())
                .buildServiceRegistry();
        // 创建会话工厂
        sessionFactory = configure.buildSessionFactory(serviceRegistry);
    }
    public static Session getSession(){
        // 会话对象
        session = sessionFactory.openSession();
        return session; 
    }
    public static void closeSession(){
        if (session.isOpen() || session!=null) {
            session.close();
        }
    }
}

然后写测试类
创建一个班级和两个学生,看看能不能插入到数据库中。结果OK
Test.java

public class Test {

    public static void main(String[] args) {
        Test t=new Test();
        t.add();

    }
    public void add(){
        Grade grade=new Grade("java一班","优秀班级");
        Student stu1=new Student("杨洋","男");
        Student stu2=new Student("李丽","女");
        grade.getStudent().add(stu1);
        grade.getStudent().add(stu2);

        Session session = HibernateUtil.getSession();
        Transaction transaction = session.beginTransaction();
        session.save(grade);
        session.save(stu1);
        session.save(stu2);
        transaction.commit();
        HibernateUtil.closeSession();

    }
}
4人推荐
随时随地看视频
慕课网APP