- 浏览: 148255 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
flyingcatjj:
很适合我这种刚接触的
myeclipse xfire 开发webservice实例 -
tangzlboy:
非常好,非常详细,非常中用。
linux入门 -
yzz9i:
楼主说的很是详细。
myeclipse xfire 开发webservice实例 -
zqx888191:
很再理阿!
老程序员的教诲 -
simplecat123:
...
SQLite数据读取
在Base类中加入以下代码实现get方法
package cn.itcast.hibernate; import java.util.Date; import org.hibernate.HibernateException; import org.hibernate.Session; import cn.itcast.hibernate.domain.User; import org.hibernate.Transaction; public class Base { public static void main(String[] args) { User user = new User(); user.setBirthday(new Date()); user.setName("name"); addUser(user); User u = getUser(user.getId()); System.out.println("name:"+u.getName()); } static User getUser(int id){ Session s = null ; try{ s = HibernateUtil.getSession(); Class userClass = User.class; User user = (User)s.get(User.class,id); return user ; }finally { if(s !=null) s.close(); } } static void addUser(User user){ Session s = null ; Transaction tx = null ; try{ s = HibernateUtil.getSession(); tx = s.beginTransaction(); s.save(user); tx.commit(); }catch(HibernateException e){ if(tx !=null) tx.rollback(); throw e ; }finally { if(s !=null) s.close(); } } }
对get方法参数User.class的理解:
由于Session可以管理多个数据库表所对应的多个实体对象。如果要查询id为1的实体对象,Session.get方法需要知道去哪个数据库表中查询id为1的记录,所以。除了给get方法传递所要查询的实体对象的id值外,还必须给get方法传递实体对象的类型,get方法才能知道去哪个数据库表中进行查询。
控制台显示结果: name:name
在配置文件hibernate.cfg.xml文件中加入
<property name="show_sql">true</property>
可显示所执行的sql语句
由于Session可以管理多个数据库表所对应的多个实体对象。如果要查询id为1的实体对象,Session.get方法需要知道去哪个数据库表中查询id为1的记录,所以。除了给get方法传递所要查询的实体对象的id值外,还必须给get方法传递实体对象的类型,get方法才能知道去哪个数据库表中进行查询。
控制台显示结果: name:name
在配置文件hibernate.cfg.xml文件中加入
<property name="show_sql">true</property>
可显示所执行的sql语句
load方法
懒加载 并不马上访问数据库 只有第一次应用时才访问数据库 load方法的返回对象永远不可能为空
懒加载 并不马上访问数据库 只有第一次应用时才访问数据库 load方法的返回对象永远不可能为空
package cn.itcast.hibernate; import java.util.Date; import org.hibernate.HibernateException; import org.hibernate.Session; import cn.itcast.hibernate.domain.User; import org.hibernate.Transaction; public class Base { public static void main(String[] args) { User user = new User(); user.setBirthday(new Date()); user.setName("name"); addUser(user); User u = getUser(user.getId()); System.out.println("name:"+u.getName()); } static User getUser(int id){ Session s = null ; try{ s = HibernateUtil.getSession(); Class userClass = User.class; //User user = (User)s.get(User.class,id); User user1 = (User)s.load(User.class,id); System.out.println("name:"+user1.getName()); System.out.println(user1.getClass().getName()); return user1 ; }finally { if(s !=null) s.close(); } } static void addUser(User user){ Session s = null ; Transaction tx = null ; try{ s = HibernateUtil.getSession(); tx = s.beginTransaction(); s.save(user); tx.commit(); }catch(HibernateException e){ if(tx !=null) tx.rollback(); throw e ; }finally { if(s !=null) s.close(); } } }
总结
save与persist方法的区别:在没有开启事务的时候
save方法会把数据插入到数据,之后又回滚,删掉数据。而persist方法根本就不执行插入。
总结Session的几个主要方法:
1 save,persist保存数据,persist在事务外不会产生insert语句,persist方法在没开启事务根本不会产生insert 语句,sava方法会产生sql语句,但是如果没有开启事务,会回滚事务,不会插入数据
2.delete,删除对象;
3.update,更新对象,如果数据库中没有记录,会出现异常;
4.get,根据id查,会立刻访问数据库。
5.load,根据id查(返回的是代理,不会立即访问数据库)
6.saveOrUpdate,merge(根据id和version的值来确定是save或update),调用merge你的对象还是托管的。
7.lock()把对象变成持久对象,但不会同步对象的状态
save方法会把数据插入到数据,之后又回滚,删掉数据。而persist方法根本就不执行插入。
总结Session的几个主要方法:
1 save,persist保存数据,persist在事务外不会产生insert语句,persist方法在没开启事务根本不会产生insert 语句,sava方法会产生sql语句,但是如果没有开启事务,会回滚事务,不会插入数据
2.delete,删除对象;
3.update,更新对象,如果数据库中没有记录,会出现异常;
4.get,根据id查,会立刻访问数据库。
5.load,根据id查(返回的是代理,不会立即访问数据库)
6.saveOrUpdate,merge(根据id和version的值来确定是save或update),调用merge你的对象还是托管的。
7.lock()把对象变成持久对象,但不会同步对象的状态
发表评论
-
二十六 Hibernate实践
2011-07-04 19:18 715不适合OLAP以查询分析数据为主的系统。适合OLTP联机事务处 ... -
二十五 SQL和命名查询
2011-07-04 19:17 1035SQL和命名查询 SQL查询 //根据sql语句查询 s ... -
二十四 拦截器与监听器
2011-07-04 19:14 947在保存 更新等操作的前 ... -
二十三 iterate查询与N+1次查询的问题
2011-07-04 19:13 771test.java view plaincopy to ... -
二十二 Hibernate映射文件配置
2011-07-04 19:12 875id 主键生成方式 incremen ... -
二十一 串讲Hibernate配置文件中的配置项
2011-07-04 19:11 862数据源配置 ## JNDI Datasource ... -
二十 悲观锁和乐观锁
2011-07-04 19:10 716为了避免对对象同步操作时候产生的数据不一致问题,我们对对象采用 ... -
十九 hibernate3之缓存
2011-07-04 19:09 903什么是缓存?现在我们来看一个模拟的缓存操作 模拟一个缓存例子 ... -
十八 一对一对象的懒加载
2011-07-04 17:59 728一对一对象的懒加载,对于主的一方,lazy是无效的,它在访问数 ... -
十七 懒加载
2011-07-04 17:58 723十七 懒加载 什么是hibe ... -
十六 继承映射
2011-07-04 17:56 480第一种 一个员工类它有两个子类,利用hibernate我们把 ... -
十五 cascade 级联操作与inverse表是否放弃维护关联关系
2011-07-04 17:54 848cascade 级联操作字段 Casade用来说明当对主对 ... -
十四 在hibernate中使用集合总结
2011-07-04 17:52 876集合映射(set, list, array,bag, map) ... -
十三 array数组形式的映射
2011-07-04 17:51 829数组其实跟List的集合映射没有多大的差别,当然它不可以使用b ... -
十二 集合映射之Map集合
2011-07-04 17:49 789十二 Map集合映射 Map是以键值对的形式存放数据的 ... -
十一 集合映射 List集合
2011-07-04 17:47 1024十一 集合映射 set的 ... -
十 组件关联
2011-07-04 17:45 690组件关联 什么是组件关联呢?比如说一个用户,它的名称,有一 ... -
九 多对多关系 学生<--->老师的关系
2011-07-04 17:44 1223九 多对多关系 学生<--->老师的关系 多对多 ... -
八 一对一 用户与身份证的关系
2011-07-04 17:42 860八 一对一 用户与身份证的关系 设计用户实体 主实体 ... -
七 一对多关系 部门与员工的关系
2011-07-04 17:41 1127一对多 部门与员工的关系 相对于部门来说 一对多 根据先前 ...
相关推荐
本教程聚焦于Hibernate中的Session接口以及get、load、persist这三个常用的方法,它们是 Hibernate 实现对象-关系映射(ORM)的核心组件。 首先,我们来理解Session接口。Session在Hibernate中扮演着数据库连接的...
04_Session接口及get|load|persist方法 05_实体对象的三种状态与saveOrUpdate方法 06_完善HibernateUtil类及hql查询入门 07_实体类或属性名与数据库关键字冲突问题 10_使用Hibernate完成CRUD实验的步骤说明 11_...
通过Session的get()或load()方法获取的对象默认处于此状态。 - **游离状态(Detached)**:对象曾经是持久化的,但当前未与任何Session关联。对象在游离状态下可以被重新持久化。 2. **对象持久化操作**: - **...
- **加载和检索**:使用`get()`或`load()`方法可以加载一个实体,如果对象存在于数据库,Hibernate将返回一个对应的代理对象。 - **保存和插入**:`save()`方法用于将瞬时对象转换为持久化对象,而`persist()`方法...
接下来是关于Hibernate中Session的load和get方法的区别。load方法设计用来获取数据,如果没有找到符合条件的数据记录,会抛出异常;而get方法会返回null,表示没有找到数据。load方法返回的是一个代理对象,而get...
- **Create**:创建新用户时,使用`Session.save()`或`Session.persist()`方法将实体持久化到数据库。 - **Read**:在登录时,使用`Session.get()`或`Session.load()`方法根据用户名查询用户对象。 - **Update**:...
3. **修改**:首先,通过Session的get或load方法获取要更新的对象,然后修改对象的属性,最后调用Session的update方法,如`session.update(user)`。这将同步数据库中的记录。 4. **查询**:使用Session的...
1. **增加(Create)**:使用`Session.save()`或`Session.persist()`方法可以将新对象保存到数据库。例如,如果有一个User对象,可以调用`session.save(user)`来创建新的用户记录。 2. **删除(Delete)**:删除...
- **读取(Read)**:通过`Session.get()`、`Session.load()`或Criteria查询获取数据库中的对象。 - **更新(Update)**:对持久化对象的属性进行修改后,调用`Session.update()`或`Session.saveOrUpdate()`来更新...
通常会使用`Session.get()`或`Session.load()`方法。 5. `findAll()`:获取所有实体对象的列表,可能使用`Session.createQuery()`来执行SQL的`SELECT * FROM table`语句。 这些方法的实现依赖于Hibernate的Session...
2. 读取(Read):`Session.get()`或`Session.load()`根据ID获取对象,`Query`或`Criteria` API进行复杂查询。 3. 更新(Update):修改持久态对象后,Hibernate会在事务提交时自动更新数据库,也可用`Session....
2. 读取(Read):使用 Session 的 get() 或 load() 方法获取数据库中的对象。get() 直接返回对象,而 load() 返回代理对象,延迟加载实体的属性。 3. 更新(Update):调用 Session 的 update() 或 merge() 方法可...
删除操作通常分为两步:首先,通过Session的get()或load()方法获取对象;然后,调用Session的delete()方法删除该对象。例如: ```java User user = (User) session.get(User.class, userId); session.delete(user); ...
关于Session的load()和get()方法,两者都可以用于获取数据库中的对象。get()方法如果找不到匹配的记录会返回null,而load()则会抛出异常。load()返回的是对象的代理,get()直接返回对象。此外,load()默认会尝试从二...
- **Read**:通过`Session.get()`或`Session.load()`获取指定ID的对象,或者使用`Session.createQuery()`或`Session.createCriteria()`进行查询操作。 - **Update**:对已存在的对象进行修改后,调用`Session....
- **读取(Read)**:通过`Session.get()`或`Session.load()`获取对象,或者使用`Query`或`Criteria`进行复杂查询。例如: ```java Session session = sessionFactory.openSession(); MyEntity entity = (MyEntity) ...
4. Hibernate的Session方法:Hibernate中的Session提供了多种方法来处理数据库操作,包括load()和get()方法。load()方法在找不到记录时会抛出异常,它返回的是一个实体类的代理对象;而get()方法在找不到记录时返回...
使用`Session.save()`或`Session.persist()`方法,可以将Java对象持久化到数据库。Hibernate会自动执行INSERT语句。 #### - 读取(Read) 通过`Session.get()`或`Session.load()`获取对象,或者使用`Session....
#### 四、Hibernate中Session的load和get方法 **1. load与get的区别** - **load**方法假设指定ID的实体一定存在于数据库中,返回的是代理对象。如果没有找到对应的实体,则抛出异常。 - **get**方法直接返回实体...
- **Read**:通过`Session.get()`或`Session.load()`获取已有对象,`Session.createQuery()`或`Session.createSQLQuery()`执行HQL(Hibernate Query Language)查询。 - **Update**:更新对象属性后,使用`Session...