ORM----hibernate入门Demo(无敌详细版)
一.Hibernate(开放源代码的对象关系映射框架)简介:
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
 
四.hibernate入门Demo
该项目使用到的jar包

1.我使用的是mysql关系型数据库,先建立一个数据库,并且创建一个customer(客户信息)表


2.创建一个Customer实体类(持久化类)
持久化类是应用程序中的业务实体类,这里的持久化是指类的对象能够被持久化保存到数据库中.
Hibernate 使用普通的JAVA对象(POJO),即POJO的编程模式来进行持久化.
该类中包含的是与数据库表相对应的各个属性,这些属性通过getter/setter方法来访问,对外部隐藏了内部的实现细节.
通常持久化类的编写应嘎遵循一些规则:
1).持久化类中必须提供无参数public构造器(如果没有提供任何构造方法,虚拟机会自动提供默认构造方法,但是如果提供了其他有参数的构造方法的话
虚拟机不再提供默认构造方法,必须手动编写无参构造方法).
2).持久化类中所有属性使用private修饰,提供public的setter/getter方法
3).必须提供标识属性OID,与数据库表中逐渐对应,例如下面Customer类id属性
4).持久化类属性应尽量使用基本数据类型的包装类型,例如int换成Integer,long换成Long,目的是为了与数据库表的字段默认值null一致。(例如int是区分不开null跟0的,不赋值的int类型默认值为0)
5).持久化类不要用final修饰,使用final修饰将无法生成代理对象进行优化.
public class Customer {
    private Integer id;    //主键id
    private String name;   //客户姓名
    private Integer age;   //客户年龄
    private String sex;    //客户性别
    private String city;   //客户地址
	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(Integer id) {
		this.id = id;
	}
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the age
	 */
	public Integer getAge() {
		return age;
	}
	/**
	 * @param age the age to set
	 */
	public void setAge(Integer age) {
		this.age = age;
	}
	/**
	 * @return the sex
	 */
	public String getSex() {
		return sex;
	}
	/**
	 * @param sex the sex to set
	 */
	public void setSex(String sex) {
		this.sex = sex;
	}
	/**
	 * @return the city
	 */
	public String getCity() {
		return city;
	}
	/**
	 * @param city the city to set
	 */
	public void setCity(String city) {
		this.city = city;
	}
	//重写toString()方法
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", city=" + city + "]";
	}
}
3.编写映射文件Customer.hbm.xml
实体类Customer目前还不具备持久化操作的能力,而Hibernate需要知道实体类Customer映射到数据库 Hibernate中的哪个表,以及类中的哪个属性
对应数据库表中的哪一个字段,这些都需要在映射文件中配置.
在实体类Customer所在的包中,创建一个名称为Customer.hbm.xml的映射文件,在该文件中定义了实体类Customer的属性是如何映射到customer表的列上的
开始编写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>
<!-- name代表的是实体类名,table代表的是表名 -->
<class name="com.hck.entity.Customer" table="customer">
<!-- name=id代表的是customer类中属性 column=id代表的是table表中的字段 -->
<id name="id" column="id">
<!-- 主键生成策略 -->
<generator class="native"/>
</id>
<!-- 其他属性使用property标签来映射 -->
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="integer"/>
<property name="sex" column="sex" type="string"/>
<property name="city" column="city" type="string"/>
</class>
</hibernate-mapping>
4.编写核心配置文件hibernate.cfg.xml
Hibernate的映射文件反映了持久化类和数据库表的映射信息,
而Hibernate的配置文件则主要用来配置数据库连接以及Hibernate运行时所需要的各个属性的值.
在项目的src目录下创建一个名称为hibernate.cfg.xml的文件
xml的头部编写可以按下图所以查找复制


编写hibernate.cfg.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.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库的url -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/tb_test</property>
<!-- 数据库用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">123456</property>
<!-- 其他配置 -->
<!-- 格式化sql -->
<property name="format_sql">true</property>
<!-- 用来关联hbm配置文件 -->
<mapping resource="com/hck/entity/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
5.编写单元测试类代码如下:
1).解释一下
config=new Configuration().configure();是如何读取src目录下的hibernate.cfg.xml
跟踪代码可以看到:


默认读取src目录下的hibernate.cfg.xml文件,所以hibernate.cfg.xml文件放在src是基于约定优于配置原理的
public class HibernateTestDemo {
   //定义变量
	Configuration config;
	SessionFactory sessionFactory;
	Session session;
	Transaction transaction;
    //before表示在方法执行前执行
	@Before
    public void setUp()
    {
	  //1.加载hibernate.cfg.xml配置
	  config=new Configuration().configure();
	  //2.获取SessionFactory
	  sessionFactory=config.buildSessionFactory();
	 //3.获得一个session
	  session=sessionFactory.openSession();
	  //4.开始事务
	  transaction=session.beginTransaction();
    }
    //添加操作
    @Test
    public void insert()
    {
	  //5.操作
	  Customer customer=new Customer();
	  customer.setId(1);
	  customer.setName("zhangsan");
	  customer.setAge(20);
	  customer.setSex("m");
	  customer.setCity("guangzhou");
	  session.save(customer);
    }
    //删除操作
    @Test
     public void delete()
     {
    	//先查询
    	Customer customer=(Customer)session.get(Customer.class, 1);
    	//再删除
    	session.delete(customer);
     }
    //查询操作
    @Test
    public void select()
    {
    	Customer customer=(Customer)session.get(Customer.class, 1);
    	System.out.println(customer);
    }
    //更新操作
    @Test
    public void update()
    {
	  Customer customer=new Customer();
	  customer.setId(1);
	  customer.setName("zhangsan");
	  customer.setAge(20);
	  customer.setSex("m");
	  //修改地址为beijing
	  customer.setCity("beijing");
	  //存在就更新,不存在就执行插入操作
	  session.saveOrUpdate(customer);
    }
    //After表示在方法执行结束后执行
    @After
    public void closeTransaction()
    {
      //6.提交事务
      transaction.commit();
      //7.关闭资源
      session.close();
      sessionFactory.close();
    }
}
1)执行插入操作后,打开mysql使用select * from customer;得到的结果:

2)执行查询操作(查看控制台输出)

3.执行更新操作

4.删除操作

五.总结
超级完整版hibernate入门demo完成了,如有不懂或者问题请留言~
ORM----hibernate入门Demo(无敌详细版)的更多相关文章
- Java ORM Hibernate 入门笔记
		一.下载 官网地址:http://hibernate.org/ Hibernate下有ORM(关系型数据库).OGM(NoSQL数据库).Search(对象全文检索).Validator的工具. OR ... 
- JSP入门基础知识详细版(通俗易懂)
		JSP 第一篇: 概述.原理.周期.指令.行为.内置对象.JavaBean (一) JSP概述以及简单使用 什么是JSP? JSP全名为Java Server Pages,java服务器页面.JSP是 ... 
- 通过Spring整合hibernate并进行单元测试(详细)
		一. 没有基础hibernate基础的可以点击这里 ---------->ORM----hibernate入门Demo(无敌详细版) 这里我就不详细介绍了.. 二. hibernat.cfg.x ... 
- Hibernate入门6.Hibernate检索方式
		Hibernate入门6.Hibernate检索方式 20131128 代码下载 链接: http://pan.baidu.com/s/1Ccuup 密码: vqlv Hibernate的整体框架已经 ... 
- Hibernate(一)之Hibernate入门
		一.Hibernate入门 ssh框架体系结构 1.1.ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational ... 
- C#中缓存的使用  ajax请求基于restFul的WebApi(post、get、delete、put)  让 .NET 更方便的导入导出 Excel  .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)  C# 位运算详解  c# 交错数组  c# 数组协变  C# 添加Excel表单控件(Form Controls)  C#串口通信程序
		C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ... 
- Hibernate入门2.简单的项目开发实例
		Hibernate入门2.简单的项目开发实例 这一节通过一个简单的项目学习Hibernate项目的配置 代码下载 : 链接: http://pan.baidu.com/s/1zlgjl 密码: p34 ... 
- 走进JavaWeb技术世界13:Hibernate入门经典与注解式开发
		原文地址:Hibernate入门这一篇就够了 前言 本博文主要讲解介绍Hibernate框架,ORM的概念和Hibernate入门,相信你们看了就会使用Hibernate了! 什么是Hibernate ... 
- 三大框架之hibernate入门
		hibernate入门 1.orm hibernate是一个经典的开源的orm[数据访问中间件]框架 ORM( Object Relation Mapping)对象关 ... 
随机推荐
- WPF中的资源简介、DynamicResource与StaticResource的区别
			原文:WPF中的资源简介.DynamicResource与StaticResource的区别 什么叫WPF的资源(Resource)?资源是保存在可执行文件中的一种不可执行数据.在WPF的资源中,几乎 ... 
- BGP的一网双平面规划
			网络拓扑: XRV1 ===================================================================== # sysname XRV1# boa ... 
- 零元学Expression Blend 4 - Chapter 8 用实例了解布局容器系列-「Grid」
			原文:零元学Expression Blend 4 - Chapter 8 用实例了解布局容器系列-「Grid」 本系列将教大家以实做案例认识Blend 4 的布局容器,此章介绍的是Blend 4 里的 ... 
- Android零基础入门第42节:自定义BaseAdapter
			原文:Android零基础入门第42节:自定义BaseAdapter 在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不 ... 
- LINUX基础内容
			在Linux中,有三种基本的文件类型: 1) 普通文件 普通文件是以字节为单位的数据流,包括文本文件.源码文件.可执行文件等.文本和二进制对Linux来说并无区别,对普通文件的解释由处理该文件的应用程 ... 
- MySql 小内存优化
			MySql5.6启动内存近500M,如在小型机内存敏感的环境可能较大,下边配置会减少较多内存,至150M以下. performance_schema = OFF innodb_buffer_pool_ ... 
- Qt在各平台上的搭建qt-everywhere(Qt for windows7-64bit, Ubuntu 12.04-32bit, 嵌入式x86平台, 嵌入式arm平台)
			下载地址:http://download.qt.io/ 当进入解压好的源码包后,使用./configure –help命令,可以获得相应帮助,前面是*号的表示默认参数. +号表示该功能要求被评估,评估 ... 
- FastDFS结合FastDHT实现文件去重存储
			存储文件时,为了节省存储空间,需要实现文件去重,即同一份文件只在服务器上存储一份.一种实现是文件上传后先落到应用服务器上,计算MD5并存储到数据库中,然后决定是否上传存储服务器.这样做的缺点是应用服务 ... 
- LigerUI Dialog 滚动条问题
			LigerUI 使用Dialog时,自动显示滚动条无法隐藏.设置css 取消滚动条,不影响页面滚动条 .l-dialog-content { overflow: hidden;} 
- 【Linux】Linux相关资料
			linux相关技术资料: linux技术资料大全: http://t.cn/zYNBwFs 
