一个优秀的ORM框架
说白了orm就是对表里面列的操作转化为对对象的操作;
架构图
ORM框架就是对JDBC的封装
hibernate实操
项目结构基本上是这样
这样运行的话 他会报一个错: 说*.hbm.xml找不到,原因是 maven项目是由maven编译的 他会把resource目录下的文件都放到编译后的target.classes目录下,但是java目录下的就不会放进去,所以就没找到了,这个时候需要在maven的pom下配置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
加了之后就能够把这个也放进去,
News.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="Bean">
<class name="News" table="news">
<id name="id">
<column name="id"/>
<!-- 主键生成策略(手动生成) -->
<generator class="native"></generator>
</id>
<property name="title" type="java.lang.String">
<column name="N_TITLE"/>
</property>
<property name="author" type="java.lang.String">
<column name="N_AUTHOR"/>
</property>
<property name="date" type="java.sql.Date">
<column name="N_DATE"/>
</property>
</class>
</hibernate-mapping>
下面编写测试类
package org.example;
import static org.junit.Assert.assertTrue;
import Bean.News;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test;
import java.sql.Date;
/**
* Unit test for simple App.
*/
public class AppTest {
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue() {
// 1.创建一个SessionFactory对象
SessionFactory sessionFactory = null;
// 1.1 创建一个Configuration对象 对应hibernate的基本配置信息和对象关系映射信息
// configure(); 里面不写参数的话默认加载的就是hibernate的默认配置文件
Configuration configuration = new Configuration().configure();
// 1.2 hibernate 的任何配置和服务都需要在该对象中注册后才能生效
configuration.addClass(News.class);
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
// 1.3
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
// 2.创建一个Session 对象
Session session = sessionFactory.openSession();
// 3.开启事务
Transaction transaction = session.beginTransaction();
// 4.执行保存操作
News news = new News(1,"Java", "ATGUIGU", new Date(new java.util.Date().getTime()));
session.save(news); //执行保存操作
// News news = session.get(News.class,1); //查询操作
// 5.提交事务
transaction.commit();
// 6.关闭Session
session.close();
// 7.关闭SessionFactory对象
sessionFactory.close();
}
}
hibernate配置文件
<?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>
<!-- mysql账户名 -->
<property name="connection.username">root</property>
<!-- mysql密码 -->
<property name="connection.password">123123</property>
<!-- mysql驱动 -->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<!-- mysql连接URL -->
<property name="connection.url">
<![CDATA[jdbc:mysql://127.0.0.1:3306/hibernate?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT]]></property>
<!--jdbc:mysql://121.36.36.156:3306/Hibernate?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8-->
<!-- 配置hibernate 基本信息-->
<!-- 数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 显示sql语句 执行SQL时候是否在控制台打印SQL语句 -->
<property name="show_sql">true</property>
<!-- 格式化sql语句 -->
<property name="format_sql">true</property>
<!-- 根据需要创建数据库 -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定关联的 .hbm.xml文件-->
<!-- <mapping class="Bean.News"/>-->
<mapping resource="Bean/News.hbm.xml"/>
</session-factory>
</hibernate-configuration>
需要的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.9.Final</version>
</dependency>