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. unity对敏感词库处理的记录

    string txt = Resources.Load<TextAsset>("minganci").ToString(); //string txt = " ...

  2. Hibernate实体类编写规则和主键策略

    一.实体类的编写规则 1.属性要是私有的. 2.要有公开的setter和getter方法供外界访问和修改. 3.每一个实体类要有一个属性作为唯一值(一般都是使用对于数据表的主键). 4.建议数据类型不 ...

  3. Golang教程:接口

    什么是接口 在面向对象语言中,接口一般被定义为 :接口定义了一个对象的行为.它仅仅指定了一个对象应该做什么.具体怎么做(实现细节)是由对象决定的. 在 Go 中,一个接口定义为若干方法的签名.当一个类 ...

  4. Query performance optimization of Vertica

    Don't fetch any data that you don't need,or don't fetch any columns that you don't need. Because ret ...

  5. Tomcat配置连接池的java实现

    1.准备 JNDI(Java Naming and Directory Interface),Java命名和目录接口.JNDI的作用就是:在服务器上配置资源,然后通过统一的方式来获取配置的资源.我们这 ...

  6. openlayers 各种图层,持续更新

    /*高德地图*/ var vectorLayerLine = new ol.layer.Tile({ source: new ol.source.XYZ({ urls: [ "http:// ...

  7. 快速搭建maven私服 Artifactory on Docker

    1.下载官方镜像 docker pull docker.bintray.io/jfrog/artifactory-oss:latest 2.启动容器 docker run --name artifac ...

  8. 中南oj 1215: 稳定排序

    1215: 稳定排序 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 111  Solved: 43 [Submit][Status][Web Boar ...

  9. SQLSTATE[HY000] [2002] No such file or directory in

    这个错误将数据库配置信息的localhost改成127.0.0.1就行了

  10. Class.forName之坑

    今天遇到个问题 找不到类,最后发现 Class.forName中要完整的类名