环境准备
JDK:1.8
Idea:2020
Hibernate:5.3.1
Lombok: 1.18.12
尽量保持一致
下载框架
Hibernate目录
documentation
Hibernate开发的文档
lib
- required:Hibernate开发的
必须
的依赖包 - optional:Hibernate开发的
可选
的Jar包
project
Hibernate提供的参考项目
使用
创建一个项目
- 可以Java项目中使用
- 可以在Web项目中使用都可以
引入必须的Jar包
- 数据库的驱动包
- c3p0-0.9.2.1.jar
- commons-beanutils-1.8.3.jar
- junit-4.9.jar
- mysql-connector-java-8.0.15.jar
- Hibernate开发必须的Jar包,lib/required中所有的Jar包
建表
CREATE TABLE `customer` ( `cust_id` BIGINT (32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', `cust_name` VARCHAR (32) NOT NULL COMMENT '客户名称(公司名称)', `cust_source` VARCHAR (32) DEFAULT NULL COMMENT '客户信息来源', `cust_industry` VARCHAR (32) DEFAULT NULL COMMENT '客户所属行业', `cust_level` VARCHAR (32) DEFAULT NULL COMMENT '客户级别', `cust_phone` VARCHAR (64) DEFAULT NULL COMMENT '固定电话', `cust_mobile` VARCHAR (16) DEFAULT NULL COMMENT '移动电话', PRIMARY KEY (`cust_id`) ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
创建ORM类
public class Customer { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private String cust_phone; private String cust_mobile; }
创建Hibernate的核心配置文件
通常都叫 hibernate.cfg.xml,创建完毕后,也有一个约束要引入,在 org.hibernate 包当中可以找到对应的dtd configuration.dtd
属性名记不住,在目录提供的 project 当中有一个 etc,在 etc 当中 有一个
hibernate.properties
的文件打开,打开后,会看到连接各种数据库时需要的属性参数
需要配置方言,不同的数据库,使用的语言不一样,在 hibernate当中,sql语句会自动帮你生成,设置方言,就是设置自动生成的语言是哪个数据库当中的SQL
配置核心配置文件要加载哪一个映射,映射的路径就是上面创建的跟表相对应的配置文件,把全路径的点,要换成斜杠
<?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="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jonathan_yh?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">1234</property> <!-- 配置Hibernate的方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 打印SQL --> <property name="hibernate.show_sql">true</property> <!-- 格式化SQL --> <property name="hibernate.format_sql">true</property> <!-- 自动创建表 --> <property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="customer.hbm.xml"/> </session-factory> </hibernate-configuration>
创建映射关系
通过XML的配置文件来进行配置,这个配置文件可以任意命名,
类名.hbm.xml
,别人一看,就能够知道是哪个类的映射文件,在xml当中引入dtd,在hibernate-core.jar包当中,在 org.hibernate包当中可以找到对应的dtd,打开 hibernate-mapping-3.0.dtd,把里面的约束复制一份,放到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> <class name="com.javaboy.domain.Customer" table="customer"> <!--建立类中的属性与表中的主键对应--> <id name="cust_id" column="cust_id"> <generator class="native"/> </id> <!--建立类中的普通的属性和表的字段的对应--> <property name="cust_name" column="cust_name"/> <property name="cust_source" column="cust_source"/> <property name="cust_industry" column="cust_industry"/> <property name="cust_level" column="cust_level"/> <property name="cust_phone" column="cust_phone"/> <property name="cust_mobile" column="cust_mobile"/> </class> </hibernate-mapping>
创建测试类
public class MyTest { @Test public void TestOne() { // 1.加载Hibernate的核心配置文件 Configuration configuration = new Configuration().configure(); // 2.创建一个SessionFactory对象:类似于JDBC中连接池 SessionFactory sessionFactory = configuration.buildSessionFactory(); // 3.通过SessionFactory获取到Session对象:类似于JDBC中Connection Session session = sessionFactory.openSession(); // 5.编写代码 Customer customer = new Customer(); customer.setCust_name("Jonathan_Yh"); customer.setCust_level("18"); session.save(customer); // 6.资源释放 session.close(); sessionFactory.close(); } }