[Hibernate] 基本增删查改
本文记录,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] 基本增删查改的更多相关文章
- hibernate基础增删查改简单实例
hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子 建一个web-project 我这里用了junit单元测试环境来进行增删查改的测试,别的 ...
- java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)
1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件 准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...
- SSH框架的多表查询和增删查改 (方法一)上
原创作品,允许转载,转载时请务必标明作者信息和声明本文章==> http://www.cnblogs.com/zhu520/p/7772823.html 因为最近在做Android 练习的 ...
- SSH框架的多表查询和增删查改 (方法一)中
原创作品,允许转载,转载时请务必标明作者信息和声明本文章==>http://www.cnblogs.com/zhu520/p/7774144.html 这边文章是接的刚刚前一遍的基础上敲的 ...
- SSH框架的多表查询(方法二)增删查改
必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html 一:在前一个方法(http://www.cnblogs.com/zhu520/p ...
- SSH2 增删查改实例
(一)引入包 (共73个,不一定都需要,但是我的项目是这么多,经过调试,没有包冲突) (二)创建数据库表 建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄. 语句如下 ...
- 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)
1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...
- 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
- 3.EF 6.0 Code-First实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...
随机推荐
- MVC+EF 的增删改查操作
1. //创建EF映射对象数据集 static Models.db_JiaoYouEntities DbDeleteData = new Models.db_JiaoYouEntities(); 2. ...
- SQL SERVER 查看死锁的存储过程
end
- Xcode的控制台调试命令
XCode4.0以后,编译器换成了LLVM 编译器 2.0 与以前相比,更加强大:1.LLVM 编译器是下一带开源的编译技术.完全支持C, Objective-C, 和 C++.2.LLVM 速度比 ...
- mysqldump备份、还原数据库路径名含有空格的处理方法(如:Program Files)
虽然以下的方法也可以解决,不过最简单直接的,还是直接在路径前后加双引号-" ",这个方法简单有效. 首先要说明的是mysqldump.exe在哪里不重要,重要的是要处理好路径中的非 ...
- sicily-2499 平方数
题目分析: 一个数可以表示成四种状态,所以可以用一个状态数组来存放该数由几个数的平方和表示.1.表示该数本身是完全平方.2.表示该数是由两个平方和3.表示三个.4.表示4个.一次遍历找出本身是完全平方 ...
- SGU 195. New Year Bonus Grant
时间限制:0.75s 空间限制:4M 题意: 在一颗树(最多500000个节点)中,可以对节点染色,但是一个节点染了色后,它的父节点和兄弟节点都不能再染了,求最大的染色节点数,并输出所有染色节点. S ...
- 【BZOJ1500】【块状链表】维修数列
Description Input 输入文件的第1行包含两个数N和M,N表示初始时数列中数的个数,M表示要进行的操作数目.第2行包含N个数字,描述初始时的数列.以下M行,每行一条命令,格式参见问题描述 ...
- IoC模式(控制反转)(转)
转自:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html,写的很好,用C#代码解释控制反转,然后更进一步,提到依赖注入是控制反转的 ...
- 百度分享 ajax 或分页后显示不出问题解决方案
自从用了AJAX后,JS重新加载问题就如家常便饭般层出不穷啊.没有系统学习过js感觉亚历山大. 百度后,还是找到了解决办法. 百度分享创建了一个全局对象window._bd_share_main.通过 ...
- php基础知识【函数】(7)url和ob函数
一.URl函数 1.urlencode -- 编码 URL 字符串 2.urldecode -- 解码已编码的 URL 字符串 3.rawurlencode -- 按照 RFC 1738 对 URL ...