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这个值 可以测一测 取平衡