Hibernate

乐正晟
2023-12-01

关于Hibernate,你了解多少?搜索了hibernate常见的面试题,总结如下:

hibernate和mybatis的区别:

     答:1.hibernate是全自动,mybatis是半自动(hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理)。

            2.hibernate数据库的移植性远大于mybatis(hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高)

           3.hibernate拥有完整的日志系统

           4.SQL优化,mybatis比hibernate方便

hibernate是ORM框架,ORM是什么?

       答:ORM(Object Relational Mapping)对象关系映射,实现面向对象编程语言里不同类型系统的数据之间的转换,用来把对象模型表示的对象映射到基于S Q L 的关系模型数据库结构中去。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQ L 语句打交道,只需简单的操作实体对象的属性和方法。

hibernate根据配置自动建表

新建一个maven项目

配置pom.xml

    <!-- hibernate核心 -->
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.4.0.Final</version>
    </dependency>

    <!-- mysql -->
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    
    <!-- log4j -->
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.11.1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
    <dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.11.1</version>
    </dependency>

pojo包的Student.java

package com.pojo;

public class Student {
	private int id;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.xh = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	private String name;
	private int age;
}

映射文件student.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
     <!-- 描述类和表的关系 写类和表的映射 主键的映射 其他字段的映射-->
     <class name="com.pojo.Student"  table="student">
           <!-- 主键 -->
           <id name="id"  column="id">
                 <!-- 主键自增 -->
                 <generator class="native"></generator>
           </id>
           <!-- 表名字段名不规范命名加 ` -->
           <!-- 其他字段 -->
           <property name="name"  column="name"  length="10" ></property>
           <!-- name是属性  column是字段名 -->
           <property name="age" column="age"></property>
     </class>
</hibernate-mapping>

总的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="connection.url">jdbc:mysql://127.0.0.1:3306/simi</property>
	<property name="connection.username">root</property>
	<property name="connection.password">123456</property>
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
        <!-- 自动根据配置生成表   MySQLInnoDBDialect 加5有关MySQL的版本 -->
	<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <!-- show_sql显示SQL语句  format_sql格式化SQL语句 -->
	<property name="show_sql">true</property>
	<property name="format_sql">true</property>
	
	<mapping  resource="com/pojo/student.hbm.xml"/>
</session-factory>
</hibernate-configuration>

现在测试自动生成表TestCreateStudent.java

public class TestCreateStudent {

	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);

	}

}

 

 类似资料: