石家庄停车位在线预约平台15

hibernate开发实例
环境搭建

    jar包
    在这里插入图片描述
    本文使用hibernate4.2.21,导入其中的required文件夹中的jar包


    核心配置文件

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Hibernate配置文件的DTD信息 -->
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- hibernate- configuration是连接配置文件的根元素 -->
<hibernate-configuration>
    <session-factory>
        <!-- 指定连接数据库所用的驱动 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定连接数据库的url,hibernate连接的数据库名 -->
        <property name="connection.url">jdbc:mysql://localhost/sql_test</property>
        <!-- 指定连接数据库的用户名 -->
        <property name="connection.username">root</property>
        <!-- 指定连接数据库的密码 -->
        <property name="connection.password">123456</property>

        <!-- 指定数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 根据需要自动创建数据表 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 显示Hibernate持久化操作所生成的SQL -->
        <property name="show_sql">true</property>
        <!-- 将SQL脚本进行格式化后再输出 -->
        <property name="hibernate.format_sql">true</property>

        <!-- 罗列所有的映射文件 -->
        <mapping resource="cn/edu/sicau/domain/User.hbm.xml"/>
        <mapping resource="cn/edu/sicau/domain/Role.hbm.xml"/>
        <mapping resource="cn/edu/sicau/domain/Teacher.hbm.xml"/>
        <mapping resource="cn/edu/sicau/domain/School.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

  
    一对多关系配置
    这里以学校(school)和老师(teacher)多为一对多关系案例配置。
    School.java

public class School {

    private int sid;
    private String sname;
    private String address;
    private Set<Teacher> teacherSet=new HashSet<>();

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Set<Teacher> getTeacherSet() {
        return teacherSet;
    }

    public void setTeacherSet(Set<Teacher> teacherHashSet) {
        this.teacherSet = teacherHashSet;
    }
}

  
Teacher.java

public class Teacher {

    private int tid;
    private String tname;
    private int tage;
    private School school;

    public int getTid() {
        return tid;
    }

    public void setTid(int tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public int  getTage() {
        return tage;
    }

    public void setTage(int tage) {
        this.tage = tage;
    }

    public School getSchool() {
        return school;
    }

    public void setSchool(School school) {
        this.school = school;
    }
}

 

School.hbm.xml
在学校对应的配置文件中,学校是一对多中的一方,使用< set />来配置,具体内容查看配置文件内容。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    
    <class name="cn.edu.sicau.domain.School" table="school">
        <!--学校id-->
        <id name="sid">
            <generator class="native"></generator>
        </id>
        <property name="sname"/>

        <property name="address"/>

        <!--学校与老师是一对多
            set中的name为school中teacher集合对象名称
            key column 对应的是school与teacher共同维护的外键的名称
        -->
        <set name="teacherSet" cascade="save-update">
            <key column="tsid"></key>
            <one-to-many class="cn.edu.sicau.domain.Teacher"/>
        </set>

    </class>
</hibernate-mapping>

 
Teacher.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="cn.edu.sicau.domain.Teacher" table="teacher">
        <id name="tid">
            <generator class="native"></generator>
        </id>
        <property name="tname"/>

        <property name="tage"/>

        <!--
            name 对应School对象的名称
            column="tsid" 为学校与老师两张表共同维护的外键名称
        -->
        <many-to-one name="school" class="cn.edu.sicau.domain.School" column="tsid"/>

    </class>
</hibernate-mapping>

  
测试类 test.java

public class test {

    /**
     * shcool-teacher 一对多
     */
    @Test
    public void oneToManyAdd(){

        //SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();

        Configuration configuration = new Configuration().configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .buildServiceRegistry();
        SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        try {

            School school=new School();
            school.setSname("计算机学校");
            school.setAddress("中国");

            Teacher teacher1=new Teacher();
            teacher1.setTname("张三");
            teacher1.setTage(23);

            Teacher teacher2=new Teacher();
            teacher2.setTname("李四");
            teacher2.setTage(25);

            school.getTeacherSet().add(teacher1);
            school.getTeacherSet().add(teacher2);
            //添加
            session.save(school);

            //提交事务
            transaction.commit();
        }catch (Exception e){
            //回滚事务
            transaction.rollback();
            e.printStackTrace();
        }finally {
            //关闭
            session.close();
            sessionFactory.close();
        }
    }
}

 
    多对多关系配置
    这里使用用户表(User)与角色表(Role)来举例,实体类已在HQL多表查询中给出。
    User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="cn.edu.sicau.domain.User" table="user">
        <id name="uid">
            <generator class="native"></generator>
        </id>
        <property name="uname"/>
        <property name="uage"/>
        <property name="usex"/>

        <!--
            name="roleSet" 对应在User类中,角色集合对象的名称
            table="user_role" User和Role表共同维护的第三张表的名称
            key column="userid" User表在第三张表中对应的外键的名称
            column="roleid" Role表在第三张表中对应的外键的名称
        -->
        <set name="roleSet" table="user_role">
            <key column="userid"></key>
            <many-to-many class="cn.edu.sicau.domain.Role" column="roleid"/>
        </set>

    </class>
</hibernate-mapping>

 

Role.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="cn.edu.sicau.domain.Role" table="role">
        <id name="rid">
            <generator class="native"></generator>
        </id>
        <property name="rname"/>

        <property name="authority"/>

        <!--
            name="userSet" 对应在User类中,角色集合对象的名称
            table="user_role" User和Role表共同维护的第三张表的名称
            key column="roleid" Role表在第三张表中对应的外键的名称
            column="userid" User表在第三张表中对应的外键的名称
        -->
        <set name="userSet" table="user_role" cascade="save-update">
            <key column="roleid"></key>
            <many-to-many class="cn.edu.sicau.domain.User" column="userid"/>
        </set>

    </class>
</hibernate-mapping>

 
测试类test.java

public class test {
    /**
     * user-role 多对多
     */
    @Test
    public void ManyToOneAdd(){
        //SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();

        Configuration configuration = new Configuration().configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .buildServiceRegistry();
        SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        

        try {
            User user1=new User();
            user1.setUname("张三");
            user1.setUsex("男");
            user1.setUage(23);

            User user2=new User();
            user2.setUname("李四");
            user2.setUsex("女");
            user2.setUage(20);

            User user3=new User();
            user3.setUname("王五");
            user3.setUsex("男");
            user3.setUage(25);

            Role role1=new Role();
            role1.setRname("管理员");
            role1.setAuthority(0);

            Role role2=new Role();
            role2.setRname("用户");
            role2.setAuthority(1);

            Role role3=new Role();
            role3.setRname("游客");
            role3.setAuthority(2);


            role1.getUserSet().add(user1);
            role1.getUserSet().add(user2);

            role2.getUserSet().add(user2);
            role2.getUserSet().add(user3);

            role3.getUserSet().add(user1);
            role3.getUserSet().add(user3);

            session.save(role1);
            session.save(role2);
            session.save(role3);

            transaction.commit();

        }catch (Exception e){
            transaction.rollback();
            e.printStackTrace();
        }finally {
            session.close();
            sessionFactory.close();
        }
    }

}

原文地址:https://www.cnblogs.com/xiaohaigege666/p/12381771.html