zoukankan      html  css  js  c++  java
  • Hibernate入门二

      学习一对多的关联关系映射并操作  


    一:关系表达

      1.表中的表达

      

      2.实体中的表达

        

    二:导包

    三:创建实体类

    package cn.itcast.domain;
    
    import java.util.Set;
    
    /**
    * @author 作者
    * @version 创建时间:2018年7月19日 下午3:38:12
    * 类说明:
    */
    public class Customer {
        private Long cust_id;
        private String cust_name;
        private String cust_source;
        private String cust_industry;
        private String cust_level;
        private String cust_phone;
        private String cust_mobile;
        private Set<LinkMan> linkmens;
        public Set<LinkMan> getLinkmens() {
            return linkmens;
        }
        public void setLinkmens(Set<LinkMan> linkmens) {
            this.linkmens = linkmens;
        }
        public Long getCust_id() {
            return cust_id;
        }
        public void setCust_id(Long cust_id) {
            this.cust_id = cust_id;
        }
        public String getCust_name() {
            return cust_name;
        }
        public void setCust_name(String cust_name) {
            this.cust_name = cust_name;
        }
        public String getCust_source() {
            return cust_source;
        }
        public void setCust_source(String cust_source) {
            this.cust_source = cust_source;
        }
        public String getCust_industry() {
            return cust_industry;
        }
        public void setCust_industry(String cust_industry) {
            this.cust_industry = cust_industry;
        }
        public String getCust_level() {
            return cust_level;
        }
        public void setCust_level(String cust_level) {
            this.cust_level = cust_level;
        }
        public String getCust_phone() {
            return cust_phone;
        }
        public void setCust_phone(String cust_phone) {
            this.cust_phone = cust_phone;
        }
        public String getCust_mobile() {
            return cust_mobile;
        }
        public void setCust_mobile(String cust_mobile) {
            this.cust_mobile = cust_mobile;
        }
        @Override
        public String toString() {
            return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + ", cust_source=" + cust_source
                    + ", cust_industry=" + cust_industry + ", cust_level=" + cust_level + ", cust_phone=" + cust_phone
                    + ", cust_mobile=" + cust_mobile + "]";
        }
        
    }
    Customer类
    package cn.itcast.domain;
    /**
    * @author 作者
    * @version 创建时间:2018年7月20日 下午3:38:58
    * 类说明:
    */
    public class LinkMan {
    /*
     * CREATE TABLE `cst_linkman` (
      `lkm_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '联系人编号(主键)',
      `lkm_name` varchar(16) DEFAULT NULL COMMENT '联系人姓名',
      `lkm_cust_id` bigint(32) NOT NULL COMMENT '客户id',
      `lkm_gender` char(1) DEFAULT NULL COMMENT '联系人性别',
      `lkm_phone` varchar(16) DEFAULT NULL COMMENT '联系人办公电话',
      `lkm_mobile` varchar(16) DEFAULT NULL COMMENT '联系人手机',
      `lkm_email` varchar(64) DEFAULT NULL COMMENT '联系人邮箱',
      `lkm_qq` varchar(16) DEFAULT NULL COMMENT '联系人qq',
      `lkm_position` varchar(16) DEFAULT NULL COMMENT '联系人职位',
      `lkm_memo` varchar(512) DEFAULT NULL COMMENT '联系人备注',
      PRIMARY KEY (`lkm_id`),
      KEY `FK_cst_linkman_lkm_cust_id` (`lkm_cust_id`),
      CONSTRAINT `FK_cst_linkman_lkm_cust_id` FOREIGN KEY (`lkm_cust_id`) REFERENCES `cst_customer` (`cust_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    
     */
        private Long lkm_id;
        private Character lkm_gender;
        
        private String lkm_name;
        private String lkm_phone;
        private String lkm_mobile;
        private String lkm_email;
        private String lkm_qq;
        private String lkm_position;
        private String lkm_memo;
        
        private Customer customer;
    
        public Long getLkm_id() {
            return lkm_id;
        }
    
        public void setLkm_id(Long lkm_id) {
            this.lkm_id = lkm_id;
        }
    
        public Character getLkm_gender() {
            return lkm_gender;
        }
    
        public void setLkm_gender(Character lkm_gender) {
            this.lkm_gender = lkm_gender;
        }
    
        public String getLkm_name() {
            return lkm_name;
        }
    
        public void setLkm_name(String lkm_name) {
            this.lkm_name = lkm_name;
        }
    
        public String getLkm_phone() {
            return lkm_phone;
        }
    
        public void setLkm_phone(String lkm_phone) {
            this.lkm_phone = lkm_phone;
        }
    
        public String getLkm_mobile() {
            return lkm_mobile;
        }
    
        public void setLkm_mobile(String lkm_mobile) {
            this.lkm_mobile = lkm_mobile;
        }
    
        public String getLkm_email() {
            return lkm_email;
        }
    
        public void setLkm_email(String lkm_email) {
            this.lkm_email = lkm_email;
        }
    
        public String getLkm_qq() {
            return lkm_qq;
        }
    
        public void setLkm_qq(String lkm_qq) {
            this.lkm_qq = lkm_qq;
        }
    
        public String getLkm_position() {
            return lkm_position;
        }
    
        public void setLkm_position(String lkm_position) {
            this.lkm_position = lkm_position;
        }
    
        public String getLkm_memo() {
            return lkm_memo;
        }
    
        public void setLkm_memo(String lkm_memo) {
            this.lkm_memo = lkm_memo;
        }
    
        public Customer getCustomer() {
            return customer;
        }
    
        public void setCustomer(Customer customer) {
            this.customer = customer;
        }
        
    }
    LinkMan类

    四:编写配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="cn.itcast.domain">
        <class name = "LinkMan" table = "cst_linkman">
        <id name = "lkm_id">
            <generator class="native"></generator>
        </id>
        <property name="lkm_gender" column="lkm_gender"></property>
        <property name="lkm_name" column="lkm_name"></property>
        <property name="lkm_phone" column="lkm_phone"></property>
        <property name="lkm_mobile" column="lkm_mobile"></property>
        <property name="lkm_email" column="lkm_email"></property>
        <property name="lkm_qq" column="lkm_qq"></property>
        <property name="lkm_position" column="lkm_position"></property>
        <property name="lkm_memo" column="lkm_memo"></property>
        <!-- name:引用属性名 column:外键列名 class:与我关联的完整类名
         -->
        <many-to-one name="customer" column="lkm_cust_id" class="Customer">
        </many-to-one>
        </class>
    </hibernate-mapping>
    LinkMan.hbm.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="cn.itcast.domain">
        <class name = "Customer" table = "cst_customer">
        <id name = "cust_id">
            <generator class="native"></generator>
        </id>
        <property name="cust_name" column="cust_name"></property>
        <property name="cust_source" column="cust_source"></property>
        <property name="cust_industry" column="cust_industry"></property>
        <property name="cust_level" column="cust_level"></property>
        <property name="cust_phone" column="cust_phone"></property>
        <property name="cust_mobile" column="cust_mobile"></property>
        
        <!-- 指定实体中集合属性名 -->
        <set name="linkmens">
            <!-- 指定外键的列名 -->
            <key column="lkm_cust_id"></key>
            <!-- 明确关系是一对多  Class指定当前配置文件的类与哪个类是一对多-->
            <one-to-many class="LinkMan"/>
        </set>
        </class>
    </hibernate-mapping>
    Customer.hbm.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
             <!-- 数据库驱动 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
             <!-- 数据库url -->
            <property name="hibernate.connection.url">jdbc:mysql:///crm_hibernate</property>
             <!-- 数据库连接用户名 -->
            <property name="hibernate.connection.username">root</property>
             <!-- 数据库连接密码 -->
            <property name="hibernate.connection.password">root</property>
            <!-- 数据库方言
                不同的数据库中,sql语法略有区别. 指定方言可以让hibernate框架在生成sql语句时.针对数据库的方言生成.
                sql99标准: DDL 定义语言  库表的增删改查
                          DCL 控制语言  事务 权限
                          DML 操纵语言  增删改查
                注意: MYSQL在选择方言时,请选择最短的方言.
             -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            
            
            <!-- #hibernate.show_sql true 
                 #hibernate.format_sql true
            -->
            <!-- 将hibernate生成的sql语句打印到控制台 -->
            <property name="hibernate.show_sql">true</property>
            <!-- 将hibernate生成的sql语句格式化(语法缩进) -->
            <property name="hibernate.format_sql">true</property>
            <!-- 
            ## auto schema export  自动导出表结构. 自动建表
            #hibernate.hbm2ddl.auto create        自动建表.每次框架运行都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使用)
            #hibernate.hbm2ddl.auto create-drop 自动建表.每次框架运行结束都会将所有表删除.(开发环境中测试使用)
            #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表.如果已经存在不会再生成.如果表有变动.自动更新表(不会删除任何数据).
            #hibernate.hbm2ddl.auto validate    校验.不自动生成表.每次启动会校验数据库中表是否正确.校验失败.
             -->
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!-- 引入orm元数据
                路径书写: 填写src下的路径
             -->
            <mapping resource="cn/itcast/domain/Customer.hbm.xml" />
            <mapping resource="cn/itcast/domain/LinkMan.hbm.xml" />
        </session-factory>
    </hibernate-configuration>
    hibernate.cfg.xml

    五:编写测试类

    package cn.itcast.one2many;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.junit.Test;
    
    import cn.itcast.domain.Customer;
    import cn.itcast.domain.LinkMan;
    import cn.itcast.utils.HibernateUtils;
    
    /**
    * @author 作者
    * @version 创建时间:2018年7月20日 下午4:28:54
    * 类说明:
    */
    public class TestRelationMap {
        @Test
        public void fun1() {
            //1.获取session
            Session session = HibernateUtils.openSession();
            //2.开启事务
            Transaction tx = session.beginTransaction();
            //3.操作
            Customer customer = new Customer();
            LinkMan linkman1 = new LinkMan();
            LinkMan linkman2 = new LinkMan();
            customer.setCust_name("XX公司");
            linkman1.setLkm_name("张三");
            linkman1.setLkm_name("李四");
            
            customer.getLinkmens().add(linkman1);
            customer.getLinkmens().add(linkman2);
            linkman1.setCustomer(customer);
            linkman2.setCustomer(customer);
            
            session.save(customer);
            session.save(linkman1);
            session.save(linkman2);
            //4.提交事务 关闭资源
            tx.commit();
            session.close();
        }
    }
    测试类
  • 相关阅读:
    springboot2 整合redis
    springboot2 整合mongodb
    Springboot2 Vue 前后端分离 整合打包 docker镜像
    nginx常见问题总结
    nginx配置中root和alias的区别
    nginx高级用法
    nginx搭建代理服务器与负载均衡器
    nginx常规扩展功能
    nginx典型官方模块解释
    nginx默认配置文件解释
  • 原文地址:https://www.cnblogs.com/chiwang/p/9342494.html
Copyright © 2011-2022 走看看