zoukankan      html  css  js  c++  java
  • 石家庄停车位在线预约平台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();
            }
        }

    }

  • 相关阅读:
    第九章、查找
    opencv- python使用
    opencv初入
    初入
    第四章、数学问题
    数据结构
    分享一个SQLSERVER脚本
    详解SQL语句的集合运算
    数据库权限分配探讨
    数据库分区分表以及读写分离
  • 原文地址:https://www.cnblogs.com/xiaohaigege666/p/12381771.html
Copyright © 2011-2022 走看看