[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- ...
随机推荐
- VS2015 Cordova Ionic移动开发(四)
一.布局 Ionic模板提供了一个侧边栏菜单示例项目和标签选项卡示例项目.本案例将两个布局进行结合,简单介绍下Ionic的布局.Ionic采用自定义标签和标准Html标签相结合.相对于全部使用div方 ...
- Axis,axis2,Xfire以及cxf对比 (转)
Axis,axis2,Xfire以及cxf对比 http://ws.apache.org/axis/ http://axis.apache.org/axis2/java/core/ http:// ...
- Windows7添加SSD硬盘后重启卡住正在启动
楼主办公电脑,原来只配置了一块机械硬盘,用着总很不顺心,于是说服领导给加了块SSD固态硬盘. 操作如下: 1.在PE下分区格式化新固态硬盘,将原来机械硬盘的C盘GHOST备份后还原到新固态硬盘: 2. ...
- 寻找链表中倒数第K个结点的位置
输入一个链表,输出该链表中倒数第K个结点. struct ListNode { int m_nValue; ListNode* m_pNext; }; ListNode* FindKthToTail( ...
- jQuery慢慢啃之特效(八)
1.show([speed,[easing],[fn]])\\显示隐藏的匹配元素 //speed:三种预定速度之一的字符串("slow","normal", o ...
- java数据类型学习
java数据类型基本分为两类: 一类为基本数据类型: 数值类型: 整数类型:byte.short.int.long 浮点类型:float.double 字符类型:char 布尔类型:boolean 一 ...
- ExtJs4 学习3 combox自动加载的例子
Ext.onReady(function() { delivery_datas = [{ "Id" : "1", "Name" : &q ...
- 算法系列之图--BFS
广度优先搜索以源结点s为出发点,算法始终将已发现和未发现结点之间的边界,沿其广度方向向外扩展.也即算法需要在发现所有距离源结点s为k的所有结点之后才会去发现距离源结点距离为k+1的其他结点. talk ...
- HTML5画布
- Mvvm绑定datagrid或listview的selectItems的方法[转]
单选,很简单,将SelectedItem与ViewModel的属性进行双向绑定就OK了 多选,由于ListView的SelectedItems不能进行绑定,需要将ListView的SelectionC ...