java的三大框架(三)---Hibernate
一、什么是映射
这里所说的映射就是对象关系映射:将对象数据保存到数据库中,同时可以将数据库数据读入对象中,开发人员只对对象进行操作就可以完成对数据库数据的操作。
二、什么是基本映射
知道了什么是映射,那么我们先来看一下最基本的映射关系——基本映射,即根据表结构创建相应实体类
例如:还是以Mysql数据库为例,进行说明。有如下一张表:
建立相应的实体类:User
- public class User {
- private String id;
- private String username;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String userName) {
- this.username = userName;
- }
- }
对于Hibernate来说,最重要的就是配置文件,即还需要一个User.hbm.xml文件
- <hibernate-mapping>
- <class name="com.example.hibernate.User" table="t_user">
- <id name="id">
- <generator class="uuid"/>
- </id>
- <property name="username"/>
- </class>
- </hibernate-mapping>
其他部分的代码参照上一篇文章即可。
三、建立User实体类的一些原则
1、实现无参的默认的构造函数
2、提供一个标识
3、建议不要使用fianl修饰实体类
4、建议为实体类生成setter和getter方法
对于第3条建议,如果使用了fianl关键字,那么延迟加载(load)将会无效。具体含义将会在下一篇文章中给出实例。
四、HIbernate主键生成策略
在上面User.hbm.xml配置文件中有一个标签:<generator>。它表示的是主键生成策略。主键生成策略必须配置,用来为该持久化类的实例生成唯一的标识。它有如下几种策略
uuid: 用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP地址),UUID被编码为一个32位16进制数字的字符串,它的生成是由Hibernate生成,一般不会重复UUID包含:IP地址,JVM的启动时间,系统时间和一个计算器值。
identity:MySql数据库中自增长
Sequence:Oracle数据库自增长
native:根据底层数据库能力选择identity、sequence中的一个。
assigned:手动分配主键.<generator>没有指定时的默认生成策略
foreign:使用另外一个相关联的对象的标示符。通常和<one-to-one>配合使用
五、总结
一、Hibernate概述
(一)什么是Hibernate?
Hibernate核心内容是ORM(关系对象模型)。可以将对象自动的生成数据库中的信息,使得开发更加的面向对象。这样作为程序员就可以使用面向对象的思想来操作数据库,而不用关心繁琐的JDBC。所以,Hibernate处于三层架构中的D层(持久层)。
(二)使用Hibernate的优点
1、Hibernate可以使用在java的任何项目中,不一定非要使用在java web项目中。因为Hibernate不需要类似于tomact这些容器的支持,可以直接通过一个main方法进行测试。
2、通过下面的实例,可以发现使用Hibernate可以大大减少代码量。
3、由于使用了Hibernate,代码中不涉及具体的JDBC语句,所以就方便了代码的可移植性。
二、Hibernate开发的环境搭建
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory >
- <!-- mysql数据库驱动 -->
- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
- <!-- mysql数据库名称 -->
- <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
- <!-- 数据库的登陆用户名 -->
- <property name="hibernate.connection.username">root</property>
- <!-- 数据库的登陆密码 -->
- <property name="hibernate.connection.password">root</property>
- <!-- 方言:为每一种数据库提供适配器,方便转换 -->
- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
- </session-factory>
- </hibernate-configuration>
三、HIbernate第一个实例
- import java.util.Date;
- public class User {
- private String id;
- private String username;
- private String password;
- private Date createTime;
- private Date expireTime;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- 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 Date getCreateTime() {
- return createTime;
- }
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
- public Date getExpireTime() {
- return expireTime;
- }
- public void setExpireTime(Date expireTime) {
- this.expireTime = expireTime;
- }
- }
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.example.hibernate.User">
- <id name="id">
- <generator class="uuid"/>
- </id>
- <property name="username"/>
- <property name="password"/>
- <property name="createTime"/>
- <property name="expireTime"/>
- </class>
- </hibernate-mapping>
其中的property标签是将要生成是数据库表中的字段,在这里不用关心各个字段是什么类型的。因为Hibernate会根据上面的实体类中属性的类型来决定将来表中字段的类型
- <hibernate-configuration>
- <session-factory >
- <!-- mysql数据库驱动 -->
- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
- <!-- mysql数据库名称 -->
- <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
- <!-- 数据库的登陆用户名 -->
- <property name="hibernate.connection.username">root</property>
- <!-- 数据库的登陆密码 -->
- <property name="hibernate.connection.password">root</property>
- <!-- 方言:为每一种数据库提供适配器,方便转换 -->
- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
- <span style="color:#ff0000;"><mapping resource="com/example/hibernate/User.hbm.xml"/></span>
- </session-factory>
- </hibernate-configuration>
注意:必须是“/”而不能是“.”。
- import org.hibernate.cfg.Configuration;
- import org.hibernate.tool.hbm2ddl.SchemaExport;
- /**
- * 将hbm生成ddl
- * @author BCH
- *
- */
- public class ExoprtDB {
- public static void main(String[] args) {
- //默认读取hibernate.cfg.xml文件
- Configuration cfr = new Configuration().configure();
- SchemaExport export = new SchemaExport(cfr);
- export.create(true, true);
- }
- }
到这里就可以生成User表了,但是如果直接运行ExoprtDB.java文件是不能生成User表的。因为在mysql数据中还没有建立数据库Hibernate-first。所以在mysql控制台中通过create database hibernate-first; use hibernate-first;之后再执行ExoprtDB.java文件就可以生成表了。
- import java.util.Date;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- public class Client {
- public static void main(String[] args) {
- //读取配置文件
- Configuration cfg = new Configuration().configure();
- SessionFactory factory = cfg.buildSessionFactory();
- Session session = null;
- try{
- session = factory.openSession();
- //开启事务
- session.beginTransaction();
- User user = new User();
- user.setUsername("用户名");
- user.setPassword("123");
- user.setCreateTime(new Date());
- user.setExpireTime(new Date());
- session.save(user);
- //提交事务
- session.getTransaction().commit();
- }catch(Exception e){
- e.printStackTrace();
- //回滚事务
- session.getTransaction().rollback();
- }finally{
- if(session != null){
- if(session.isOpen()){
- //关闭session
- session.close();
- }
- }
- }
- }
- }
(四)总结
java的三大框架(三)---Hibernate的更多相关文章
- 2018.11.11 Java的 三大框架:Struts+Hibernate+Spring
·定义:Java三大框架主要用来做WEN应用.Struts主要负责表示层的显示: Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作): Hibernate主要是数据持久化到数据库. ...
- Java三大框架之——Hibernate
什么是Hibernate? Hibernate是基于ORM(O:对象,R:关系,M:映射)映射的持久层框架,是一个封装JDBC的轻量级框架,主要实现了对数据库的CUPD操作. 注:CRUD是指在做计算 ...
- 三大框架之hibernate入门
hibernate入门 1.orm hibernate是一个经典的开源的orm[数据访问中间件]框架 ORM( Object Relation Mapping)对象关 ...
- 【SSH三大框架】Hibernate基础第一篇:编写第一个Hibernate程序
接下来这几章节学习的是Hibernate,Hibernate的主要作用就是用来和数据库进行连接,简化了JDBC的操作. 首先,我们创建项目,然后把Hibernate的jar包和sqlserver的驱动 ...
- 【SSH三大框架】Hibernate基础第十一篇:对继承映射的操作
在java中.类之间能够有继承关系.可是在数据库中是没有继承关系的.只是Hibernate是为了把面向对象的关系反映到数据库中.Hibernate为我们提供了3种方案: 第一.一个继承体系放在一张表中 ...
- Java_Web三大框架之Hibernate+jsp+HQL分页查询
分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...
- Java_Web三大框架之Hibernate+jsp+selvect+HQL注册用户
Hibernate比SQL语句简单多了,代码冗余少,切方便简洁明了.下面用Hibernate+jsp+selvect+HQL来实现注册用户. 第一步:编写用户实体类和Users2.hbm.xml映射. ...
- Java_Web三大框架之Hibernate配置文件(二)
下面介绍一下编写Hibernate的配置文件,使用Hibernate操作数据库. 开始部署:下载需要的jar包 下载Hibernate Hibernat ...
- 三大框架 之 Hibernate框架概述(概述、配置、核心API)
目录 Hibernate框架概述 什么是框架 hibernate简介(JavaEE技术三层架构所用到的技术) hibernate是什么框架 ORM hibernate好处 Hibernate基本使用 ...
随机推荐
- 干货分享:MySQL之化险为夷的【钻石】抢购风暴
抢购钻石不稀奇,稀奇的是有钱赚不到,事情发生在2015年5月20日,大好的日子自然少不了商家的参与.即可为您还原现场,解决思路献给各位,请欣赏Show Time,everybody~ 1.优化起因及工 ...
- php 的txt操作,加入类容
<?php $fr=fopen("./data/test.txt",'a'); //fopen(位置,打开方式) if(!$fr) { echo " error&q ...
- android退出MainActivity后onDestroy不回调
问题:有时点击back键,退出MainActivity后,app已不可见,但是onDestroy却没有被调用. 原因: 1. onBackPressed被覆盖 @Override public voi ...
- Python 3.x 使用csv模块写入数据
with open(fileName,'w',newline='') as f: self.fileNames = ['timestamp','elapsedtime'] writer = csv.D ...
- XPath
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力. XPath的需要理解的相关概念 ...
- 设置table距离顶部位置
//UIEdgeInsetsMake———— UIEdgeInsets insets = {top, left, bottom, right} self.tableView.contentInset ...
- SQLSERVER排查CPU占用高的情况
SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高 ...
- putty连接报NetWork error:connection refused
首先通过物理终端进入到linux上,手工检查ssh发现没运行 /etc/init.d/sshd status 使用rpm -V 命令可检查到ssh的软件包正常 /rpm -V openssh-serv ...
- android assets文件夹浅谈
---恢复内容开始--- 最近在研究assets文件夹的一些属性跟使用方法.根据网上一些文章.实例做一下汇总,拿出来跟大家分享下,有不足的地方还请多多指教. 首先了解一下assets是干什么用的,as ...
- 使用phantomjs实现highcharts等报表通过邮件发送(本文仅提供完整解决方案和实现思路,完全照搬不去整理代码无法马上得到效果)
前不久项目组需要将测试相关的质量数据通过每日自动生成报表展示,并自动通过将报表作为邮件正文内容知会到干系人邮箱.那么问题来了,报表生成了,但是邮件怎么发送,因为highcharts等报表都是通过JS和 ...