一、hibernate基本开发步骤

1.引入包,官网下载的包,目录\lib\required下的jar都加进去,这里使用的是 hibernate-release-5.2.1.Final

2.编写配置文件hibernate.cfg.xml,可用hibernate Tools自动生成

 <?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.url">jdbc:oracle:thin:@localhost:1521:TEST</property>
<!-- 连接驱动 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 数据库登录名 -->
<property name="hibernate.connection.username">system</property>
<!-- 数据库密码 -->
<property name="hibernate.connection.password">XXXXXXXX</property>
<!-- 数据库方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle12cDialect</property>
<!-- 是否打印sql -->
<property name="show_sql">true</property>
<!-- 是否格式化sql -->
<property name="format_sql">true</property> <!-- 添加对应实体类的映射文件 -->
<mapping resource="com/lzq/model/Tb_User.hbm.xml" /> </session-factory>
</hibernate-configuration>

3.编写实体类,需要遵循javabeans的实体规范

 package com.lzq.model;

 import java.util.Date;

 /**
* javabeans的实体规范
* 1.公有的类
* 2.提供公有的不带参数的默认构造方法
* 3.属性私有
* 4.属性setter/getter封装
*/
public class Tb_User { private String id;
private String name;
private int sex;
private Date birthday; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getSex() {
return sex;
} public void setSex(int sex) {
this.sex = sex;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public Tb_User(String id, String name, int sex, Date birthday) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.birthday = birthday;
} public Tb_User() {
}; @Override
public String toString() {
return "name:" + this.name + ";sex:" + this.sex + ";birthday:" + this.birthday;
}
}

4.编写对应实体类的映射文件并添加到配置文件中

 <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-7-16 11:24:17 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.lzq.model.Tb_User" table="TB_USER">
<id name="id" type="java.lang.String">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="sex" type="integer">
<column name="SEX" />
</property>
<property name="birthday" type="date">
<column name="BIRTHDAY" />
</property>
</class>
</hibernate-mapping>

5.调用hibernate api,使用的Junit测试

二、hibernate接口调用步骤

1.创建配置对象 Configuration ,用他读取了hibernate.cfg.xml,代表了应用程序到数据库的配置信息

Configuration config = new Configuration();

2.创建会话工厂SessionFactory,他是生成session的工厂

sessionFactory = config.configure().buildSessionFactory();

3.获取会话对象

session = sessionFactory.openSession();//一个session就是一个数据库连接

session = sessionFactory.getCurrentSession();//使用了单例模式,每次创建相同的对象

4.开启事务

transaction = session.beginTransaction();

5.调用get , load, delete, save, update增删改查

6.提交事务,更新到数据库

transaction.commit();

7.如果openSession,用完后需要显示的关闭

session.close();

如果是getCurrentSession,再提交事务后,会自动关闭

8.关闭Session工厂

sessionFactory.close();

测试代码:

 package Test;

 import java.util.Date;
import java.util.UUID; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.lzq.model.Tb_User; public class UserTest { private SessionFactory sessionFactory;
private Session session;
private Transaction transaction; @Before
public void init() {
// 创建配置对象
Configuration config = new Configuration();
// 创建会话工厂对象
sessionFactory = config.configure().buildSessionFactory();
// 会话对象
session = sessionFactory.openSession();
// 开启事务
transaction = session.beginTransaction(); } @After
public void destory() {
transaction.commit();// 提交事务
session.close();// 关闭会话
sessionFactory.close();// 关闭会话工厂
} @Test
public void testGetUser(){
Tb_User u = session.get(Tb_User.class, "057138ac-c842-4aba-8662-0ba9a5b343de");
System.out.println(u);
} /**
* load 方法执行后返回的是一个代理对象,只有再使用到非主键的属性时才会发送sql语句; load 查询出来为空会有异常 org.hibernate.ObjectNotFoundException
* */
@Test
public void testLoadUser(){
Tb_User u = session.load(Tb_User.class, "e662fa4f-ebf2-458f-a166-0ce9bb5c3cb6");
System.out.println(u);
} /**
* get 方法执行后 立即查询数据库,返回实体类的对象类型
* */
@Test
public void testUpdateUser() {
// 生成一个用户对象
Tb_User u = session.get(Tb_User.class, "057138ac-c842-4aba-8662-0ba9a5b343de");
u.setName("TestObj111");
session.update(u);
System.out.println(u);
} @Test
public void testDeleteUser() {
// 生成一个用户对象
Tb_User u = session.get(Tb_User.class, "057138ac-c842-4aba-8662-0ba9a5b343de");
session.delete(u);
u = session.get(Tb_User.class, "057138ac-c842-4aba-8662-0ba9a5b343de");
System.out.println(u);
} @Test
public void testSaveUser() {
// 生成一个用户对象
Tb_User u = new Tb_User(getUUID(), "沈七", 1, new Date());
session.save(u);
} private String getUUID() {
UUID uuid = UUID.randomUUID();
return uuid.toString();
}
}

最后附上完整的Demo 供参考:http://pan.baidu.com/s/1nuZA2LV

Hibernate学习笔记--------1.单表操作的更多相关文章

  1. 学习MySQL之单表操作(二)

    ##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...

  2. day 46 Django 学习3 数据库单表操作以及反向解析

    前情提要: Django 已经学了不少了, 今天学习链接数据库的操作.以及相关的反向解析等 一:反向解析 1:反向解析模板层 跳转时设定url会随着前面的路由改变而改变         2:反向解析之 ...

  3. JavaScript学习笔记——对表单的操作

    javascript-对表单的操作实例讲解 <form name="myform" id="form1" action="" meth ...

  4. Hibernate学习笔记三 多表

    一对多|多对一 表中的表达 实体中的表达 实体代码: package com.yyb.domain; import java.util.HashSet; import java.util.Set; p ...

  5. mysql学习笔记--数据库单表查询

    一.查询语句 1.  select [选项] 列名 [from 表名]  [where 条件]  [order by 排序]  [group by 分组]  [having 条件]  [limit 限 ...

  6. hibernate学习笔记(6)组件属性以及单表操作

    组件属性:实体类中的某个属性属于用户自定义类的对象: 作用:将两个实体类合并在一起组建成一个表 在hbm.xml文件中配置: 格式: <component name="取的名字&quo ...

  7. Django学习笔记(7)——单表操作和多表操作

    单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...

  8. Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法

    Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...

  9. Hibernate单表操作

    单一主键 assigned:由Java应用程序负责生成(即手工的赋值) native:由底层的数据库自动的生成标示符,如果是MySQL就是auto_increment,如果是Oracle就是seque ...

随机推荐

  1. 5、四大组件之一-Activity与Intent

    一.Activity的定义及作用 1)官方定义:Activity是Android应用程序提供交互界面的一个重要组件 . 也是Android最重要的组件之一 2)Activity是业务类 , 是承载应用 ...

  2. 【原】Redis分区

    Redis高级篇 分区 为什么分区? Redis中的分区主要有两个目的: 允许用多台机器的内存存放更大的数据集.如果没有分区,那么你只能存放单台机器内存的最大值的数据集. 允许用多核和多台机器提高计算 ...

  3. 【译】 AWK教程指南 6在AWK程序中使用Shell命令

    awk程序中允许调用Shell指令,并提供管道解决awk与系统间数据传递的问题.所以awk很容易使用系统资源,读者可利用这个特点来编写某些适用的系统工具. 范例:写一个awk程序来打印出线上人数. 将 ...

  4. sql-表值函数tvf

    带有参数的视图 create function fn_fenye (@count as int,@page as int) returns table as return select * from ...

  5. Storm入门

    Storm框架入门 1 Topology构成 和同样是计算框架的Mapreduce相比,Mapreduce集群上运行的是Job,而Storm集群上运行的是Topology.但是Job在运行结束之后会自 ...

  6. poj1848 Tree

    .....是我多想了. 我想开f[][0~3],看到百度上的题解都是[0~2]的,我就改了 方程不是特别难想.. f代表最小代价 f[i][0]是子树有环过i f[i][1]是子树除了i都成环了 f[ ...

  7. HDU-4664 Triangulation 博弈,SG函数找规律

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664 题意:一个平面上有n个点(一个凸多边形的顶点),每次可以连接一个平面上的两个点(不能和已经连接的 ...

  8. 【C语言】-选择结构-if语句

    if语句:也可称条件语句,是根据所给定条件的值是真还是假决定执行不同的分支. if语句有单分支.双分支.多分支以及if语句的嵌套等多种形式. 单分支if语句: if (条件表达式) { 语句组1; } ...

  9. Qt学习笔记-1 开发环境建立

    关于Qt在这里不做过多介绍,吸引我的地方是有几点: 1.用C++开发语言: 2.多平台(wWindows.MAC.Linux.Android等): 3.界面所见几所得.其他的可以百度上了解: 从本文开 ...

  10. android 数据存储操作之SQLite

    一. SQLite介绍 SQLite是android内置的一个很小的关系型数据库. 二. SQLiteOpenHelper的使用方法 ①SQLiteOpenHelper是一个辅助类来管理数据库的创建和 ...