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年…

Vue中的Js动画与Velocity.js 的结合

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Vue中的Js动画与Velocity.js的结合</title><script src"./vue.js"></script><script src"./velocity.min.js&quo…

服务器端如何开启GZIP压缩功能

我们知道做好负载均衡对网站的正常运行&#xff0c;用户体验相当重要。在负载均衡中有一个必须要做的事情就是给服务器开启GZIP压缩功能&#xff0c;对用户请求的页面进行压缩处理&#xff0c;以达到节省网络带宽&#xff0c;提高网站速度的作用。 GZIP是若干文件压缩程序的简…

在服务器中开虚拟机,可以在云服务器上开虚拟机

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情Linux云服…

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

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

将社交登录添加到Spring MVC Web应用程序:配置

过去&#xff0c;用户使用用户名和密码组合登录。 尽管如今有些人仍然偏爱传统方式&#xff0c;但越来越多的用户希望使用其社交媒体帐户登录。 这就是使Spring Social&#xff08;及其子项目&#xff09;成为Spring项目组合有用的补充的原因。 但是&#xff0c;将Spring Soci…

[leetcode] 35. 搜索插入位置(Java)(二分)

35. 搜索插入位置 二分&#xff0c;太简单&#xff0c;没啥好说的 class Solution {public int searchInsert(int[] nums, int target) {if (nums.length 0) return 0;int i 0, j nums.length;int mid (i j) / 2;while (i < j) {if (nums[mid] target) {return mid;} …

UI设计中颜色的前进色与后退色

暖色调的颜色属于前进色。膨胀色可以使物体的视觉效果变大&#xff0c;而收缩色可以使物体的视觉效果变小。颜色的另外一种效果。有的颜色看起来向上凸出&#xff0c;而有的颜色看起来向下凹陷&#xff0c;其中显得凸出的颜色被称为前进色&#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…

编写自动调试器以在测试执行期间捕获异常

以前&#xff0c;我曾说过&#xff0c; 您总是想保留一些调试器断点作为例外 。 此帮助可防止代码在不引起注意的情况下腐烂掉-有时掩盖了另一个问题。 如果您认真对待这一点&#xff0c;则最好将此概念扩展到自动化测试中。 但是想出一个全面的解决方案并不简单。 您可以仅从…

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

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

Vue中浏览器的的前进和后退

项目开发的时候&#xff0c;有时候可能需要我们来对页面后退和前进&#xff0c;这个东西跟浏览器自带的前进后退功能很像,下面来大致讲一下在vue中浏览器的前进和后退 一、后退功能 vue中的后退有好多种方法可以使用&#xff0c;使用这些方法前要确认有之前的页面&#xff0c;否…

pandas:DataFrname(三)

pandas:从文件读取 读取文件&#xff1b;从文件名。url,文件对象中加载数据 read_csv 默认分隔符为逗号 read_table 默认分隔符为\t读取文件函数主要参数 sep 指定分隔符&#xff0c;可用正则表达式 headerNone 指定文件无列名 names 指定列名 index_col 指定某列作为索引 …

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

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

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

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

HOW-TO:在Spring 4和Java 7中使用@PropertySource批注

今天&#xff0c;我将我当前正在从事的项目之一迁移到了Spring 4.0。 由于它是我用来学习和演示Spring功能的非常简单的Web应用程序&#xff0c;因此只需要更新项目的POM文件并更改Spring版本。 我将项目部署到Tomcat 7服务器&#xff0c;显然该应用程序未启动。 我在IntelliJ控…

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

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

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

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