1.1 问题

使用Hibernate实现对员工表的增、删、改、查。

1.2 方案

Hibernate使用步骤:

  1. 导入Hibernate包,以及数据库驱动包。
  2. 引入Hibernate主配置文件hibernate.cfg.xml。
  3. 创建实体类。
  4. 创建映射关系文件。
  5. 使用Hibernate常用API执行增删改查操作。

1.3 步骤

实现此案例需要按照如下步骤进行。

环境为:myeclipse 6.5 ,mysql 5.0 ,Hibernate 3 。

步骤一:准备工作创建员工表EMP,建表语句如下:

CREATE TABLE `emp` (
`ID` INT(4) NOT NULL AUTO_INCREMENT,
`NAME` VARCHAR(50) NOT NULL,
`AGE` INT(11) DEFAULT NULL,
`SALARY` DOUBLE(7,2) DEFAULT NULL,
`MARRY` CHAR(1) DEFAULT NULL,
`BIRTHDAY` DATE DEFAULT NULL,
`LAST_LOGIN_TIME` DATE DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

创建一个WEB项目,名为Hibernate。

步骤二:导入Hibernate开发包,以及数据库驱动包,完成后项目的包结构如下图:

网盘下载jar包: http://yunpan.cn/cmRG5gzdMtGMX  访问密码 3747

步骤三:引入Hibernate主配置文件

将Hibernate主配置文件hibernate.cfg.xml复制到项目中,放在src根路径下。并在主配置文件中配置好数据库连接信息,以及Hibernate框架参数,代码如下:

<?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>
<!-- 数据库连接信息,根据自己的数据库进行配置--> <property name="connection.url">jdbc:mysql://localhost:3306/souvc</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- Hibernate配置信息 -->
<!-- dialect方言,用于配置生成针对哪个数据库的SQL语句 -->
<property name="dialect">
<!-- 方言类,Hibernate提供的,用于封装某种特定数据库的方言 -->
<!-- org.hibernate.dialect.OracleDialect -->
org.hibernate.dialect.MySQLDialect
</property>
<!-- Hibernate生成的SQL是否输出到控制台 -->
<property name="show_sql">true</property>
<!-- 将SQL输出时是否格式化 -->
<property name="format_sql">true</property> </session-factory>
</hibernate-configuration>

步骤四:创建实体类

创建包com.souvc.entity,并在该包下创建员工表对应的实体类Emp.java,用于封装员工表的数据,代码如下:

package comsouvc.entity;

import java.sql.Date;
import java.sql.Timestamp; public class Emp {
private Integer id;
private String name;
private Integer age;
private Double salary;
private Boolean marry;
private Date birthday;
private Timestamp lastLoginTime; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Double getSalary() {
return salary;
} public void setSalary(Double salary) {
this.salary = salary;
} public Boolean getMarry() {
return marry;
} public void setMarry(Boolean marry) {
this.marry = marry;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public Timestamp getLastLoginTime() {
return lastLoginTime;
} public void setLastLoginTime(Timestamp lastLoginTime) {
this.lastLoginTime = lastLoginTime;
}
}

步骤五:创建映射关系文件

在com.souvc.entity包下,创建员工实体类的映射关系文件,名为Emp.hbm.xml,并在该文件中配置实体类和表的关系,以及类中属性和表中字段的关系,代码如下:

<?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.souvc.entity.Emp" table="emp">
<!-- 配置主键属性和字段的关系 -->
<id name="id" type="java.lang.Integer" column="id">
<!-- 用来指明主键的生成方式 -->
<!--
<generator class="sequence">
<param name="sequence">emp_seq</param>
</generator>
-->
<generator class="native">
</generator>
</id> <!-- 配置实体类中属性与表中字段的关系 -->
<property name="name" type="java.lang.String" column="name" />
<property name="age" type="java.lang.Integer" column="age" />
<property name="salary" type="java.lang.Double" column="salary" />
<property name="birthday" type="java.sql.Date"
column="birthday" />
<property name="lastLoginTime" type="java.sql.Timestamp"
column="last_login_time" />
</class>
</hibernate-mapping>

步骤六:声明映射关系文件

在主配置文件hibernate.cfg.xml中,声明映射关系文件Emp.hbm.xml,代码如下:

<!-- 声明映射关系文件 -->
<mapping resource="com/souvc/entity/Emp.hbm.xml" />

完成代码如下:

<?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>
<!-- 数据库连接信息,根据自己的数据库进行配置
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:xe
</property>
<property name="connection.username">lhh</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">
oracle.jdbc.OracleDriver
</property>
--> <property name="connection.url">jdbc:mysql://localhost:3306/souvc</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- Hibernate配置信息 -->
<!-- dialect方言,用于配置生成针对哪个数据库的SQL语句 -->
<property name="dialect">
<!-- 方言类,Hibernate提供的,用于封装某种特定数据库的方言 -->
<!-- org.hibernate.dialect.OracleDialect -->
org.hibernate.dialect.MySQLDialect
</property>
<!-- Hibernate生成的SQL是否输出到控制台 -->
<property name="show_sql">true</property>
<!-- 将SQL输出时是否格式化 -->
<property name="format_sql">true</property> <!-- 声明映射关系文件 -->
<mapping resource="com/souvc/entity/Emp.hbm.xml" /> </session-factory>
</hibernate-configuration>

步骤七:创建Session工具类

创建HibernateUtil工具类,用于创建Session对象,代码如下:

package com.souvc.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static SessionFactory sessionFactory; static {
// 加载Hibernate主配置文件
Configuration conf = new Configuration();
conf.configure("/hibernate.cfg.xml");
sessionFactory = conf.buildSessionFactory();
} /**
* 创建session
*/
public static Session getSession() {
return sessionFactory.openSession();
} public static void main(String[] args) {
System.out.println(getSession());
}
}

输出效果:

SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])

步骤八:练习使用Hibernate对员工表进行增删改查

创建包com.souvc.test,并在该包下创建一个JUNIT测试类,并在类中使用Hibernate写出对EMP表的增删改查的方法,代码如下:

package com.souvc.test;

import java.sql.Date;
import java.sql.Timestamp;
import java.util.List; import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import com.souvc.util.HibernateUtil;
import comsouvc.entity.Emp; /**
* 演示Hibernate的基本使用
*/
public class TestEmp {
/**
* 新增emp
*/
@Test
public void add() {
// 模拟要新增的emp
Emp e = new Emp();
e.setName("ggg");
e.setAge(29);
e.setMarry(false);
e.setSalary(8000.00);
e.setBirthday(Date.valueOf("1983-10-20"));
e.setLastLoginTime(new Timestamp(System.currentTimeMillis()));
// 获取session
Session session = HibernateUtil.getSession();
// 开启事务
Transaction ts = session.beginTransaction();
try {
// 执行新增
session.save(e);
// 提交事务
ts.commit();
} catch (HibernateException e1) {
e1.printStackTrace();
// 回滚事务
ts.rollback();
} finally {
session.close();
}
} /**
* 根据ID查询emp
*/
@Test
public void findById() {
Session session = HibernateUtil.getSession();
Emp emp = (Emp) session.get(Emp.class, 1);
System.out.println(emp.getName());
System.out.println(emp.getBirthday());
System.out.println(emp.getLastLoginTime());
session.close();
} /**
* 修改emp
*/
@Test
public void update() {
Session session = HibernateUtil.getSession();
// 查询要修改的数据
Emp emp = (Emp) session.get(Emp.class, 1);
// 开启事务
Transaction ts = session.beginTransaction();
try {
// 模拟修改数据
emp.setName("ee");
emp.setAge(20);
// 执行修改
session.update(emp);
// 提交事务
ts.commit();
} catch (HibernateException e) {
e.printStackTrace();
// 回滚事务
ts.rollback();
} finally {
// 关闭连接
session.close();
}
} /**
* 删除emp
*/
@Test
public void delete() {
Session session = HibernateUtil.getSession();
Emp emp = (Emp) session.get(Emp.class, 1);
Transaction ts = session.beginTransaction();
try {
session.delete(emp);
ts.commit();
} catch (HibernateException e) {
e.printStackTrace();
ts.rollback();
} finally {
session.close();
}
} /**
* 查询全部emp
*/
@Test
public void findAll() {
String hql = "from Emp";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
List<Emp> emps = query.list();
for (Emp e : emps) {
System.out.println(e.getName());
}
session.close();
}
}

九、实例的效果图如下:

增加:

通过id查询:

查询全部:

更新:

删除:

温馨提示:注意数据库要存在id为1 的数据,才能进行这些数据的操作。根据自己里面的数据来定id。

源码如下: http://yunpan.cn/cmR97XCh6SvB6  访问密码 afb4

Hibernate案例-------基于xml配置,使用Hibernate实现对员工表的增、删、改、查功能的更多相关文章

  1. MyBatis的配置与使用(增,删,改,查)

    ---恢复内容开始--- Mybatis入门介绍 一.MyBatis介绍 什么是MyBtis? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框 ...

  2. Sping MVC不使用任何注解处理(jQuery)Ajax请求(基于XML配置)

    1. Spring Spring框架是一个轻量级的解决方案,是一个潜在的一站式商店,用于构建企业就绪的应用程序.Spring框架是一个Java平台,为开发Java应用程序提供全面的基础架构支持.Spr ...

  3. Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

    本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...

  4. Unit03: Spring Web MVC简介 、 基于XML配置的MVC应用 、 基于注解配置的MVC应用

    Unit03: Spring Web MVC简介 . 基于XML配置的MVC应用 . 基于注解配置的MVC应用 springmvc (1)springmvc是什么? 是一个mvc框架,用来简化基于mv ...

  5. [刘阳Java]_Spring AOP基于XML配置介绍_第9讲

    基于注解配置的Spring AOP固然简单,但是这节我们会给大家介绍基于XML配置的AOP是如何应用的.为什么这么说了,因为后面我们还会介绍到Spring对Dao操作的事务管理(基于AOP的XML文件 ...

  6. 【Spring Framework】Spring入门教程(二)基于xml配置对象容器

    基于xml配置对象容器--xml 标签说明 alias标签 作用:为已配置的bean设置别名 --applicationContext.xml配置文件 <?xml version="1 ...

  7. struts_20_对Action中所有方法、某一个方法进行输入校验(基于XML配置方式实现输入校验)

    第01步:导包 第02步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...

  8. struts2视频学习笔记 22-23(基于XML配置方式实现对action的所有方法及部分方法进行校验)

    课时22 基于XML配置方式实现对action的所有方法进行校验   使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类 ...

  9. 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP

    上节我们提到了使用基于注解实现的AOP,这节我们将用基于xml配置的方式来实现的AOP. 1.首先建立一个类,作为切面类,这个类主要用来实现注解中各种通知要实现的方法. package com.yan ...

随机推荐

  1. Ajax学习整理

    什么是ajax?W3School中给ajax的定义是: 1.AJAX = 异步 JavaScript 和 XML. 2.AJAX 是一种用于创建快速动态网页的技术. 3.通过在后台与服务器进行少量数据 ...

  2. EF增删查改(三)------终极版

    1.Add #region 1.1 新增学生信息(定义成Int类型,返回受影响的行数) /// <summary> /// 新增学生信息 /// </summary> /// ...

  3. Winform开发框架之通用数据导入导出操作的事务性操作完善

    1.通用数据导入导出操作模块回顾 在我的Winfrom开发框架里面,有一个通用的导入模块,它在默默处理这把规范的Excel数据导入到不同的对象表里面,一直用它来快速完成数据导入的工作.很早在随笔< ...

  4. PHPWind 8.7中插件金币竞价插件的漏洞

    尽管pw团队解散,但无数站点仍在运行. 该插件的名字叫jbjingpai 无意中看到这样一篇帖子,说有漏洞 http://www.phpwind.net/read/1716722 ,不是空穴来风,查一 ...

  5. Ubuntu配置任意版本的apt-get镜像

    我们知道,迄今为止,Ubuntu已有多个发行版,如11.04.11.10,以至于现在最新的16.*.而我们平常通过apt-get来安装软件,如果OS版本不同,那么镜像源的配置就不同,否则就会出现找不到 ...

  6. Python语言规范及风格规范

    语言规范: http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_ ...

  7. StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's All About Performance

    http://highscalability.com/blog/2014/7/21/stackoverflow-update-560m-pageviews-a-month-25-servers-and ...

  8. Vue混合

    gitHub地址: https://github.com/lily1010/vue_learn/tree/master/lesson13 一 定位 混合以一种灵活的方式为组件提供分布复用功能.混合对象 ...

  9. SPJS Upload for SharePoint: Custom upload page for uploading documents to various document libraries in a site collection

    http://spjsblog.com/2013/12/08/spjs-upload-for-sharepoint-custom-upload-page-for-uploading-documents ...

  10. Arcengine实现创建网络数据集札记(一)

    一 引子 网络数据集,GIS空间分析基础的理论和知识,是最短路径分析.连通性分析等其他空间分析技术的数据基础. 以往,网络数据集的研究很少,此次项目开发过程中,对网络数据集以及arcengine创建网 ...