1.orm思想
orm思想为对象关系映射*
1>让实体类和数据库表进行一一对应关系
对jdbc的封装
1>让实体类和数据库表进行一一对应关系
对jdbc的封装
实体类与数据库表对应
实体类属性和表里字段对应
2>不需要直接操作数据库表,而操作表对应实体类对象
2.配置实体类和数据库表一一对应关系<映射关系>
使用配置文件实现映射关系
2.HelloWorld
2.1倒入相关依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.10.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
2.2配置hibernate.cfg.xml
核心配置: session-factory
SessionFactory:针对单个数据库映射编译的内存镜像文件,将数据库转换成为Java可识别的镜像文件。
构建sessionFactory非常耗费资源,所以通常一个工程只需要创建一个
基本配置如下(resource: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>
</session-factory>
</hibernate-configuration>
xml配置有先后顺序
配置<session-factory>(//后的注解都应删除)
<session-factory>
<!-- 数据源配置-->
<property name="connection.username">root</property>//用户名
<property name="connection.password">xiuluoA1</property>//数据库密码
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>//连接驱动
<property name="connection.url">jdbc:mysql://localhost:3306/First?serverTimezone=UTC&useSSL=false</property>//url地址
<!-- C3P0 数据库连接池-->
<property name="hibernate.c3p0.acquire_increment">10</property>//连接池扩容时自增的数量
<property name="hibernate.c3p0.idle_test_period">1000</property>//设置失效时间(以秒为单位)
<property name="hibernate.c3p0.timeout">5000</property>//设置超时时间
<property name="hibernate.c3p0.max_size">30</property>//最大连接数
<property name="hibernate.c3p0.min_size">5</property>//最小连接数
<property name="hibernate.c3p0.max_statements">10</property>//设置执行sql语句对象的最大数
<!-- 数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>//规定生成sql为mysql语句
<property name="show_sql">true</property>//打印sql语句
<property name="format_sql">true</property>//格式化sql语句
<!-- 生成数据表-->
<!-- <property name="hibernate.hbm2ddl.auto"></property>//是否自动生成数据库表-->
</session-factory>
2.3创建实体类:
import lombok.Data;
@Data
public class User {
private int id;
private String timeflag;
}
2.4创建实体关系映射文件(User.hbt.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate -//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.example.demo.pojo.User">
<id name="id" column="id" type="int" >
<!-- <column name="id"></column>//表里的字段-->
<!-- <generator class="identity"/>//主键自增-->
</id>
<property name="timeflag" type="java.lang.String">
<column name="timeflag"></column>
</property>
</class>
</hibernate-mapping>
2.4实体关系映射文件注册到Hibernate的配置文件中(hibernate.cfg.xml)
<mapping resource="com/example/demo/pojo/User.hbt.xml"></mapping>
3.1 使用 hibernateAPI操作数据库
test测试
public class Test {
public static void main(String[] args) {
//创建Configuration(该configuration应选取hibernate包下)
Configuration configuration=new Configuration().configure();
//获取SessionFactory
SessionFactory sessionFactory =configuration.buildSessionFactory();
//获取Sessiond对象
Session session =sessionFactory.openSession();
User user =new User();
user.setTimeflag((String.valueOf(System.currentTimeMillis())));
session.save(user);
session.beginTransaction().commit();
session.close();
}
}
3.应用新建一张表并插入10条数据
3.1 pom.xml(相关依赖以及过滤器)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.10.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<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>
</project>
3.2 hibernate.cfg.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="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">xiuluoA1</property>
<property name="connection.url">jdbc:mysql://localhost:3306/First?serverTimezone=UTC&useSSL=false</property>
<!-- 数据库方言 -->
<!--方言这里出现问题,原为 MySQLDialect,运行后出现sql语法错误-->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- 生成数据表-->
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- 注册mapping-->
<mapping resource="com/example/demo/pojo/User.hbt.xml"/>
</session-factory>
</hibernate-configuration>
这里要了解生成数据表的每种参数代表的实际运行操作<property name="hibernate.hbm2ddl.auto">create</property>
3.3 User.java
package com.example.demo.pojo;
import lombok.Data;
@Data//在实体类上添加@Data注解,可以省去代码中大量的 get()、 set()、 toString() 等方法,提高代码的简洁:为类提供读写功能,从而不用写get、set方法。
//使得注解生效需要倒入依赖,同时下载lombok插件
public class User {
private int id;
private String timeflag;
}
3.4 User.hbt.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate -//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.example.demo.pojo.User" table="test1">
<id name="id" column="id" type="int" >
<generator class="increment"/>
</id>
<property name="timeflag" type="java.lang.String">
<column name="text"></column>
</property>
</class>
</hibernate-mapping>
3.5 test.java
package com.example.demo.test;
import com.example.demo.pojo.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import java.sql.Date;
public class Test {
public static void main(String[] args) {
//创建Configuration(该configuration应选取hibernate包下)
Configuration configuration=new Configuration().configure();
//获取SessionFactory
SessionFactory sessionFactory =configuration.buildSessionFactory();
//获取Sessiond对象
Session session =sessionFactory.openSession();
for (int i=0;i<10;i++){
User user =new User();
user.setTimeflag((String.valueOf(System.currentTimeMillis())));
session.save(user);}
session.beginTransaction().commit();
session.close();
}
}
3.6包结构

4.Hibernate HQL(未完待续)
4.1基本概述
HQL: Hbernate Query Language 是Hibernate 框架提供的一种查询机制,与sql类似。
HQL是面向对象的查询语句,让开发者以面向对象的思想编写查询语句,是种对JAVA很友好的方式。
不参与数据库的直接交互,属于中间语言:Java-->HQL-->Hibernate-->SQL-->DB
HQL只能查询修改删除不能新增
浙公网安备 33010602011771号