什么是hibernate?

  hibernate是一个orm框架,实现了对JDBC的封装。通过xml文件来实现类和表之间的映射,这样就可以使用操作对象的方式来操作数据库。

官网:http://hibernate.org/

这里使用最新的5.3版本,下载到本地。

hibernate框架搭建:

1.导入包 下载后将lib/required文件夹中的jar包以及mysql数据库的驱动jar包(mysql-connector-java-5.1.46.jar)导入到项目中

2.编写主配置文件 创建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>
<!--必选5个-->
<!--数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--数据库url -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/david2018_db?characterEncoding=UTF-8</property>
<!--数据库连接用户名 -->
<property name="hibernate.connection.username">root</property>
<!--数据库连接密码 -->
<property name="hibernate.connection.password">1234</property>
<!--数据库方言 mysql(limt) sqlserver(top)-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!--可选3个 -->
<!--自动建表:
create:每次都删除新建(数据会丢失)
create-drop:每次运行结束会将表删除
update:如果存在不会生成,不存在新建,如果表修改也会新增列到表中(不会删数据)
validate:校验不自动生成表,每次启动会检查表是否正确 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--输出生成的SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!--对SQL语句进行格式化 -->
<property name="hibernate.format_sql">true</property> <!--映射文件的路径 -->
<mapping resource="com/hibernate/domain/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>

3.实体类

package com.hibernate.domain;

public class User {
private int UserId;
private String UserName;
private String PassWord;
private int Age;
private String Sex; public User(){ }
public User(String userName,String password,int age,String sex){
this.UserName = userName;
this.PassWord = password;
this.Age = age;
this.Sex = sex;
} public int getUserId() {
return UserId;
}
public void setUserId(int UserId) {
this.UserId = UserId;
} public String getUserName() {
return UserName;
}
public void setUserName(String UserName) {
this.UserName = UserName;
} public String getPassWord() {
return PassWord;
}
public void setPassWord(String PassWord) {
this.PassWord = PassWord;
}
public int getAge() {
return Age;
}
public void setAge(int Age) {
this.Age = Age;
}
public String getSex() {
return Sex;
}
public void setSex(String Sex) {
this.Sex = Sex;
}
}

4.编写orm元数据 User.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
<!--映射标签 package:内部类的所在的包名,内部不用写完整类名 -->
<hibernate-mapping package="com.hibernate.domain">
<!--需要设置的映射类:设置该类对应的表 -->
<!--属性:name:类名 table:表名 -->
<!-- name="com.hibernate.domain.User" 因为用了package就不用写完整包名了-->
<class name="User" table="User">
<!--id:主键,name:属性名称,column:字段名称 -->
<id name="UserId" column="UserId">
<!--generator:主键生成策略 class:标记主键如何生成 取值:
1、native:自动增长,会根据当前的数据库自动切换
2、identity:mySQL的自增策略
3、sequence:Oracle的自增标记
4、uuid:32位字符串
5、assigned:自定义字符串
6、foreign:外键
7、increment:自己维护自增关系-->
<generator class="native"/>
</id>
<!--配置属性对应的字段
column(可选):不填就自动走属性名
type(可选)填写该列的类型 不填会自动识别
not-null(可选):默认false可为空
length(可选):长度,默认值数据库类型最大长度-->
<property name="UserName" column="UserName" type="java.lang.String"/>
<property name="PassWord" column="PassWord" type="string"/>
<property name="Age" column="Age"/>
<property name="Sex" column="Sex">
<!--<column name="Sex" sql-type="varchar"></column> string还可以这样定义-->
</property>
</class>
</hibernate-mapping>

5.增删改查

import com.hibernate.domain.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; public class Main {
public static void main(String[] args) {
//加载配置文件 空参默认加载src下的hibernate.cfg.xml
Configuration conf = new Configuration().configure();
// 创建SessionFactory (保存和使用所有配置信息,消耗内存资源非常大,保证在web项目中只创建一个)
SessionFactory sf = conf.buildSessionFactory();
// 创建Session对象 打开一个新的session对象
Session session = sf.openSession(); //sf.getCurrentSession();获得一个现有的session对象 没有就创建 需要在配置文件中进行配置
// 开启事务
Transaction trans = session.beginTransaction(); //新增
session.save(new User("测试", "666666",18,"男")); //查询
User user = session.get(User.class,1);
System.out.println(user.getUserName()); //修改
user.setUserName("武大郎");
session.update(user); //删除
User u = session.get(User.class,2);
session.remove(u); trans.commit();
//trans.rollback(); session.close();
sf.close();
}
}

不用去数据库建表,hibernate会自动根据实体反向生成。

编写工具类

package com.hibernate.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtils {
public static final SessionFactory sessionFactory; static {
Configuration conf = new Configuration().configure();
sessionFactory = conf.buildSessionFactory();
}
public static Session openSession(){
Session session = sessionFactory.openSession();
return session;
} public static Session getCurrentSession(){
Session session = sessionFactory.getCurrentSession();
return session;
}
}

测试

    Session session = HibernateUtils.openSession();
session.save(new User("测试", "666666",18,"男"));
session.close();

Hibernate搭建框架(一)的更多相关文章

  1. hibernate 搭建框架

    需要用的包 Hibernate的日志记录: * Hibernate日志记录使用了一个slf4j: * SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具 ...

  2. Eclipse搭建SSH(Struts2+Spring+Hibernate)框架教程

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 确实,刚创博客,对于这个陌生的东西还是有些许淡然.这是我的第一篇博文,希望能给你们有帮助,这就是我最大的乐趣! 好了下面进入正题: SS ...

  3. Struts2+Spring+Hibernate 三大框架的合并集成

    这次来看看Struts2+Spring+Hibernate三大框架的整合应用,主要是Spring和Hibernate框架的整合,因为前边已经将Strtus2+Spring整合过了基本一样.  首先看一 ...

  4. 初学springMVC搭建框架过程及碰到的问题

    刚刚开始学spring框架,因为接了一个网站的项目,想用spring+springMVC+hibernate整合来实现它,现在写下搭建框架的过程及碰到的问题.希望给自己看到也能让大家看到不要踏坑. 一 ...

  5. Springmvc+Spring+Hibernate搭建方法

    Springmvc+Spring+Hibernate搭建方法及example 前面两篇文章,分别介绍了Springmvc和Spring的搭建方法,本文再搭建hibernate,并建立SSH最基本的代码 ...

  6. Struts,spring,hibernate三大框架的面试

    Struts,spring,hibernate三大框架的面试 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3 ...

  7. Springmvc+Spring+Hibernate搭建方法及实例

    Springmvc+Spring+Hibernate搭建方法及实例  

  8. 从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建

    从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建 废话不说,直接撸步骤!!! 1.创建主项目:ncc-parent 选择maven创建项目,注意在创建项目中,packing选择 ...

  9. 从零开始搭建框架SSM+Redis+Mysql(一)之摘要

    从零开始搭建框架SSM+Redis+Mysql(一)之摘要 本文章为本人实际的操作后的回忆笔记,如果有步骤错漏,希望来信307793969@qq.com或者评论指出. 本文章只体现过程,仅体现操作流程 ...

随机推荐

  1. Centos7搭建ansible运维自动化工具

    1)设置主机名和hosts文件 2)配置阿里云repo源 Wget -O /etc/yum.repos.d/aliyun.repo https://mirrors.aliyun.com/repo/Ce ...

  2. java 导入导出的 命令

    $exp lddba/ld_321@192.168.1.3/testora file=E:\db_bak\ld20170219_1testora.dmp log=E:\db_bak\ld2017021 ...

  3. JavaScript day3(运算符)

    运算符(operator) 基本运算符: 算术运算符用于执行变量之间的算术运算,给定 y=5: 运算符 描述 例子 结果 + 加 x=y+2 x=7 - 减 x=y-2 x=3 * 乘 x=y*2 x ...

  4. (C/C++学习)7.数组及其访问方式

    说明:数组的数据类型是一种构造类型,而存储数组的内存是一段连续的存储区域.数组的数据类型决定了连续内存的访问方式,它包括数组的三要素:起始地址.步长以及元素个数. 一.一维数组 1.形式:type 数 ...

  5. 我理解的数据结构(一)—— 数组(Array)

    我理解的数据结构(一)-- 数组(Array) 首先,我是一个phper,但是毕竟php是一个脚本语言,如果使用脚本语言去理解数据结构具有一定的局限性.因为脚本语言是不需要编译的,如果你的语法写的不错 ...

  6. Vue 安装教程

    1.下载node.js https://nodejs.org/en/ 2.检查环境变量: npm init (初始化项目) npm i webpack vue vue-loader 安装依赖: npm ...

  7. [置顶] Java基础学习总结(34)——HTTP协议详解

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  8. ES6的let和var声明变量的区别

    关于let的描述 let允许你声明一个作用域被限制在块级中的变量.语句或者表达式.与var关键字不同的是,它声明的变量只能是全局或者整个函数块的. 作用域规则 let声明的变量只在其声明的块或子块中可 ...

  9. Solr插件的弊端

    在前文<Solr Update插件自定义条件索引>中,我介绍了如何通过插件的模式,自定义Solr的Update过程.但是在大半年的使用过程中,发现这种方式存在如下弊端. 1.环境难以维护. ...

  10. [bzoj1634][Usaco2007 Jan]Protecting the Flowers 护花_贪心

    Protecting the Flowers 护花 bzoj-1634 Usaco-2007 Jan 题目大意:n头牛,每头牛有两个参数t和atk.表示弄走这头牛需要2*t秒,这头牛每秒会啃食atk朵 ...