Hibernate CRUD操作
版权声明:本文为博主原创文章,如需转载请标注转载地址
博客地址:http://www.cnblogs.com/caoyc/p/5594789.html
对于Hibernate的增删改查,我们还是用一个案例来说明
下面是整个项目的目录结构:

一、com.mypro.domain包
1、封装person域模型
package com.mypro.domain;
public class Person {
private int id;
private String name;
private int age;
private String gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age
+ ", gender=" + gender + "]";
}
public Person(int id, String name, int age, String gender) {
super();
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
public Person() {
super();
}
}
Person.java
2、定义QueryResult用来返回分页查询结果集以及表总所有记录数据的封装
package com.mypro.domain;
import java.util.List;
public class QueryResult {
//返回数据库中某表总的记录数
private long count;
//返回结果集
private List list;
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public QueryResult(long count, List list) {
super();
this.count = count;
this.list = list;
}
public QueryResult() {
super();
}
}
QueryResult.java
3、定义Person类和数据库表的映射关系
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.mypro.domain">
<class name="Person" table="person">
<id name="id" column="Id" type="int">
<generator class="native"></generator>
</id>
<property name="name" column="name" type="string"></property>
<property name="age" column="Age" type="int"></property>
<property name="gender" column="Gender" type="string"></property>
</class>
</hibernate-mapping>
Person.hbm.xml
二、com.mypro.dao包
1、定一个IPerson的接口,以及接口需要实现的方法
package com.mypro.dao; import java.util.List; import com.mypro.domain.Person;
import com.mypro.domain.QueryResult; public interface IPerson { /**
* 添加Person
* @param person
*/
void add(Person person); /**
* 通过ID删除Person
* @param id
*/
void delete(int id); /**
* 修改Person信息
* @param person
*/
void update(Person person); /**
* 通过ID获取Person
* @param id
* @return
*/
Person get(int id); /**
* 获取所有的Person
* @return List集合
*/
List<Person> getAll(); /**
* 分页查询显示
* @param firstResult 第一条记录从哪里开始
* @param maxResults 最多包含多少条记录
* @return 该返回值包含了一个表的总记录数和一个List结果集
*/
QueryResult query(int firstResult,int maxResults); }
IPerson.java
三、com.mypro.util包
1、定一个HibernateUtils工具类,该类封装了SessionFactory对象
package com.mypro.util; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtils { //声明一个静态变量,并在静态代码块中给该对象赋值
private static SessionFactory sessionFactory;
static{
/*方式一
Configuration cfg=new Configuration();
cfg.configure("hibernate.cfg.xml"); //加载指定位置的配置
sessionFactory=cfg.buildSessionFactory();*/ /*方式二:当hibernate的主配置文件名称为hibernate.cfg.xml时,且该文件在类的根目录下时,当cfg.configure时可以省略参数
Configuration cfg=new Configuration();
cfg.configure(); //加载默认配置文件
sessionFactory=cfg.buildSessionFactory();*/ //方法三 :由于cfg.configure()方法返回的依然是Configuration对象,所以该方法更进一步精简为
sessionFactory=new Configuration()
.configure()
.buildSessionFactory();
} /**
* 获取SessionFactory工厂
* @return
*/
public static SessionFactory getSessionFactory(){
return sessionFactory;
} /**
* 获取返回一个打开的Session
* @return
*/
public static Session openSession(){
return sessionFactory.openSession();
}
}
HibernateUtils.java
四、com.mypro.dao.impl包
该包主要实现com.mypro.dao下的接口
1、实现IPerson接口
package com.mypro.dao.impl; import java.util.List; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.mypro.dao.IPerson;
import com.mypro.domain.Person;
import com.mypro.domain.QueryResult;
import com.mypro.util.HibernateUtils; public class PersonImpl implements IPerson { @Override
public void add(Person person) {
Session session=null;
Transaction tran=null;
try{
session=HibernateUtils.openSession();
tran=session.beginTransaction();
session.save(person);
tran.commit();
}catch(RuntimeException e){
if(tran!=null)
tran.rollback();
throw e;
}finally{
if(session!=null)
session.close();
} } @Override
public void delete(int id) {
Session session=null;
Transaction tran=null;
try{
session=HibernateUtils.openSession();
tran=session.beginTransaction();
Person person=session.get(Person.class, id);
session.delete(person);
tran.commit();
}catch(RuntimeException e){
if(tran!=null)
tran.rollback();
throw e;
}finally{
if(session!=null)
session.close();
} } @Override
public void update(Person person) {
Session session=null;
Transaction tran=null;
try{
session=HibernateUtils.openSession();
tran=session.beginTransaction();
session.update(person);
tran.commit();
}catch(RuntimeException e){
if(tran!=null)
tran.rollback();
throw e;
}finally{
if(session!=null)
session.close();
} } @Override
public Person get(int id) {
Session session=null;
try{
session=HibernateUtils.openSession();
return session.get(Person.class, id);
}catch(RuntimeException e){
throw e;
}finally{
if(session!=null)
session.close();
}
} @Override
public List<Person> getAll() {
Session session=null;
try{
session=HibernateUtils.openSession();
/*方式一
Query query= session.createQuery("FROM persion",,Person.class);
return query.list(); */
//方式二
return session.createQuery("from Person").list(); //注意HSL方式要求Person为类名,属性名和类名必须完全一致,其它关键字可忽略大小写
}catch(RuntimeException e){
throw e;
}finally{
if(session!=null)
session.close();
}
} @Override
public QueryResult query(int firstResult, int maxResults) {
Session session=null;
try{
session=HibernateUtils.openSession();
long count= (long)session.createQuery("SELECT COUNT(*) FROM Person").uniqueResult();
List list=session.createQuery("FROM Person")//
.setFirstResult(firstResult)//
.setMaxResults(maxResults)
.list();
return new QueryResult(count, list);
}catch(RuntimeException e){
throw e;
}finally{
if(session!=null)
session.close();
}
} }
PersonImpl.java
五、配置hibernate主配置文件
<?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 name="mysqldb"> <!-- 配置方言:选择数据库类型 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置数据库连接信息 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///test?characterEncoding=utf8</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property> <!-- 允许显示sql语句 -->
<property name="show_sql">true</property>
<!-- 导入映射文件 -->
<mapping resource="com/mypro/domain/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
hibernate.cfg.xml
六、代码测试
1、在com.mypro.test包下PersonTest.java
package com.mypro.test; import java.util.List; import org.junit.Test; import com.mypro.dao.IPerson;
import com.mypro.dao.impl.PersonImpl;
import com.mypro.domain.Person;
import com.mypro.domain.QueryResult; public class PersonTest { private static IPerson personDao=new PersonImpl(); @Test
public void add(){
Person person=new Person();
person.setName("zhh");
person.setAge(26);
person.setGender("女");
personDao.add(person);
} @Test
public void get(){
Person person=personDao.get(37);
System.out.println(person);
} @Test
public void update(){
Person person=personDao.get(37);
person.setAge(25);
personDao.update(person);
} @Test
public void getAll(){
List<Person> list=personDao.getAll();
for (Person person : list) {
System.out.println(person);
}
} @Test
public void query(){
QueryResult qr= personDao.query(2, 10);
System.out.println("总记录数:"+qr.getCount());
List<Person> list=qr.getList();
for (Person person : list) {
System.out.println(person);
}
} @Test
public void delete(){
personDao.delete(37);
}
}
PersonTest.java
Hibernate CRUD操作的更多相关文章
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...
- hibernate入门-基本配置及简单的crud操作
框架来说主要是需要写大量的配置文件,hibernate相比mybatis来说更强大,移植性更好: 1.类和数据库的映射配置:配置文件命名一般--类名.hbm.xml (user.hbm.xml),与实 ...
- 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作
这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...
- hibernate的CRUD操作
一对多关系映射的crud操作: 1.单项的保存操作 /** * 保存操作 * 正常的保存:创建一个联系人,需要关联客户 */ @Test public void test1(){ Session s= ...
- hibernate Session的CRUD操作
使用Session里面的方法进行CRUD操作 (1) 增加 save 方法 (2) 查找 get 方法(根据id查) (3) 修改 update 方法 (4) 删除 delete 方法 1.增加 /* ...
- Java实战之02Hibernate-01简介、常用接口、CRUD操作
一.Hibernate简介 1.Hibernate在开发中所处的位置 2.ORM映射 Object :面向对象领域的 Relational:关系数据库领域的 Mapping:映射 Object: Re ...
- JAVA实现DAO基本层CRUD操作
随着shh2各种操作方便框架.越来越多JAVA WEB效率,可是,假设在不了解这些框架使用的场合的情况下,一拿到项目就盲目地选择这些框架进行系统架构的搭建,就有可能造成非常多不是必需的资源浪费. 在项 ...
- [读书笔记] 四、SpringBoot中使用JPA 进行快速CRUD操作
通过Spring提供的JPA Hibernate实现,进行快速CRUD操作的一个栗子~. 视图用到了SpringBoot推荐的thymeleaf来解析,数据库使用的Mysql,代码详细我会贴在下面文章 ...
- Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作
只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目. Spring Boot连接MySQL数据库 连接了MySQL数据库. 本文在之前 ...
随机推荐
- 【BZOJ 1084】 1084: [SCOI2005]最大子矩阵 (DP)
1084: [SCOI2005]最大子矩阵 Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第 ...
- Codeforces 285 E. Positions in Permutations
\(>Codeforces \space 285 E. Positions in Permutations<\) 题目大意 : 定义一个长度为 \(n\) 的排列中第 \(i\) 个元素是 ...
- [xsy2282]cake
题意:一个$n\times n$的有标号点阵,现在用一条直线把它们分成两部分,问有多少种不同的分法 结论:方案数就是以点阵上的点为端点且不经过第三个点的线段数 对一个满足要求的线段,将其绕中点顺时针转 ...
- 【数论】【二次剩余】【map】hdu6128 Inverse of sum
部分引用自:http://blog.csdn.net/v5zsq/article/details/77255048 所以假设方程 x^2+x+1=0 在模p意义下的解为d,则答案就是满足(ai/aj) ...
- Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列
D. Least Cost Bracket Sequence 题目连接: http://www.codeforces.com/contest/3/problem/D Description This ...
- 【转】记录PHP、MySQL在高并发场景下产生的一次事故
看了一篇网友日志,感觉工作中值得借鉴,原文如下: 事故描述 在一次项目中,上线了一新功能之后,陆陆续续的有客服向我们反应,有用户的个别道具数量高达42亿,但是当时一直没有到证据表示这是,确实存在,并且 ...
- MySQL 连接错误Can't connect to MySQL server on (61)
链接数据库时忽然遇到一个问题.Mac Navicat链接时报错Can’t connect to MySQL server on ‘xx.xx.xx.xx’ (61). PS. win版Navicat ...
- IOS Reachability判断所请求服务器是否超时?
开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息.如果没有处理它们,是不会通过Apple的审查的. Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法. ...
- Wlms进程导致Windows2008R2操作系统关机的解决办法
2.将wlms进程干掉,将PStooLs工具copy至服务器的C盘根目录下 3.运行psexec.exe -d -i -s regedit.exe 命令 4.打开注册表,找到vlms选项, [HKEY ...
- asset bundle打包策略
一次引用的 不单独打包 2次的看大小 小的不单独打包 2次以上单独打包 2这个值 可以测一测 取平衡