本文记录,Java 应用通过 Hibernate 对数据库 MySQL 进行基本的增删改查操作,即CRUD。

本例子的目录结构如下

hibernate.cfg.xml 存储数据库信息,如数据库类型,账号密码,数据库名称

Empoyee.hbm.xml,声明 java 简单对象和数据库表结构的对应关系

Employee.java,java 简单对象,用于声明数据结构

ManageEmployee,管理 Employee,并对外提供操作 Employee 对象数据的接口。

App.java,演示本案例

代码详情

在数据库中,创建表结构

create table EMPLOYEE (
id INT NOT NULL auto_increment,
first_name VARCHAR(20) default NULL,
last_name VARCHAR(20) default NULL,
salary INT default NULL,
PRIMARY KEY (id)
);

创建简单对象类, POJO(Plain Old Java Object)。在 Java 中定义 Employee 的数据结构。

package tony.hibernateTest;

public class Employee {
private int id;
private String firstName;
private String lastName;
private int salary; public Employee(){
}
public Employee(String fname, String lname, int salary){
this.firstName = fname;
this.lastName = lname;
this.salary = salary;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}

在 xml 文件中,将 java 的简单类 Employee 和数据库 employee 的表结构建立映射关系。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="tony.hibernateTest.Employee" table="employee">
<id name="id" type="int" column="id"> </id>
<property name="firstName" column="first_name" type="string"/>
<property name="lastName" column="last_name" type="string"/>
<property name="salary" column="salary" type="int"/> </class> </hibernate-mapping>

hibernate.cfg.xml,提供数据库相关信息,例如数据类型,账号密码等。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"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> <!-- Assume test is the database name -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost/hibernateTest
</property>
<property name="hibernate.connection.username">
username
</property>
<property name="hibernate.connection.password">
password
</property> <!-- List of XML mapping files -->
<mapping resource="Employee.hbm.xml"/> </session-factory>
</hibernate-configuration>

ManageEmployee,Employee 的操作工具类。对业务层提供操作 Employee 的接口。

package tony.hibernateTest;

import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; public class ManageEmployee { private static SessionFactory factory;
{
factory = new Configuration().configure().buildSessionFactory();
} /**
* Add an employee record into database.
* @param fname
* @param lname
* @param salary
* @return
*/
public Integer addEmployee( String fname, String lname, int salary ){ Session session = factory.openSession();
Transaction tx = null;
Integer employeeId = null; tx = session.beginTransaction(); Employee employee = new Employee(fname, lname, salary);
employeeId = (Integer)session.save(employee);
tx.commit(); return employeeId;
} public void listEmployees(){
Session session = factory.openSession();
Transaction tx = null; tx = session.beginTransaction();
List<Employee> employees = session.createQuery("FROM Employee").list();
for (Employee ee : employees){
System.out.println(ee.getId() + ", " + ee.getFirstName() + ", " + ee.getLastName() + ", " + ee.getSalary());
}
tx.commit();
} public List<Employee> getAllEmployees(){
Session session = factory.openSession();
Transaction tx = null; tx = session.beginTransaction();
List<Employee> employees = session.createQuery("FROM Employee").list();
tx.commit();
return employees;
} /**
* update salary of the specified employee in database
* @param employeeId
* @param salary
*/
public void updateEmployee(Integer employeeId, int salary){
Session session = factory.openSession();
Transaction tx = null; tx = session.beginTransaction();
Employee ee = session.get(Employee.class, employeeId);
ee.setSalary(salary);
tx.commit();
} public void deleteEmployee(Integer employeeId){
Session session = factory.openSession();
Transaction tx = null; tx = session.beginTransaction();
Employee ee = session.get(Employee.class, employeeId);
session.delete(ee);
tx.commit();
}
}

App.java,Hibernate 增删该查功能演示类。创建 employee 的功能类 ManageEmployee,通过 ManageEmployee 提供的接口,进行增加、更新、删除 MySQL 中数据。

package tony.hibernateTest;

import java.util.List;

public class App
{
public static void main( String[] args )
{
ManageEmployee me = new ManageEmployee();
int empId1 = me.addEmployee("aa", "bb", 11);
int empId2 = me.addEmployee("cc", "ff", 22); List<Employee> employees = me.getAllEmployees(); Employee firstEmp = employees.get(0);
me.updateEmployee(firstEmp.getId(), firstEmp.getSalary() + 10); Employee lastEmp = employees.get(employees.size() - 2);
me.deleteEmployee(lastEmp.getId()); me.listEmployees();
}
}

在 pom.xml 中,声明使用到的依赖,通过 maven 进行加载。

    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.3.Final</version>
</dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>

参考资料

Hibernate - Examples, tutorialspoint

[Hibernate] 基本增删查改的更多相关文章

  1. hibernate基础增删查改简单实例

    hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子 建一个web-project 我这里用了junit单元测试环境来进行增删查改的测试,别的 ...

  2. java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)

    1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...

  3. SSH框架的多表查询和增删查改 (方法一)上

    原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>  http://www.cnblogs.com/zhu520/p/7772823.html   因为最近在做Android 练习的 ...

  4. SSH框架的多表查询和增删查改 (方法一)中

    原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>http://www.cnblogs.com/zhu520/p/7774144.html   这边文章是接的刚刚前一遍的基础上敲的  ...

  5. SSH框架的多表查询(方法二)增删查改

     必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html  一:在前一个方法(http://www.cnblogs.com/zhu520/p ...

  6. SSH2 增删查改实例

    (一)引入包 (共73个,不一定都需要,但是我的项目是这么多,经过调试,没有包冲突) (二)创建数据库表 建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄. 语句如下 ...

  7. 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)

    1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...

  8. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  9. 3.EF 6.0 Code-First实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...

随机推荐

  1. (转)ecshop产品详情页显示不清晰

    详情页面的商品图片的设置方法 后台商店设置-显示设置-显示设置(就是这里,商品图片宽度和高度设置的大点就行了,放大镜效果也清晰了) 按照您详情页面图片的实际显示大小来添写. 商品管理-图片批量处理,这 ...

  2. 完全卸载oracle

    今天在网上看到有位网友写的篇日志,感觉蛮好的,一般卸载oracle有4个地方需求注意:1)Services,2)software,3eventlog,4)path. 1.关闭 oracle 所有的服务 ...

  3. 在window系统下配置login.sql

    在window系统下配置login.sql 他的位置是登录用户的文件夹,我的win7系统位置是: C:\Users\Administrator 我的login.sql下载地址: http://file ...

  4. js作用域与作用域链

    一直对Js的作用域有点迷糊,今天偶然读到JavaScript权威指南,立马被吸引住了,写的真不错.我看的是第六版本,相当的厚,大概1000多页,Js博大精深,要熟悉精通需要大毅力大功夫. 一:函数作用 ...

  5. 原型链和new

    http://www.cnblogs.com/objectorl/archive/2010/01/11/Object-instancof-Function-clarification.html 构造器 ...

  6. 页面加载完成,但ie进度条一直加载

    页面ajax执行完删除等操作,会刷新当前页面,如果前端框架是左右iframe格式 我的前端页面提示用asyncBox,可能iframe和asyncBox的影响,出现这种情况: 网上大多数的说法是 页面 ...

  7. js获取屏幕(设备)宽高

    平常获取设备的宽高无非就那几 <script language="javascript"> var h = ""; h += " 网页可见 ...

  8. PHP 用户注册

    注册页面 reg.html 负责收集用户填写的注册信息.教程里只列出关键的代码片段,完整的代码附在本节最后. 注册表单 <fieldset> <legend>用户注册</ ...

  9. php 拓展 Filter 过滤器

    简介       Filter,它的作用就和他的名字一样——过滤.过滤规则成为过滤器,Filter内置了多个常用过滤器,根据过滤器功能的不 同,可以分成净化过滤器(Sanitization)和验证过滤 ...

  10. jQuery 树形结构

    强大的jquery.ztree树形菜单插件支持多种树形菜单导航 http://www.17sucai.com/pins/2259.html 演示: http://www.17sucai.com/pin ...