版权声明:本文为博主原创文章,如需转载请标注转载地址

博客地址: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操作的更多相关文章

  1. 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】

    一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...

  2. hibernate入门-基本配置及简单的crud操作

    框架来说主要是需要写大量的配置文件,hibernate相比mybatis来说更强大,移植性更好: 1.类和数据库的映射配置:配置文件命名一般--类名.hbm.xml (user.hbm.xml),与实 ...

  3. 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作

    这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...

  4. hibernate的CRUD操作

    一对多关系映射的crud操作: 1.单项的保存操作 /** * 保存操作 * 正常的保存:创建一个联系人,需要关联客户 */ @Test public void test1(){ Session s= ...

  5. hibernate Session的CRUD操作

    使用Session里面的方法进行CRUD操作 (1) 增加 save 方法 (2) 查找 get 方法(根据id查) (3) 修改 update 方法 (4) 删除 delete 方法 1.增加 /* ...

  6. Java实战之02Hibernate-01简介、常用接口、CRUD操作

    一.Hibernate简介 1.Hibernate在开发中所处的位置 2.ORM映射 Object :面向对象领域的 Relational:关系数据库领域的 Mapping:映射 Object: Re ...

  7. JAVA实现DAO基本层CRUD操作

    随着shh2各种操作方便框架.越来越多JAVA WEB效率,可是,假设在不了解这些框架使用的场合的情况下,一拿到项目就盲目地选择这些框架进行系统架构的搭建,就有可能造成非常多不是必需的资源浪费. 在项 ...

  8. [读书笔记] 四、SpringBoot中使用JPA 进行快速CRUD操作

    通过Spring提供的JPA Hibernate实现,进行快速CRUD操作的一个栗子~. 视图用到了SpringBoot推荐的thymeleaf来解析,数据库使用的Mysql,代码详细我会贴在下面文章 ...

  9. Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作

    只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目. Spring Boot连接MySQL数据库 连接了MySQL数据库. 本文在之前 ...

随机推荐

  1. 高效的 itertools 模块(转)

    原文地址:http://python.jobbole.com/87380/ 我们知道,迭代器的特点是:惰性求值(Lazy evaluation),即只有当迭代至某个值时,它才会被计算,这个特点使得迭代 ...

  2. Manacher算法总结

    部分图片转自:http://www.cnblogs.com/grandyang/p/4475985.html manacher算法(民间称马拉车算法233)是用来找字符串中的最长回文子串的,先来说一下 ...

  3. python使用sqlite示例

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用. 操作关系数据库,首先需要连接到数据库 ...

  4. delphi AlphaControls

    http://blog.csdn.net/akof1314/article/details/7076804

  5. 可添加头部尾部RecyclerView,很帅哦~

    WrapRecyclerView 是一个可以添加头部和尾部的RecyclerView,并且提供了一个 WrapAdapter, 它可以让你轻松为 RecyclerView 添加头部和尾部.   示例中 ...

  6. WindowsServices_无法拷贝文件到服务器

    方法一:驱动器勾选   方法二:rdpclip.exe进程 1.现在进程管理中结束所有的rdpclip.exe进程 2.在运行中执行 rdpclip.exe接口    

  7. Linux用来抗衡Win的那些桌面环境

    作为一个 Linux 的爱好者,参加了 9 月 22 日 Linux Deepin 在北京举行的用户与开发者大会(给大家一个链接).名为参加会议,实为打酱油.但 Linux Deepin 团队的一些理 ...

  8. [Java基础] java的守护线程与非守护线程

    最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ,(PS:以 ...

  9. sql server触发器复制记录

    Create Trigger test_tri5 on test after insert as begin declare @id sysname, @tel sysname, @name sysn ...

  10. hadoop-2.0.0-cdh4.6.0 安装

    1.创建hadoop用户[所有操作都是root,在所有master和slaver上]1).创建hadoop用户:adduser hadoop2).更换密码:passwd hadoop========= ...