【Hibernate一】概述及入门
crud的操作
主键的生成机制
类型
持久化类
映射文件 *.hbm.xml
配置文件 hibernate.cfg.xml
2、关系部分
一对多的单项
一对多的双向
多对多的双向
一对一
在many-to-one加一个属性unique="true"
cascade 级联
3、性能的部分
- 维护关系 inverse
- 懒载入 lazy
- 抓取策略 fetch
- 一级缓存
- 二级缓存
查询缓存
4、查询
    hql
    条件查询
显然Hibernate是ORM框架中做得比較好的一款!
- 面向对象数据库编程;
- 代码书写更加简洁;
- 具有缓存机制。提高效率;
准备条件:
.png)
| <?xml version= '1.0' encoding ='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" > <hibernate-configuration>      <session-factory >            <!-- 数据库的username -->            <property name="connection.username" >root </property>            <!-- password -->            <property name="connection.password" >root </property>            <!-- url -->            <property name= "connection.url">               jdbc:mysql:// localhost:3306/hibernate512            </property>            <!-- 方言 告诉hibernate,要操作的数据库是mysql -->            <property name="dialect" >org.hibernate.dialect.MySQLDialect </property>            <!-- 导入驱动 -->            <property name= "connection.driver_class" >               com.mysql.jdbc.Driver            </property>            <!-- validate 仅仅检查结构 update 检查结构,更新或者创建表 create 每次启动 hibernate时,都要创建表 create-drop               启动 hibernate时创建表。当 hibernate关闭时,删除表 -->            <property name= "hbm2ddl.auto">update</property >            <!--显示sql语句的输出  -->            <property name= "show_sql"> true</ property >             <property name= "format_sql"> true</ property >            <!--关联映射文件,手动加入。然后自己主动生成。  -->            <mapping resource="com/oteman/hibernate/domain/Person.hbm.xml" />      </session-factory > </hibernate-configuration> | 
| package com.oteman.hibernate.domain; public class Person {      Long pid;      String pname;      String pgender;      public Long getPid() {            return pid ;      }      public void setPid(Long pid) {            this.pid = pid;      }      public String getPname() {            return pname ;      }      public void setPname(String pname) {            this.pname = pname;      }      public String getPgender() {            return pgender ;      }      public void setPgender(String pgender) {            this.pgender = pgender;      } } | 
| <?xml version= "1.0" encoding ="utf-8"?
 > <!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.oteman.hibernate.domain.Person"  table="Person" >            <id name= "pid" column ="pid" length="5" type="java.lang.Long" >                <generator class= "increment"></generator >            </id>            <property name= "pgender" column ="gender" length="10" type="string"></ property>            <property name= "pname" column ="name" length="20" ></property>      </class > </hibernate-mapping> | 
|      @Test      public void testCreateTable(){           Configuration configuration= new Configuration();           configuration.configure();           SessionFactory sessionFactory = configuration.buildSessionFactory();      } | 
| /**       * 向数据库中添加数据       */      @Test      public void add(){           Session session = sessionFactory.openSession();           Transaction transaction = session.beginTransaction();           Person p= new Person();           p.setPgender( "男");           p.setPname( "张三");           session.save(p);           transaction.commit();           session.close();      }      /**       * 更新数据, hibernate具有快照机制,会将对象前后的值进行比較,假设发现对象的属性没有发生改变,那么就不进行update操作,能够观察 sql语句;       */      @Test      public void update(){           Session session = sessionFactory.openSession();           Transaction transaction = session.beginTransaction();           Person person=(Person) session.get(Person. class, 2l);           person.setPname( "哈哈");            /*//另外一种形式:           Person p=new Person();           p.setPgender("男");           p.setPid(2L);           p.setPname("李四");*/           session.update(person);           transaction.commit();           session.close();      }      /**       * 删除数据       */      @Test      public void delete(){           Session session= sessionFactory.openSession();           Transaction transaction = session.beginTransaction();           Person person=(Person) session.get(Person. class, 1l);           session.delete(person);           transaction.commit();           session.close();      }      /**       * 查询全部!
       */      @Test      public void query(){           Session session= sessionFactory.openSession();            List list = session.createQuery("from Person").list();           System. out.println(list.size());           session.close();      } | 
| public class GeneratroTest extends HibernateUtils{      /**       *       * 1.<id name=" pid" column="pid" type="java.lang.Long">                <generator class="increment"> </generator>            </id>       * increament形式产生的 sql语句       *    Hibernate:               select                   max( pid)               from                   person            Hibernate:               insert               into                   person                   ( pname, psex , pid)               values                   (?, ?
 , ?)            说明:               1、先得到主键的最大值               2、在最大值的基础上加1               3、上述的两步过程是由 hibernate内部完毕的       */      @Test      public void testIncrement(){           Session session =  sessionFactory.openSession();           Transaction transaction = session.beginTransaction();           Person person = new Person();            //person.setPid(11L);为increament时,自行设置的id没实用, hibernate会帮我们处理id;           person.setPname( "云三班长" );           person.setPsex( "不详");           session.save(person);           transaction.commit();           session.close();      }      /**       *       * 2.<generator class="identity"> </generator>       *       * Hibernate:          insert          into              person              ( pname, psex )          values              (?, ?)              说明:                主键的生成交给数据库来做,数据库必须支持自己主动增长机制,会出现id不连续的情况,效率比increment要高一些;       */      @Test      public void testIdentity(){           Session session =  sessionFactory.openSession();           Transaction transaction = session.beginTransaction();           Person person = new Person();            //person.setPid(11L);           person.setPname( "云三班长" );           person.setPsex( "不详");           session.save(person);           transaction.commit();           session.close();      }      /**       * 3.<generator class=" uuid"></generator>       * 主键的生成是由 hibernate内部完毕的       */      @Test      public void testUUID(){           Session session =  sessionFactory.openSession();           Transaction transaction = session.beginTransaction();           Person person = new Person();           person.setPname( "云三班长" );           person.setPsex( "不详");           session.save(person);           transaction.commit();           session.close();      }      /**       * 4.<generator class="assign"> </generator>       * 主键的生成由自己指定。       */      @Test      public void testAssigned(){           Session session =  sessionFactory.openSession();           Transaction transaction = session.beginTransaction();           Person person = new Person();           person.setPid(11L);           person.setPname( "云三班长" );           person.setPsex( "不详");           session.save(person);           transaction.commit();           session.close();      } } | 
【Hibernate一】概述及入门的更多相关文章
- 一起学习Hibernate: Hibernate01 ——  Hibernate的概述与入门案例
		一 Hibernate的介绍 1 让我们从JDBC与替代它的框架Hibernate进行一下对比. 1.1 JDBC的缺点 1) 代码结构繁琐.每次书写sql语句操作数据库都得需要很多步; 2) 是面向 ... 
- 三大框架 之 Hibernate框架概述(概述、配置、核心API)
		目录 Hibernate框架概述 什么是框架 hibernate简介(JavaEE技术三层架构所用到的技术) hibernate是什么框架 ORM hibernate好处 Hibernate基本使用 ... 
- MySql概述及入门(五)
		MySql概述及入门(五) MySQL集群搭建之读写分离 读写分离的理解 为解决单数据库节点在高并发.高压力情况下出现的性能瓶颈问题,读写分离的特性包括会话不开启事务,读语句直接发送到 salve 执 ... 
- MySQL概述及入门(四)
		MySql概述及入门(四) 什么是MySQL的锁? 数据库锁定机制,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则,简单说,就是不让别人动 总的来说,MySQL各 ... 
- MySQL概述及入门(三)
		MySql概述及入门(三) MySQL性能优化 主要优化安全和性能方面 安全方面 : 数据可持续性 性能方面 : 数据的高性能访问 性能优化——慢查询 在MySQL数据库中有一个慢查询日志功能,去获取 ... 
- MySQL概述及入门(二)
		MySql概述及入门(二) MySQL架构 逻辑架构图: 执行流程图: MySQL的存储引擎 查询数据库支持的存储引擎 执行: show engines: 多存储引擎是mysql有别于其他数据库的一大 ... 
- MySQL概述及入门(一)
		MySql概述及入门(一) 什么是MySQL? MySQL是当今主流的关系型数据库管理系统(记录是有行有列的数据库) , 可以与Oracle 和SQL Server 竞争 , 是最好RDBMS( ... 
- Hibernate学习笔记(一)—— Hibernate概述及入门
		一.Hibernatea概述 1.1 什么是Hibernate? 在介绍什么是Hibernate之前,我们先讨论一下什么是框架?框架是用来提高开发效率的,框架封装好了一些功能,我们需要使用这些功能时, ... 
- Hibernate_day01--课程安排_Hibernate概述_Hibernate入门
		Hibernate_day01 Hibernate课程安排 今天内容介绍 WEB内容回顾 JavaEE三层结构 MVC思想 Hibernate概述 什么是框架 什么是hibernate框架(重点) 什 ... 
随机推荐
- navicat批量导入数据
			1.excel表导入数据 根据数据表添加excel表内容 开始导入数据 
- Linux Shall命令入门
			Linux Shall命令入门 ifconfig //查看ip信息 service network start ... 
- BZOJ 3626: [LNOI2014]LCA 树链剖分 线段树 离线
			http://www.lydsy.com/JudgeOnline/problem.php?id=3626 LNOI的树链剖分题没有HAOI那么水,学到的东西还是很多的. 我如果现场写,很难想出来这种题 ... 
- BZOJ3619 [Zjoi2014]璀灿光华 构造+dfs
			题意:有一个\(a^3\)个小正方体组成的大正方体,其中有n个正方体会向上下左右前后六个方向中的一个发出光,正方体是透光的,被照亮的正方体有个美丽值\(g_{i}\),给出正方体的相邻关系,问美丽值之 ... 
- 20162327WJH 实验三 《敏捷开发与XP实践》 实验报告
			20162327WJH 实验三 <敏捷开发与XP实践> 实验报告 一.实验内容 1.XP基础 2.XP核心实践 3.相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<L ... 
- redisson实现基于业务的互斥锁
			虽然数据库有锁的实现,但是有时候对于数据的操作更需要业务层控制. 这个解决的问题有次面试被问到过,当时不知道怎么解决,乱说一通,今天也算是有个解决方案了 项目中有个需求,就是订单需要经过一层一层的审核 ... 
- 一文了解JVM全部垃圾回收器,从Serial到ZGC
			<对象搜索算法与回收算法>介绍了垃圾回收的基础算法,相当于垃圾回收的方法论.接下来就详细看看垃圾回收的具体实现. 上文提到过现代的商用虚拟机的都是采用分代收集的,不同的区域用不同的收集器. ... 
- 清北学堂学习总结 day2 字符串 练习
			1.hash表(哈希表) codevs 2147 数星星--简单哈希 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小明 ... 
- PHP -- 模拟测试上传文件
			FROM :http://web.itivy.com/article-740-1.html QQ上传文件为什么那么快? “QQ上传大文件/QQ群发送大文件时,可以在极短的时间内完成”是如何做到的. 有 ... 
- linq to datatable 和lambda查询datatable
			用Linq查询DataTable static DataTable table = new DataTable(); static DataColumn dc = new DataColumn(); ... 
