关于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,
![](file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\1179085816\QQ\WinTemp\RichOle\ENR}N$}_JA2VT2`~PXQ)K9T.jpg)
![](file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\1179085816\QQ\WinTemp\RichOle\ENR}N$}_JA2VT2`~PXQ)K9T.jpg)
入图所示,因为是自己画的,比较乱
测试连接上之后,我们就可以看到刚才所建的表了;
然后,我们建立一个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();
}
}
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,
![](file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\1179085816\QQ\WinTemp\RichOle\ENR}N$}_JA2VT2`~PXQ)K9T.jpg)
![](file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\1179085816\QQ\WinTemp\RichOle\ENR}N$}_JA2VT2`~PXQ)K9T.jpg)
入图所示,因为是自己画的,比较乱
测试连接上之后,我们就可以看到刚才所建的表了;
然后,我们建立一个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();
}
}
相关文章推荐
- 图的基本存储的基本方式二 (链表)
- POJ 2411 大矩形用1X2小矩形填充 状态dp DFS
- --acm的思考
- C语言第12轮:指针
- Codeforces Gym 100523K K - Cross Spider 计算几何,判断是否n点共面
- 快速排序详解
- 函数指针与typedef
- java内部类学习笔记
- poj 1118
- hdu 1242 Rescue (BFS+优先队列)
- 黑马程序员--面向对象
- csu 1110 RMQ with Shifts(线段树) 解题报告
- Objective-C总Runtime的那点事儿(一)消息机制
- Monkey and Banana(LIS最长上升子序列)
- 推荐一些不错的计算机书籍
- javax.mail.AuthenticationFailedException
- 凸包 Graham扫描法
- 1. docker-maven
- openwrt 随机 ssid 随机 mac 脚本
- 奇偶线段树(区间更新)