Hibernate 个人学习记录
参考:
https://blog.csdn.net/yerenyuan_pku/article/details/64209343
https://blog.csdn.net/qq_36101933/article/details/92838713
概念
Hibermate 是 一个**持久层 ** 的 ORM 框架
**持久层 **:可以使数据存储下来
ORM: 对象关系映射,指的是将一个Java 中的对象与关系型数据中的表建立一种映射关系,从而操作对象就可以操作表
学习 — 使用 maven 工程
第一步:pom.xml 依赖
<dependencies>
<!-- 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.3.7.Final</version>
</dependency>
<!-- 数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- 少写get set 代码 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
</dependencies>
第二步:配置文件 xml
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="current_session_context_class">thread</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/database_s3?serverTimezone=UTC</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- 可以将向数据库发送的SQL语句显示出来 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL语句 -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 配置hibernate的映射文件所在的位置 -->
<mapping resource="mappings/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
User.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>
<!-- name指定持久化类的类名,table指定数据表的表名 -->
<class name="com.example.vo.UserVo" table="Users">
<!-- 将User类中的id映射为数据表USER中的主键USER_ID -->
<id name="id" type="java.lang.Long" column="id"/>
<!--其余字段 -->
<property name="name" type="java.lang.String" column="name"/>
<property name="money" type="java.math.BigDecimal" column="money"/>
<property name="address" type="java.lang.String" column="address"/>
<property name="birthday" type="java.util.Date" column="birthday"/>
</class>
</hibernate-mapping>
数据库:User
UserVo
@Data
public class UserVo {
//自增
private long id;
//用户名
private String name;
//金额
private BigDecimal money;
//用户地址
private String address;
//用户生日
private Date birthday;
}
测试
public class MyTest {
private static Configuration conf;
private static SessionFactory sf;
static {
conf = new Configuration().configure();
sf = conf.buildSessionFactory();
}
public static Session getSession() {
return sf.openSession();
}
@Test
public void test1() {
Session session = getSession();
//打开
try {
// 这里是Hql [ from UserVo ---> 是类名 不是数据库名]
//不然错误 QuerySyntaxException: XXX is not mapped [from XXX]
List list = session.createQuery("from UserVo").list();
System.out.println(list);
} finally {
session.close();
}
}
}
正确运行
Hibernate:
select
uservo0_.id as id1_0_,
uservo0_.name as name2_0_,
uservo0_.money as money3_0_,
uservo0_.address as address4_0_,
uservo0_.birthday as birthday5_0_
from
User uservo0_
[UserVo(id=4, name=赵六, money=13, address=背景, birthday=2020-12-16 00:00:00.0), UserVo(id=5, name=张三2, money=214, address=商户, birthday=2020-12-16 00:00:00.0), UserVo(id=6, name=李四1, money=null, address=是, birthday=2020-12-23 00:00:00.0), UserVo(id=8, name=123, money=null, address=123, birthday=2020-12-16 00:00:00.0), UserVo(id=11, name=sdfa, money=3123, address=adsf, birthday=2020-12-16 00:00:00.0), UserVo(id=12, name=sadf, money=null, address=dsaf, birthday=2020-12-16 00:00:00.0), UserVo(id=13, name=dfs, money=null, address=sdf, birthday=2020-12-16 00:00:00.0), UserVo(id=14, name=sdfsadf, money=12, address=sadfsdfds, birthday=2020-12-16 00:00:00.0), UserVo(id=19, name=sdfaf, money=123, address=123, birthday=2021-01-26 00:00:00.0)]