Hibernate5随手记

Hibernate的使用

pom.xml

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>01-Hibernate</groupId>
<artifactId>01-Hibernate</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>01-Hibernate</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</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.10</version>
</dependency>
</dependencies>

<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>

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-factroy>
<!--数据源-->
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8</property>
<!-- C3P0 -->
<property name="hibernate.c3p0.acquire_increment">10</property>
<property name="hibernate.c3p0.idle_test_period">10000</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>
<!-- 数据库⽅⾔ -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 打印SQL -->
<property name="show_sql">true</property>
<!-- 格式化SQL -->
<property name="format_sql">true</property>
<!-- 是否⾃动⽣成数据库 -->
<property name="hibernate.hbm2ddl.auto"></property>
</session-factroy>

<!-- 注册实体关系映射⽂件 -->
<mapping resource="com/southwind/entity/People.hbm.xml"></mapping>
</hibernate-configuration>


People数据库:

integer id;  String name;  Duoble money;

People.class

package com.southwind.entity; import lombok.Data; @Data public class People { private Integer id; private String name; private Double money; }

People.hbl.xml 

<?xml version="1.0"?>
<!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.southwind.entity.People" table="people">
<id name="id" type="java.lang.Integer">
<column name="id"></column>
<generator class="identity"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name"></column>
</property>
<property name="money" type="java.lang.Double">
<column name="money"></column>
</property>
</class>
</hibernate-mapping>

2.级联关系

2.1一对多

Customer(主表)

/*数据库中只有*id name 和一个外键 CID*/

public class Customer { private Integer id; private String name; private Set orders; }

<set name="orders" table="orders">

  <key column="cid"></key>

  <one-to-many class="com.kun.entitys.Orders"></one-to-many>

</set>

Orders(从表)数据库中只有 id,name,cid(外键)

public class Orders { private Integer id; private String name; private Customer customer; }

<many-to-one> name="customer" class="com.kun.entitys.Customer" column="cid"></many-to-one>

 

test

//创建 Customer

Customer customer = new Customer();   customer.setName("张三");

//创建 Orders

Orders orders = new Orders();  orders.setName("订单1");

//建⽴关联关系   orders.setCustomer(customer);

//保存    session.save(customer); session.save(orders);

//提交事务  session.beginTransaction().commit();

2.2多对多 需要三张表,其中一张是映射关系表

account_course表  id,cid,aid

Course 

public class Course { private Integer id; private String name; private Set accounts; }

<set name="courses" table="account_course">

  <key column="cid"></key>

  <many-to-many class="com.kun.entitys.Account" column="aid">

</many-to-many></set>

Account 

public class Account { private Integer id; private String name; private Set courses; }

<set name="courses" table="account_course">

  <key column="aid"></key>

  <many-to-many class="com.kun.entitys.Course" column="cid">

</many-to-many></set>


 

HQL 是面向对象的查询语言,而 SQL 是面向二维表的查询语言

Query 接口

使用 Session 对象的 createQuery 方法可获取 Query 对象。 Query query = session.createQuery(hql);

3.1.2 SQLQuery 接口

Hibernate 进行 SQL 原生查询的接口,支持动态绑定参数的功能,是 Query 接口的子接口

使用 Session 对象的 createSQLQuery()方法可获取 SQLQuery 对象。SQLQuery sqlQuery = session.createSQLQuery(sql);

其查询出的结果对象默认为 Object,当然,若结果为 List,则其元素为 Object。

使用 SQLQuery 的 addEntity(Xxx.class)方法,可以将其结果泛型设定为指定类型。

3.1.3 Criteria 接口

Criteria,标准、准则,Hibernate 进行 Criteria 查询的接口,与 Query 接口无关。

使用 Session 对象的 createCriteria()方法可获取 Criteria 对象。

Criteria criteria = session.createCriteria(Xxx.class);

 


 

(1)SQL 查询

String sql = "select * from 表名";

List<Student> students = session.CreatSQLQuery(sql).addEntity(Student.class).list();

(2)HQL 查询

String sql = " from 表名";

List<Student> students = session.CreatQuery(sql).list();

(3)QBC 查询

List<Student> students = session.creatCriteria(Student.class).list();


 

分页

(1)SQL 查询

String sql = "select * from 表名 limit ?,?";

List<Student> students = session.CreatSQLQuery(sql).addEntity(Student.class)

.setParamer(0,3)

.setParamer(1,5)

.list();

(2)HQL 查询

String sql = " from 表名";

.List<Student> students = session.CreatQuery(sql)

.setFirstResult(3)

.setMaxResult(5)

.list();

(3)QBC 查询

List<Student> students = session.creatCriteria(Student.class)

.setFirstResult(3)

.setMaxResult(5)

.list();


模糊查询

(1)SQL 查询

String sql = "select * from 表名 while sname like :tname";

List<Student> students = session.CreatSQLQuery(sql).addEntity(Student.class)

.setParamer("tname","%n%")

.list();

(2)HQL 查询

String sql = " from 表名  where name like :myname";

.List<Student> students = session.CreatQuery(sql)

.setParamter("myname","%n%")

.list();

(3)QBC 查询

List<Student> students = session.creatCriteria(Student.class)

.add(Restrictions.like("name","%n%))

.list();

posted @   牧遥  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示