Hibernate学习(一)

搭建环境

1、创建普通的Java工程

2、添加相应的jar包,下载链接:https://files.cnblogs.com/files/AmyZheng/required.rar

第一个实例

1、引用jar包

2、创建数据库和表

DROP TABLE IF EXISTS t_customer ;CREATE TABLE t_customer (id  INT(5) PRIMARY KEY ,email  VARCHAR(60)  UNIQUE NOT NULL,password VARCHAR(32) NOT NULL ,nickname VARCHAR(150) ,gender VARCHAR(3) ,birthdate DATE ,married     CHAR(1)
);

3、创建一个Customer类

package ecut.orm.entity;import java.util.Date;/*** source命令加上 .sql的完整路径导入来创建表* 实体类 Customer <================> 数据库表: t_customer*            属性            <================>        列*        id                 <================>       id*        emial             <================>         email*        password     <================>         password*        nickname         <================>         nickname*        gender         <================>         gender*        birthdate     <================>         birthdate*        married         <================>         married*        *        从对象到关系型数据库之间的映射(对应关系) object relation mapping*   new Customer();         <==========>    一条记录 (关系)*   *   hibernate作用 :把对象存入数据库变成记录或者从数据库查询一条记录包装成一对象个(orm框架)*   */
public class Customer {// 对象标识符 ( Object Identifier,id的值是对象标识符 ) 属性 ( 对应数据库主键 )private Integer id;private String email;private String password;private String nickname;private char gender;private Date birthdate;private boolean married;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public Date getBirthdate() {return birthdate;}public void setBirthdate(Date birthdate) {this.birthdate = birthdate;}public boolean isMarried() {return married;}public void setMarried(boolean married) {this.married = married;}}

我们接下来要做的事情就是实现表和实体类中的映射,即类中属性要和表中的列相对应, hibernate的作用就是把对象存入数据库变成记录或者从数据库查询一条记录包装成一对象个(object relational mapping框架)。

4、编写映射文件(以hbm.xml为后缀)

首先将jar中的dtd文件保存在本地,依据hibernate-core-5.2.10.Final.jar中的/org/hibernate/hibernate-mapping-3.0.dtd编写Customer.hbm.xml

 让Eclipse支持映射文件的智能提示,将dtd文件复制到容易查找的目录下,在Eclipse的导航选择Widow下的preferences,选择如下目录

点击Add,显示如下页面,Key Type选择URI

 Location 选择dtd文件所在路径,Key填http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd

 根据dtd文件的提示编写配置文件如下:

<?xml version="1.0" encoding="UTF-8"?><!-- 映射文件告诉hibernate列与属性的对应关系  --><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><!-- 指定 那个类 ( name 指定类名 ) 对应 那个表 ( table 指定表名 ) --><class name="ecut.orm.entity.Customer" table="t_customer"><!-- 对于 与 数据库主键 对应的 对象标识符属性 来说,要单独使用 id 标签来映射 <id name="id" type="java.lang.Integer" column="id" >即使不指定完整类名也可以通过id的类型反射来确定<id name="id" type="int" column="id" >--><id name="id" type="integer" column="id" ><generator class="increment" /> <!-- 由 hibernate 提供的 对象标识符 生成策略 --></id><!-- 指定 那个属性 ( name 指定属性名 )  对应 那个列 ( column 属性指定 列名 ) --><property name="email" type="string" column="email" /><!-- 使用 type 属性指定 映射类型 ( 既不是 Java 类型,也不是 数据库类型,而是 中间类型 ( 媒婆 ) ) --><property name="password" type="string" column="password" /><property name="nickname" type="string" column="nickname" /><!-- Java 中的 char 类型在 hibernate 中对应的映射类型是 character --><property name="gender" type="character" column="gender" /><property name="birthdate" type="date"  column="birthdate" /><!-- Java 中的 boolean  类型在 hibernate 中对应的映射类型可以是 true_false 、yes_no(true就存y,fals 存y),bit(存0,1)--><property name="married" type="yes_no" column="married" /></class></hibernate-mapping>

 class标签内必须要有id标签,要使用 id 标签来单独映射与 数据库主键 对应的 对象标识符属性,使用property标签中通过指定name和column使数据库中的列和类中的属性相关联,且需要使用 type 属性指定 映射类型 ( 既不是 Java 类型,也不是 数据库类型,而是 中间类型 )。

5、创建Hibernate的配置文件hibernate.cfg.xml(以cfg.xml为后缀)

首先将jar中的dtd文件保存在本地,依据hibernate-core-5.2.10.Final.jar中的/org/hibernate/hibernate-configuration-3.0.dtd编写hibernate.cfg.xml

 根据上面映射文件一样的方式,让Eclipse支持struts.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><!-- 指定连接数据库的基本信息 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- & 符号需要转义 为&amp; --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF8</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123456</property><!--  通用性的工具,对所有的数据库都是通用的,所以还需要根据所用数据库的类型指定数据方言类(在hibernate core 包中的dialect中)--><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 指示是否显示 执行过的 SQL 语句 --><property name="show_sql">true</property><!-- 指示是否对 SQL 语句进行格式化输出 --><property name="format_sql">true</property><!--导入映射文件  --><mapping resource="ecut/orm/entity/Customer.hbm.xml"/></session-factory></hibernate-configuration>

在hibernate配置文件配置数据库相关信息,并指定数据方言,最重要要的是导入映射文件。

6、编写测试类

DML语句的测试案例:

package ecut.orm.test;import java.io.Serializable;
import java.util.Date;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;import ecut.orm.entity.Customer;public class TestSaveCustomer {public static void main(String[] args) {// 对象 <======>  记录Customer c = new Customer();// c.setId( 100 ); // 不要指定 对象标识符 ,而是期望由 Hibernate 维护c.setEmail( "sanfeng@qq.com" );c.setPassword( "hello2017" );Date birthdate = null ;c.setBirthdate( birthdate );c.setGender( '男' );c.setNickname( "君宝" );c.setMarried( false );// 创建一个 Configuration 对象,用来读取配置文件 ( 默认位置、默认名称 )Configuration config = new Configuration();// 读取配置文件config.configure("ecut/orm/hibernate.cfg.xml");//config.configure(); // 读取 默认位置 ( 当前 classpath ) 的 默认名称 ( hibernate.cfg.xml ) 的配置文件// 使用 Configuration 创建 SessionFactorySessionFactory factory = config.buildSessionFactory();// 创建 Session 对象 ( 这里的 Session 是 Java 程序 跟 数据库 之间的 会话 )Session session = factory.openSession();System.out.println( session );// 如果执行的是 DML 语句,则需要 开启事务
        session.getTransaction().begin();// 保存指定的对象 到数据库中Serializable s = session.save( c ); // DML(数据操纵语言) : insert 、update 、delete System.out.println( "返回 : " + s );// 如果执行的是 DML 语句,则需要 提交事务
        session.getTransaction().commit();session.close();factory.close();}}

通过Configuration类读取配置文件hibernate.cfg.xml,再通过这个Configuration 对象创建 SessionFactory,再创建 Session 对象 ( 这里的 Session 是 Java 程序 跟 数据库 之间的 会话 ),通过这个session对象完成数据库操作。如果执行的是DML语句还需要开启事务。

查询的测试案例:

package ecut.orm.test;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;import ecut.orm.entity.Customer;
public class TestGetCustomer {public static void main(String[] args) {// 创建一个 Configuration 对象,用来读取配置文件 ( 默认位置、默认名称 )Configuration config = new Configuration();// 读取配置文件config.configure("ecut/orm/hibernate.cfg.xml");//config.configure(); // 读取 默认位置 ( 当前 classpath ) 的 默认名称 ( hibernate.cfg.xml ) 的配置文件// 使用 Configuration 创建 SessionFactorySessionFactory factory = config.buildSessionFactory();// 创建 Session 对象 ( 这里的 Session 是 Java 程序 跟 数据库 之间的 会话 )Session session = factory.openSession();System.out.println( session );Customer c  = session.get( Customer.class ,  2 );System.out.println( c.getEmail() );session.close();factory.close();}}

转载请于明显处标明出处:

https://www.cnblogs.com/AmyZheng/p/9300838.html

转载于:https://www.cnblogs.com/AmyZheng/p/9300838.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Spring Webservices构建SOAP Webservices代理模块

前一段时间&#xff0c;我想看看使用Spring Web Services编写Web服务代理&#xff08;wsproxy&#xff09;有多么容易。 所以&#xff0c;我想我会在Github上分享结果。 可以随意使用它 &#xff08;Apache v2许可证&#xff09;或将其用作自己开发的基础。 本文的其余部分将解…

joc杂志影响因子2019_排名 ‖ 2019年中国体育学期刊影响因子

近日&#xff0c;由中国科学文献计量评价研究中心、清华大学图书馆研制&#xff0c;《中国学术期刊&#xff08;光盘版&#xff09;》电子杂志社有限公司出版的《中国学术期刊影响因子年报》&#xff08;2019版&#xff09;发布。该年报是中国科学文献计量评价研究中心自2002年…

Confluence 6 MySQL 3.x 字符集编码问题

MySQL 3.x is 已知在大写和小写转换的时候有些问题&#xff08;non-ASCII&#xff09;。 问题诊断 请按照 Troubleshooting Character Encodings 页面中的内容对问题进行诊断。如果大小写字符串编码诊断显示不同&#xff0c;那么有可能是你数据库导致的。一个错误的数据库大小写…

手型向下 点击一下 福昕_PPT多张缩略图点击放大展示

↑点击上方“菜鸟PPT”关注&#xff0c;教你玩转PPT&#xff01;多张图片单击放大展示&#xff0c;以前做过一个比较复杂的&#xff0c;在同一页PPT里面做&#xff0c;加了很多个“进入”和“退出”的动画&#xff0c;维护起来比较麻烦。今天&#xff0c;菜鸟菌跟大家一起来学习…

6个经典的JavaScript报错分析

代码报错是经常发生的一件事&#xff0c;我们要确定是什么原因造成的&#xff0c;以及如何避免错误。 1. Uncaught TypeError: Cannot read property 该错误说明没有某个属性&#xff0c;一般是该属性前面的值是undefined或者是null的情况会出现。 2. TypeError: ‘undefined…

git显示服务器所有分支,git 查看所有远程分支以及同步

在多台电脑使用git管理开发分支的时候&#xff0c;会出现这样的情况。电脑A创建了分支1&#xff0c;并且push上了远程仓库。电脑B本地clone仓库默认只会clone下master分支&#xff0c;而其他电脑A推送的分支是不会默认同步下来的。那么如何同步呢&#xff1f;查看电脑B本地仓库…

json-schema 可视化编辑器发布了

json-schema 的用途越来越广泛&#xff0c;除了定义数据结构外&#xff0c;我们还可以使用 json-schema 验证数据格式和生成随机数据&#xff0c;但是编写复杂数据结构的 json-schema 是非常痛苦的事情。假设一个 100 字段的数据结构&#xff0c;如果用 json-schema 定义&#…

tfw文件如何导入cad_如何将CAD的线稿导入PS并和底色分离

【新朋友】 点击标题下方的 CG伴学 迅速关注【老朋友】 点击右上角的按钮 分享 或者 收藏这是 【CG伴学 】制作的第249篇答疑教程观看往期视频教程请点击或者前往公众号自定义菜单【学习中心】我们专门制作了教程汇总目录&#xff0c;你可以根据标题关键词搜索获取我们在后台收…

Python全栈工程师(函数嵌套、变量作用域)

ParisGabriel 感谢 大家的支持 每天坚持 一天一篇 点个订阅吧 灰常感谢 当个死粉也阔以 Python人工智能从入门到精通 globals&#xff08;&#xff09;/locals&#xff08;&#xff09;函数&#xff1a;     globals&#xff08;&#xff09;返回当前全局作用域内变量…

可视化分析js的内存分配与回收

之前写了一篇文章浏览器是怎么看闭包的&#xff0c;发现有些读者对js内存分配与回收懵懵懂懂&#xff0c;理解文章的配图有些困难&#xff0c;我想主要是因为配图省略了一些细节。今天专门写一篇关于js内存分配回收的文章&#xff0c;帮助大家理解js代码的内存表示。原文备份在…

记录程序写入日志_终于有人把MySQL 三大日志讲清楚了

点击上方"蓝字"&#xff0c;关注了解更多日志是 mysql 数据库的重要组成部分&#xff0c;记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发&#xff0c;我们重点需要关注的是二进制日志( …

在ADF实体PK属性中使用MySQL自动增量PK列

大家好。 继续进行ADF MySQL解决方法系列&#xff0c;今天我们将看到要使用MySQL PK自动增量列和ADF实体PK属性来进行的工作。 如果使用的是Oracle数据库&#xff0c;则可以使用oracle.jbo.domain.DBSequence以及序列和触发器来立即进行操作。 为简单起见&#xff0c;我们将修…

14.正则表达式、re模块、元字符

正则表达式 一、正则表达式所面向的问题 1、判断一个字符串是否匹配给定的格式 判断用户注册帐号是否满足格式 2、从一个字符串中按指定格式提取信息 抓取页面中的链接 二、判断用户提交的邮箱的格式是否正确 三、抓取页面中特定部分数据 er模块 1、findall方法&a…

WeScale 技术篇 —— mpvue 与微信小程序的火花

介绍项目介绍WeScale 定位为音乐训练小程序&#xff0c;初期规划了基础音阶的三个训练&#xff0c;以及他们的镜像模式。数字简谱字母简谱数字简谱对字母简谱后期看情况更新追加其他训练。产品展示扫描下方小程序码或在微信小程序中搜索 WeScale&#xff0c;即可使用。人员介绍…

025 SSM简单搭建

参考了同事的文档&#xff0c;自己也写一篇文档。 同时&#xff0c;补充了一下&#xff0c;程序是如何运行的。 一&#xff1a;SSM框架 1.说明 SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成&#xff0c;常作为数…

上升沿_PLC上升沿,下降沿的理解

有网友留言说&#xff1a;上升沿就是在信号从断开到接通的那一瞬间接通&#xff0c;下降沿就是在信号从接通到断开的那一瞬间接通。但是现在的问题它的实际用处是用在哪一些情况。我身边也有PLC可以做个什么实验来体验一下呢&#xff1f;虽然说LD X0 PLS M0与LDP X0 out Y0…

中找不到iedis_CAD图纸中缺少的字体实在找不到怎么办呢?

在使用浩辰CAD软件打开图纸文件的时候经常提示缺少字体这是什么原因呢&#xff1f;怎么解决这个问题呢&#xff1f;其实打开CAD图纸时提示缺少字体是比较常见的情况&#xff0c;但是很多常见的字体也提示缺失是为什么呢&#xff1f;因为这些字体很显然是被人改过名字了&#xf…

1023 Have Fun with Numbers

因为最多有20个字符&#xff0c;int和long long都不行&#xff0c;所以只能用字符串操作。水题~ #include<iostream> #include<algorithm> #include<string.h> #define maxn 25 using namespace std; typedef long long ll; char s1[maxn]; int s2[maxn]; in…

Apache Camel –从头开始开发应用程序(第1部分/第2部分)

开始之前 前一段时间&#xff0c;我写了一篇关于Spring Integration的教程&#xff0c;以演示如何在受现实发票处理系统启发的示例应用程序中使用Spring Integration。 我对此非常满意&#xff0c;因此我决定向您展示如何使用Apache Camel&#xff08;Spring Integration的最大…

杭州 GraphQLParty 第五场-GraphQL 基于 SPA 架构的工程实践文字版

本文为 2018 年 6 月 9 日&#xff0c;宋小菜与 Coding 共同举办的第一届 GraphQLParty &#xff0c;下午第五场国内某大型电商前端开发专家邓若奇的演讲稿&#xff0c;现场反响效果极好&#xff0c;对于想要尝试 GraphQL 和在公司初步实践的团队有很大的借鉴意义。 大家好&…