Hibernate (开放源代码的对象关系映射框架)

http://www.cnblogs.com/wenwen123/p/5658625.html

一、

1.新建

2.配置

<!-- hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.12.Final</version>
</dependency> <!-- mysql-connector-java
当前最新测试版本:8.0.8-dmr
当前最新版稳定版本:6.0.6
上一代的稳步版本:5.1.44
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.8-dmr</version>
</dependency>

3.Test.java,配置类

public static void main(String[] args) {
//第一步:需要一个配置类
Configuration config = new Configuration();
//第二步:对配置类加载一个配置文件
config.configure("/hibernate.cfg.xml");
//非常慢
SessionFactory factory = config.buildSessionFactory();
System.out.println("factory:"+factory); }

4.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>
<!--
JDBC中数据库的URL地址
mysql5:jdbc:mysql://localhost:3306/pyq
mysql6:jdbc:mysql://localhost:3306/pyq?serverTimezone=UTC
--> <property name="connection.url">jdbc:mysql://localhost:3306/pyq?serverTimezone=UTC</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!--
老版本mysql5.0是:com.mysql.jdbc.Driver
新版mysql6.0是:com.mysql.cj.jdbc.Driver
-->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<!--此属性留给以后再说-->
<property name="hbm2ddl.auto">update</property>
<!--指定一种数据库方言-->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--SQL语句是否格式化,仅仅影响调试信息是否好看,不影响程序运行-->
<property name="format_sql">true</property>
<!--verifyServerCertificate--> </session-factory>
</hibernate-configuration>

Test.java右键(ps:要先把)数据库启动

地址:https://gitee.com/MuNianShi/Hibernate001.git

二、数据库的链接,这里用的是MySQL

Mysql里有一个数据库pyq,在数据库pyq里建表

1.先写一个实体类

2.在桌面上建立一个文件夹com.nf.entity在里面建Student.hbm.xml,再把它复制到resources里面

3.在测试类的第二步里

 //第二步:对配置类加载一个配置文件
config.configure("/hibernate.cfg.xml");//这里要删掉

4.在hibernate.cfg.xml文件里添加

<mapping resource="com.nf.entity/Student.hbm.xml"></mapping>

5.编写Student.hbm.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 package="com.nf.entity">
<!--
private Integer id;
private String name;
private String sex;
-->
<class name="Student" table="t_student">
<id name="id" column="id888">
<!--generator生成的意思
mysql:native
-->
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String" column="name888" length="20" not-null="true"></property>
<property name="sex" type="java.lang.String" column="sex888" length="4"></property> </class> </hibernate-mapping>

地址:https://gitee.com/MuNianShi/Hibernate002.git

三、增删改查,事务

一、下载相关jar包
(POM.xml hibernate-core,mysql-connector-java)

二、配置数据库相关信息hibernate.cfg.xml
(driver,url,username,password,dialect)
目的:获得一个SessionFactory实例

【后期:合并到spring】

三、ORM技术,通过Xxx.hbm.xml
实现java类的属性跟表的字段要一一对应

四、通过Session的API,实现增删改查

3.主要处理测试类Test.java,在其中添加方法。

首先先修改这个文件

修改Test.java

package com.nf;

import com.nf.entity.Student;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class Test { public static void main(String[] args) {
//第一步:需要一个配置类
Configuration config = new Configuration();
//第二步:对配置类加载一个配置文件
config.configure("/hibernate.cfg.xml");
//非常慢
SessionFactory factory = config.buildSessionFactory();
//System.out.println("factory:"+factory); //第三步:通过Session的API,实现增删改查
Session session = factory.openSession(); //1.增
//这是我们学习Mysql使用的增加:"insert into Student(name,sex) values(?,?);"
Student s1 = new Student();
s1.setName("奶妈");
s1.setSex("女");
session.save(s1); //这里是关闭
session.close();
factory.close();
}
}

删:其它不变

//4.删
//要先查到,然后删除
Student ss = session.get(Student.class,3);
session.beginTransaction();
session.delete(ss);
session.getTransaction().commit();

改:其它不变

//3.改
//要先查到,然后修改
Student ss = session.get(Student.class,3);
ss.setName("剑魔");
session.beginTransaction();
session.update(ss);
session.getTransaction().commit();

查:其它不变

//2.查询 Query query = session.createQuery("from Student ");
//查询分2种:
// 1.按HQL查询(n条记录)(没写)
// 2.直接过ID指定获取一个实例:select * from t_student where id=3
Student ss = session.get(Student.class,3);
System.out.println( ss.getName() ); //这里是关闭
session.close();
factory.close();

事务:故意让他发生异常,但不修改内容

//5.感受一下事务的回滚
session.beginTransaction();
try {
Student s1 = session.get(Student.class,1);
Student s2 = session.get(Student.class,2);
s1.setSex("女");
s2.setSex("美颜后的女性");
session.update(s1);
session.update(s2);
//如果全部成功,提交事务
session.getTransaction().commit();
}catch (Exception e){
System.out.println("发生异常:"+e.getMessage());
//如果有异常,事务回滚
session.getTransaction().rollback();
}

地址:https://gitee.com/MuNianShi/Hibernate002.git

Struts学习-Hibernate的更多相关文章

  1. Java新手如何学习Spring、Struts、Hibernate三大框架?(转)

    整理知乎大牛答案: 1.入门看文档(blog,书籍等等),深入理解配置文件的含义(Spring.Struts.Hibernate); 2.遇到问题,自己动手解决,如果解决了,为什么这样解决?(凡事总问 ...

  2. 用eclipse搭建SSH(struts+spring+hibernate)框架

    声明: 本文是个人对ssh框架的学习.理解而编辑出来的,可能有不足之处,请大家谅解,但希望能帮助到大家,一起探讨,一起学习! Struts + Spring + Hibernate三者各自的特点都是什 ...

  3. Struts+Spring+Hibernate进阶开端(一)

    入行就听说SSH,起初还以为是一个东西,具体内容就更加不详细了,总觉得高端大气上档次,经过学习之后才发现,不仅仅是高大上,更是低调奢华有内涵,经过一段时间的研究和学习SSH框架的基本原理与思想,总算接 ...

  4. 在Eclipse中使用Struts和Hibernate框架搭建Maven Web项目

    前言 学习使用Java还是2012年的事情,刚开始学习的Java的时候,使用的是MyEclipse工具和SSH框架.初学者适合使用MyEclipse,因为他将struts.Spring和Hiberna ...

  5. 【SSH进阶之路】Struts + Spring + Hibernate 进阶开端(一)

    [SSH进阶之路]Struts + Spring + Hibernate 进阶开端(一) 标签: hibernatespringstrutsssh开源框架 2014-08-29 07:56 9229人 ...

  6. 3大框架Struts、Hibernate、Spring简单了解

    3大框架:Struts.Hibernate.Spring 基本概念:Spring/Struts/Hibernate是干嘛用的? 三个框架产生的技术历史背景 学习前首先应该掌握的基础知识 学习一个开发框 ...

  7. Struts + Spring + Hibernate 进阶开端(一)

    Long Long ago,就听说过SSH,起初还以为是一个东东,具体内容更是不详,总觉得高端大气上档次,经过学习之后才发现,不仅仅是高大上,更是低调奢华有内涵,经过一段时间的研究和学习SSH框架的基 ...

  8. Struts+Spring+Hibernate项目的启动线程

    在Java Web项目中,经常要在项目开始运行时启动一个线程,每隔一定的时间就运行一定的代码,比如扫描数据库的变化等等.要实现这个功能,可以现在web.xml文件中定义一个Listener,然后在这个 ...

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

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

随机推荐

  1. inline元素、inline-block元素在float、position:fixed、position:absolute之后出现的问题

    我们知道内联元素是不能设置宽.高的,但是一旦使其脱离了文档流,就可以了,这是因为它已经变成了块级元素. 例1: <!DOCTYPE html> <html lang="en ...

  2. [目录]ASP.NET web api开发实战

    第一章:Restful web service v.s. RPC style web service 第二章:ASP.NET web api v.s. WCF v.s. ASP.NET web ser ...

  3. iphone数据存储之-- Core Data的使用

    一.概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型 在Mac OS X 10.5Leopard及以 ...

  4. 2.2、js基础---预解析和严格模式

    一.语言特性         1.预解析:js会把变量的声明(仅仅是声明)提到顶部,但是不会突破作用域.                 alert(a);var a= 12; //结果,undefi ...

  5. Visual Studio中修改项目的输出目录

    1. 如在Solution中的项目名称为 ProjectA 但在本地目录显示却想换成: MyProject 2. 应该做的修改是: 2.1. 将本地目录的 ProjectA手动修改成 MyProjec ...

  6. 使用 Qt 获取 UDP 数据并显示成图片(2)

    本文首发于 BriFuture 的 个人博客 在我的前一篇文章 使用 Qt 获取 UDP 数据并显示成图片 中,我讲了如何用 Python 模拟发送数据,如何在 Qt 中高效的接收 UDP 数据包并将 ...

  7. bzoj 4540: [Hnoi2016]序列

    Description 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- 1,ar.若1≤l≤s≤t≤r≤n,则称 ...

  8. zIndex 属性设置元素的堆叠顺序。

    http://www.w3school.com.cn/jsref/prop_style_zindex.asp zIndex 属性设置元素的堆叠顺序. 该属性设置一个定位元素沿 z 轴的位置,z 轴定义 ...

  9. 启停无线网卡bat脚本

    @echo off color 2 title 启停无线网卡 echo 启动无线网卡=======>按1键 echo 关闭无线网卡=======>按2键 set /p n= if /i & ...

  10. 四、jdbctemplate使用

    这里使用mysql数据库,省略数据库创建过程 1.添加依赖 <!--jdbc--> <dependency> <groupId>org.springframewor ...