第一次使用和学习hibernate
-
**学习hibernate前提技能整理 **
1.mysql、JDBC、DBUtils、
2.hibernate底层是JDBC,架构可以简化开发流程,提供新的功能,比如缓存。
3.框架是一个半成品的项目,重点掌握使用、应用框架。
ORM对象关系映射。
-- **hibernate入门流程**
一.下载hiebernate5
(https://sourceforge.net/projects/hibernate/files/hibernate-
orm/5.2.10.Final/hibernate-release-5.2.10.Final.zip/download)
二.对目录结构进行了解
-
documentation文件夹 文件相关资料
-
*javadocs文件夹 java文档
*quickstart文件夹 快速入门*lib文件夹源码
*jpa文件夹ORM框架规范
*required文件夹架构必须引入的包
*optional文件夹 可选包
*c3p0文件夹映射的配置文件*project文件夹提供开源的小项目
*etc文件夹hiebernate的配置文件目录
powerdesigner 设置字段显示comment注释
在Columns标签下,一排按钮中找到这个按钮:Customize Columns and Filter
M:表示强制非空;P:是否为主键;D:是否在模型中显示。gerenate:表示是否作为表生成
三.创建表结构
//
/ DBMS name: MySQL 5.0 /
/ Created on: 2017/7/26 14:02:05 /
//
drop table if exists cst_customer;
//
/ Table: cst_customer /
//
create table cst_customer
(
cust_id bigint(32) not null comment ‘客户编号(主键)’,
cust_name varchar(32) not null comment ‘客户名称(公司名称)’,
cust_user_id bigint(32) comment ‘负责人id’,
cust_create_id bigint(32) comment ‘创建人id’,
cust_source varchar(32) comment ‘客户信息来源’,
cust_industry varchar(32) comment ‘客户所属行业’,
cust_level varchar(32) comment ‘客户级别’,
cust_linkman varchar(64) comment ‘联系人’,
cust_phone varchar(64) comment ‘固定电话’,
cust_mobile varchar(16) comment ‘移动电话’,
primary key (cust_id)
)ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8;
四.导包
mysql-connector-java-5.1.37-bin
hibernate-release-5.0.7.Final\lib\required
五.包介绍
hibernate-core-5.0.7.Final 核心包
hibernate-commons-annotations-5.0.1.Final 注解相关
javassist-3.18.1-GA 生成动态代理
dom4j-1.6.1 解析xml
log4j-1.2.17 日志包
slf4j-api-1.7.5日志接口
slf4j-log4j12-1.7.5 整合包
六.实体类
注意事项: 包装类默认值是null,基本数据类型是零。
七.对应数据库和实体类的xml映射文件 Customer.hbn.xml
命名格式 .hbn.xml
约束位置: libraries/hibernate-core/org.hibernate/hibernate-mapping-3.0.dtd
//约束
文档信息
!-- 见到name属性 都是JavaBena的属性
见到column属性 是表结构的字段。
–*
– 根节点标签 -->
- 配置实体类和表结构的属性标签 -->
– class标签:name属性 填写类的全路径,table属性填写数据库的表名 -->
- id标签,用于配置主键 -->
– generator属性是主键的生成策略 -->
– property标签用于配置其他属性, -->
– name属性用于填写实体类的成员变量名称, column属性用于填写实体类的字段 -->
property name=“cust_name” column=“cust_name”
property>
property name=“cust_user_id” column=“cust_user_id”>property>
property name=“cust_create_id” column=“cust_create_id”>
八.创建hibernate配置文件 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”>
< 一个数据库对应一个session-factory一个 -->
#hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class org.gjt.mm.mysql.Driver
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password
–>
– 必须要配置的参数有五个,四大参数和一个数据库方言 -->
property
name=“hibernate.connection.driver_class”>com.mysql.jdbc.Driver
property
name=“hibernate.connection.url”>jdbc:mysql:///hibernate_day01
property name=“hibernate.connection.username”>root
root
– 方言 -->
property
name=“hibernate.dialect”>org.hibernate.dialect.MySQLDialect
映射配置文件 需要引入映射的配置文件 -->
session-factory>
hibernate-configuration>
测试类
public void testsave() {
1.加载配置文件,默认加载src下的hibernate.cfg.xml
Configuration config = new Configuration();
config.configure();
System.out.println(“加载配置文件”);
2.创建session-factory,生成session
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
System.out.println(“创建session-factory,生成session”);
// 3.开启事务
Transaction transaction = session.beginTransaction();
System.out.println(“开启事务”);
4.编写保存的代码
Customer c = new Customer();
System.out.println("创建Costomer");
c.setCust_name("小名");
c.setCust_user_id(2001l);
c.setCust_create_id(110l);
c.setCust_source("百度");
c.setCust_industry("民工");
c.setCust_level("一级");
c.setCust_linkman("小李子");
c.setCust_phone("010-232323234");
c.setCust_mobile("122222222");
System.out.println("向实体类保存数据完成");
session.save(c);
System.out.println("编写保存的代码");
5.提交事务
transaction.commit();
System.out.println("提交事务");
6.释放事务
session.close();
factory.close();
System.out.println("释放事务");