您的位置:首页 > 其它

关于Hibernate中的普通增删改查

2015-08-14 20:33 295 查看
一:关于hibernate的介绍

Hibernate:开放源代码的对象关系映射框架

优点:

1,使用面向对象方式来操作数据库;

2,屏蔽了不同的数据源,不用考虑数据库之间的差距,使应用程序得到更好的移植性操作;

3,对SQL进行了大量的封装,使开发者不需要写大量的Sql语句;

4,提供了缓存机制(内存:开辟了一块空间专门用来储存);

5,提供了更完整的事务上的支持,对数据的安全性提高了保障;

缺点:

1,在复杂的关联查询上,不够灵活,仍然需要手写SOL

2,更加消耗内存,因为每一次使用数据库,都要就行一个连接,消耗内存

3,数据调试和程序调试容易出问题,对数据建模要求比较高

二:Hibernate中的session

也是会话,保存用户连接数据库之后进行的操作

Spring中的session:他最大的应用,就是在web上保存用户的登陆信息,或者浏览添加到数据库的信息,他的生命周期也是一次会话,在系统中,默认的时间长度为半小时,当他的生命周期结束,该会话结束,他所保存的信息如果不存到数据库中,就会销毁

sessionFactory:会话工厂(里面有很多的会话)

在增删改查之前打开事务,因为这三项 会对数据库进行修改,如果因为外界因素,使得在修改数据的过程中,没有修改完成的时候断开,这个事务就会回滚,保证了事务的完整性,也使数据变得安全。

数据的三种状态(瞬时,游离,持久)

在这里要强调的一点是:在我们save数据之后,他只是将数据保存到了session 中,如果不进行提交,数据库中是不会用这条数据的。只有在我们提交之后,该条数据才会成为持久性,并且可以在数据库对它进行增删改。

三:举一个实例

首先我们进行数据库的配置

1,在mysql中创建一个表格:user()他的属性有name,password,sex

创建语言为:create table user(id int(10) auto_increment primary kry,name varchar(40),password varchar(40),sex varchar(40));

建立好此表之后,我们打开Myeclipse,打开windows->oPen prespetive ->MyEclipse Database Explorer

空白处点击new,





入图所示,因为是自己画的,比较乱

测试连接上之后,我们就可以看到刚才所建的表了;

然后,我们建立一个webproject,命名为TestHibernate

在src下建立一个包,entity(我们所要放的实体类)

然后回到我们的数据库,具体操作为:mysql(我所命名的之前的建立连接的名称)->TABLE->user(刚才所建表格)->右键->Hibernate Reverse Engineering->(在弹出的表格中)->只需修改Java Package:entity->next->next->finish;完成

这样,我们就会在我们刚才所传创建的entity中看见user,以及一个user.hbm.xml;这时,所有的都已经配置完成

二:具体的实现类

我们再建一个 包(方便理解)UserDao

建一个类为UserDao

package dao;

import java.util.Iterator;

import org.hibernate.Query;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.hibernate.classic.Session;

import entity.User;

public class UserDao {

/**

* 保存用户

*/

public void saveUser(){

//表示加载配置文件

Configuration cfg=new Configuration().configure();

//建立sessionFactory

SessionFactory factory=cfg.buildSessionFactory();

//获取session

Session session=factory.openSession();

try {

//打开事务

session.beginTransaction();

//业务操作

User user=new User();

user.setName("zhangsan1");

user.setPassword("124451");

user.setSex("男");

//未执行事务之前,数据处于游离状态

session.save(user);

System.out.println(user);

//提交事务

session.getTransaction().commit();

} catch (Exception e) {

// TODO: handle exception

//如果抛出异常,事务回滚

session.getTransaction().rollback();

}

finally{

//关闭session

//session.close();

}

}

//删除用户

public void delect(){

//表示加载配置文件

Configuration cfg=new Configuration().configure();

//建立sessionFactory

SessionFactory factory=cfg.buildSessionFactory();

//获取session

Session session=factory.openSession();

try {

//打开事务

session.beginTransaction();

//业务操作

User user=new User();

user.setId(22);

int i=user.getId();

user=(User) session.get(User.class, 20);

System.out.println(user);

// user.setId(20);

// user.setName("zhangsan1");

// user.setPassword("124451");

// user.setSex("男");

//未执行事务之前,数据处于游离状态

// System.out.println(user.getId());

session.delete(user);

//session.delete(i);

//提交事务

session.getTransaction().commit();

} catch (Exception e) {

// TODO: handle exception

//如果抛出异常,事务回滚

session.getTransaction().rollback();

}

finally{

//关闭session

//session.close();

}

}

public void update(){

Configuration cfg=new Configuration().configure();

//建立sessionFactory

SessionFactory factory=cfg.buildSessionFactory();

//获取session

Session session=factory.openSession();

try {

//打开事务

session.beginTransaction();

//业务操作

User user=new User();

user.setId(35);

user.setName("zhangsan7");

user.setPassword("12567");

user.setSex("女");

//未执行事务之前,数据处于游离状态

session.update(user);

System.out.println(user);

//提交事务

session.getTransaction().commit();

} catch (Exception e) {

// TODO: handle exception

//如果抛出异常,事务回滚

session.getTransaction().rollback();

}

finally{

//关闭session

session.close();

}

}

public void select(){

//表示加载配置文件

Configuration cfg=new Configuration().configure();

//建立sessionFactory

SessionFactory factory=cfg.buildSessionFactory();

//获取session

Session session=factory.openSession();

try {

//打开事务

session.beginTransaction();

//业务操作

User user=new User();

user=(User) session.get(User.class, 20);

// user.setName("zhangsan1");

// user.setPassword("124451");

// user.setSex("男");

//未执行事务之前,数据处于游离状态

//session.save(user);

System.out.println(user);

//提交事务

session.getTransaction().commit();

} catch (Exception e) {

// TODO: handle exception

//如果抛出异常,事务回滚

session.getTransaction().rollback();

}

finally{

//关闭session

//session.close();

}

}

public void selectAll(){

//表示加载配置文件

Configuration cfg=new Configuration().configure();

//建立sessionFactory

SessionFactory factory=cfg.buildSessionFactory();

//获取session

Session session=factory.openSession();

try {

//打开事务

session.beginTransaction();

//业务操作

//User user=new User();

//user=(User) session.get(User.class, 20);

// user.setName("zhangsan1");

// user.setPassword("124451");

// user.setSex("男");

//未执行事务之前,数据处于游离状态

//session.save(user);

Iterator user= session.createQuery("from user name where name='zhangsan'").list().iterator();

// System.out.println(user);

while (user.hasNext()) {

User user1=(User) user.next();

user1.setName("ceshi");

//System.out.println(user1);

}

// System.out.println(user);

//提交事务

session.getTransaction().commit();

} catch (Exception e) {

// TODO: handle exception

//如果抛出异常,事务回滚

session.getTransaction().rollback();

}

finally{

//关闭session

//session.close();

}

}

public static void main(String[] args) throws Exception {

UserDao user =new UserDao();

//user.saveUser();

// user.delect();

//user.TestDelete();

//user.TestInsert();

//user.update();

//user.delect();

//user.select();

//user.delect();

user.selectAll();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: