2021-5-13讲课内容hibernate主键id映射_XML方式

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 概述项目结构Student类hibernate.cfg.xmllog4j.propertiesStudent.hbm.xmlStudentTest类理论常用的五种方式1. increment:2. identity主键自增3.sequence 序列4. native5. uuid

概述


代码和博客 略有不同,但是大体上是一样的


项目结构


20210513140134550.png


Student类


package cn.edu.ldu.entity;
public class Student {
    // private int id;
    private String id;
    private String name;
    //必须要有一个无参的构造方法
    //如果写了一个有参构造,必须要有一个午餐的构造方法写出来
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}


hibernate.cfg.xml


<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="url">
      jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC
    </property>
<!--    ?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC-->
    <property name="driverClassName"> com.mysql.cj.jdbc.Driver </property>
    <property name="username">root</property><!--connection.-->
    <property name="password">123456</property>
    <!-- DB schema will be updated if needed -->
    <property name="connection.provider_class">
      com.alibaba.druid.support.hibernate.DruidConnectionProvider </property>
    <property name="filters">stat</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">create</property>
    <property name="hibernate.hibernate.hbm2ddl.auto">update</property>
    <!--    进行修改-->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!--    加入映射-->
    <mapping resource="Student.hbm.xml"></mapping>
  </session-factory>
</hibernate-configuration>


log4j.properties


<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="url">
      jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC
    </property>
<!--    ?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC-->
    <property name="driverClassName"> com.mysql.cj.jdbc.Driver </property>
    <property name="username">root</property><!--connection.-->
    <property name="password">123456</property>
    <!-- DB schema will be updated if needed -->
    <property name="connection.provider_class">
      com.alibaba.druid.support.hibernate.DruidConnectionProvider </property>
    <property name="filters">stat</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">create</property>
    <property name="hibernate.hibernate.hbm2ddl.auto">update</property>
    <!--    进行修改-->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!--    加入映射-->
    <mapping resource="Student.hbm.xml"></mapping>
  </session-factory>
</hibernate-configuration>


Student.hbm.xml


<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="url">
      jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC
    </property>
<!--    ?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC-->
    <property name="driverClassName"> com.mysql.cj.jdbc.Driver </property>
    <property name="username">root</property><!--connection.-->
    <property name="password">123456</property>
    <!-- DB schema will be updated if needed -->
    <property name="connection.provider_class">
      com.alibaba.druid.support.hibernate.DruidConnectionProvider </property>
    <property name="filters">stat</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">create</property>
    <property name="hibernate.hibernate.hbm2ddl.auto">update</property>
    <!--    进行修改-->
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!--    加入映射-->
    <mapping resource="Student.hbm.xml"></mapping>
  </session-factory>
</hibernate-configuration>


StudentTest类


package cn.edu.ldu.entity;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.jupiter.api.Test;
public class StudentTest {
    public static void main(String[] args) {
        Configuration config = new Configuration().configure("/hibernate.cfg.xml");
        SessionFactory sessionFactory = config.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Student student = new Student();
        student.setName("PushyTao");
        session.beginTransaction(); //完整性一致性
        session.save(student);
        session.getTransaction().commit(); //提交
        session.close();
        sessionFactory.close();
    }
    /*@Before
    public void testJunit(){
        System.out.println("before");
    }
    @Test
    public void testInsert(){
        System.out.println("test the insert");
    }
    @After
    public void testUpdate(){
        System.out.println("after");
    }*/
}


理论


常用的五种方式


20210513140703560.png


1. increment:


20210513140847161.png20210513140914815.png


2. identity主键自增


20210513140940610.png


3.sequence 序列


20210513141005850.png


4. native


20210513141023105.png


5. uuid


20210513141043760.png

20210513141054876.png


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
XML 关系型数据库 MySQL
【Mysql】有关数据库中一对多/一对一,多对一xml中文件映射问题
【Mysql】有关数据库中一对多/一对一,多对一xml中文件映射问题
112 0
|
5月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
443 5
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
252 4
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
487 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
Java 数据库连接 数据库
AI 时代风起云涌,Hibernate 实体映射引领数据库高效之路,最佳实践与陷阱全解析!
【8月更文挑战第31天】Hibernate 是一款强大的 Java 持久化框架,可将 Java 对象映射到关系数据库表中。本文通过代码示例详细介绍了 Hibernate 实体映射的最佳实践,包括合理使用关联映射(如 `@OneToMany` 和 `@ManyToOne`)以及正确处理继承关系(如单表继承)。此外,还探讨了常见陷阱,例如循环依赖可能导致的无限递归问题,并提供了使用 `@JsonIgnore` 等注解来避免此类问题的方法。通过遵循这些最佳实践,可以显著提升开发效率和数据库操作性能。
210 0
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
164 0
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
212 3
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
175 3
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate