zoukankan      html  css  js  c++  java
  • Java

      本程序运行环境:IDEA。

      实际上我对hiberbate与注解的关系还不是太清晰。据我所知注解都是Java JPA的,那么我的理解是:hibernate就应该只是通过这些JPA标识及hibernate xml配置文件连接数据库并建立对象映射关系。。。也就是说hibernate干的事可能只是自动操作数据库,而注解并不是hibernate中的。貌似看网上一些博客没怎么提hibernate框架与注解的关系...当然,也是我自己看的资料太乱而不全面、系统,所以才没弄清hibernate框架与注解之间的关系。

      编写hibernate.cfg.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    
            <!-- 设置数据库的连接 -->
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?useSSL=false&useUnicode=true&characterEncoding=UTF-8</property>
    
            <property name="hibernate.connection.username">root</property>
    
            <property name="hibernate.connection.password">******</property>
    
            <!-- 数据库的方言:根据底层的数据库生成不同的SQL -->
            <property  name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    
            <!-- 配置显示SQL -->
            <property name="hibernate.show_sql">true</property>
    
            <!-- 配置格式化SQL -->
            <property name="hibernate.format_sql">true</property>
    
            <property name="hibernate.hbm2ddl.auto">update</property>
    
            <property name="hibernate.current_session_context_class">thread</property>
    
            <mapping class="onetoone.IDCard"/>
            <mapping class="onetoone.Students"/>
    
        </session-factory>
    
    </hibernate-configuration>
    

      注意到:

    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?useSSL=false&useUnicode=true&characterEncoding=UTF-8</property>
    

      该标签中结构为:jdbc:mysql://主机地址/数据库名称/取消SSL验证&Unicode编码&utf-8编码。

      加上useSSL=false可以解除掉验证警告。

      ps:记得将新建的实体类添加到配置文件的mapping标签中。

      首先是一对一单向外键:

      主键在Students类中:

    package onetoone;
    
    
    import javax.persistence.*;
    
    @Entity
    public class Students {
    
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column
        private int id;
        @Column
        private String sex;
        @OneToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "sid", unique = true)
        private IDCard idCard;
    
        public Students() {
    
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public IDCard getIdCard() {
            return idCard;
        }
    
        public void setIdCard(IDCard idCard) {
            this.idCard = idCard;
        }
    
        public Students(String sex, IDCard idCard) {
            this.sex = sex;
            this.idCard = idCard;
        }
    
    }
    

      主键即@Id下对应的类成员变量id,设置为自动增长。

      外键在IDCard中:

    package onetoone;
    
    import org.hibernate.annotations.GenericGenerator;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class IDCard {
    
        @Id
        @GeneratedValue(generator = "sid")
        @GenericGenerator(name = "sid", strategy = "assigned")
        @Column(length = 6)
        private int sid;
        @Column
        private String name;
        @Column
        private String school;
        @Column
        private String address;
    
        public IDCard() {
    
        }
    
        public IDCard(int sid, String name, String school, String address) {
            this.sid = sid;
            this.name = name;
            this.school = school;
            this.address = address;
        }
    
        public int getSID() {
            return sid;
        }
    
        public void setSID(int sid) {
            this.sid = sid;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSchool() {
            return school;
        }
    
        public void setSchool(String school) {
            this.school = school;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }
    

      外键即@Id下的类成员sid,设置为手动设置。

      单元测试:

    package main;
    
    import org.hibernate.boot.Metadata;
    import org.hibernate.boot.MetadataSources;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    import org.hibernate.tool.schema.TargetType;
    
    import java.util.EnumSet;
    
    public class Main {
        public static void main(String[] args) {
            ServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
            Metadata metadata = new MetadataSources(registry).buildMetadata();
            SchemaExport export = new SchemaExport();
            export.create(EnumSet.of(TargetType.DATABASE),metadata);
        }
    }
    

      测试结果使用navicat查看:

      idcard:

      students:

      外键:

       一些需要用到的hibernate核心jar包:

      参考资料:

          1.https://blog.csdn.net/fengyao1995/article/details/75073151

          2.https://blog.csdn.net/qq_15571649/article/details/54866254

          3.https://www.imooc.com/learn/524

  • 相关阅读:
    第四章的知识点:
    第一章的知识点:
    13
    12
    11
    10
    9
    zy
    金嘉琪 作业
    1022作业
  • 原文地址:https://www.cnblogs.com/darkchii/p/8696198.html
Copyright © 2011-2022 走看看