JAVA框架系列之Hibernate
本文是一篇学习笔记
注意:jar的版本、配置文件的正确性都可能导致程序报错喔!不要灰心,成功是留给有信心和有耐心的人!
文章目录
前言
我们可以通过JDBC将java和数据库联系起来,但是这样的开发还是存在许多重复性的操作,不便于对代码的维护,可移植性也比较差;所以这里我将要分享Hibernate将这些琐碎的操作封装起来!
提示:以下是本篇文章正文内容
一、创建数据库(mysql)
方式一:代码创建
这里我采用的是mysql,创建一个数据库test:create database test;
然后创建一个数据表fruits,如下代码所示:
use test
create table fruit(
ID INT NOT NULL AUTO_INCREMENT, // 水果ID 自增
name VARCHAR(45) NULL, // 水果名称
price FLOAT NULL, // 水果价格
primary key(ID) // 水果ID 为 主键
);
方式二:图形界面创建
我个人比较喜欢采用mysql的界面进行创建,下面展示图形化的mysql创建数据表
备注:这里的表名为 fruit ,多打了一个“ s ”,多多包涵o(´^`)o
二、第一个成功案例(含环境搭建)
1.创建一个java项目
创建步骤:File -----> New ------> java Project,项目名字可自行修改。
2.导入hibernate所依赖的jar包
① 在刚才新建的java项目hibernate下,再新建一个文件夹lib② 将我们需要的包放进lib,由于我还没有找到怎么把这个资源直接放进来(’∇’)シ┳━┳,所以可在官网进行下载。
③ 导包顺序:右击项目 -----> Build Path -----> Configure Build Path,就会进入如图所示的界面,然后Add External JARs…,把lib中所有的文件都导入进去。
3.创建Fruit实体
一个fruit的实体类 用于 映射 数据库中的表 fruit
package com; // 根据自己的包而定
public class Fruit {
private int id;
private String name;
private float price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
4.配置Fruit.hbm.xml
在 Fruit实体类 的 同一个目录下 创建 Fruit.hbm.xml文件
创建步骤:右击包 -----> New -----> XML -----> XML File -----> next
注意:XML的文件名 第一个字母 要大写,且与上面的 实体类 保持一致。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com">
<!-- 表示类Fruit对应表fruit-->
<class name="Fruit" table="fruit">
<!-- 表示属性id,映射表里的字段id -->
<id name="id" column="id">
<!--意味着id的自增长方式采用数据库的本地方式-->
<generator class="native">
</generator>
</id>
<!-- 表示属性name,映射表里的字段name -->
<property name="name" />
<!-- 表示属性price,映射表里的字段price -->
<property name="price" />
</class>
</hibernate-mapping>
如图所示:
5.配置 hibernate.cfg.xml
在 src目录下 创建 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.jdbc.Driver</property>
<!-- URL指向要访问的数据库名test -->
<property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</property>
<!-- MySQL配置时的用户名和密码-->
<property name="connection.username">root</property>
<property name="connection.password">mysql</property>
<!-- 由于不同的数据库语法是有差异,所以需要声明我们使用的是哪种数据库 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 这是Hibernate事务管理方式,即每个线程一个事务 -->
<property name="current_session_context_class">thread</property>
<!-- 这表示是否在控制台显示执行的sql语句 -->
<property name="show_sql">true</property>
<!-- 这表示是否会自动更新数据库的表结构,有这句话,其实是不需要创建表的,因为Hibernate会自动去创建表结构 -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/Fruit.hbm.xml" />
</session-factory>
</hibernate-configuration>
如图所示:
6.测试类 TestHibernate(效果展示)
创建 一个Fruit对象,并且 通过 Hibernate 把 这个对象 插入 到 数据库 中
代码演示:
package com.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.Fruit;
public class TestHibernate {
public static void main(String[] args) {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session s = sf.openSession();
s.beginTransaction(); // 开启事务
Fruit f = new Fruit();
f.setName("banana");
f.setPrice(6);
s.save(f); // 保存到数据库
s.getTransaction().commit(); // 提交事务
s.close();
sf.close();
}
}
效果展示:
数据成功插入
hibernate的基本步骤是:
- 获取SessionFactory
- 通过SessionFactory 获取一个Session
- 在Session基础上开启一个事务
- 通过调用Session的save方法把对象保存到数据库
- 提交事务
- 关闭Session
- 关闭SessionFactory
三、总结
Hibernate 把 fruit对象 插入 到 数据库的 fruit表 中
- Fruit.hbm.xml文件中提供了对象与表的映射关系,将 对象的属性 与 表的字段 联系起来;
- 通过hibernate.cfg.xml配置文件中的 驱动、url、账号、密码等信息 来 连接数据库;
图解: