hibernate入门案例(Hibernate中find方法怎样应用)
本文目录
- Hibernate中find方法怎样应用
- 怎么知道hibernate中的众多jar包那个版本和哪个版本是配套的请不要说对初学者没影响
- 谁帮我解释下hibernate中queryDao.queryUnique(hql)含义,初学者
- 实体层中字段,数据库表中字段,hbm.xml中的property分别是什么关系初学者!!!!!!!
- hibernate和ibatis的区别
- 我是初学springMVC,与hibernate一起用,现在遇到以下问题,点击表单提交时就出现这个问题
Hibernate中find方法怎样应用
基于spring的web应用的入门,前端采用Struts MVC框架,中间层采用spring,后台采用Hibernate。 本文包含以下内容: ·配置Hibernate和事务 ·装载Spring的applicationContext.xml文件 ·建立业务层和DAO之间的依赖关系 ·将Spring应用到Struts中 简介 这个例子是建立一个简单的web应用,叫MyUsers,完成用户管理操作,包含简单的数据库增,删,查,该即CRUD(新建,访问,更新,删除)操作。这是一个三层的web应用,通过Action(Struts)访问业务层,业务层访问DAO。图一简要说明了该应用的总体结构。图上的数字说明了流程顺序-从web(UserAction)到中间层(UserManager),再到数据访问层(UserDAO),然后将结果返回。 Spring层的真正强大在于它的声明型事务处理,帮定和对持久层支持(例如Hiberate和iBATIS) 以下下是完成这个例子的步骤: 1. 安装Eclipse插件 2. 数据库建表 3. 配置Hibernate和Spring 4. 建立Hibernate DAO接口的实现类 5. 运行测试类,测试DAO的CRUD操作 6. 创建一个处理类,声明事务 7. 创建web层的Action和model 8. 运行Action的测试类测试CRUD操作 9. 创建jsp文件通过浏览器进行CRUD操作 10. 通过浏览器校验jsp 安装eclipse插件 ***隐藏网址******隐藏网址***3. MyEclipse插件(破解版) 4. Tomcat插件. tanghan 5. 其他插件包括xml,jsp, 数据库建表 create table app_user(id number not null primary,firstname vchar(32),lastname vchar(32)); 新建项目 新建一个web project,新建后的目录结构同时包含了新建文件夹page用于放jsp文件,和源文件夹test用于放junit测试文件。同时将用到的包,包括struts,hibernate,spring都导入到lib目录下。 创建持久层O/R mapping 1. 在src/com.jandar.model下用hibernate插件从数据库导出app_user的.hbm.xml文件改名为User.hbm.xml <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" ***隐藏网址***<hibernate-mapping package="com.jandar.model"> <class name="User" table="APP_USER"> <id column="ID" name="id" type="integer" > <generator class="assigned" /> </id> <property column="LASTNAME" length="10" name="lastname" not-null="false" type="string" /> <property column="FIRSTNAME" length="10" name="firstname" not-null="true" type="string" /> </class> </hibernate-mapping> 2. 通过hibernate synchronizer->synchronizer file生成User.java文件,User对象对应于数据库中的app_user表 注:在eclipse下自动生成的对象文件不完全相同,相同的是每个对象文件必须实现Serializable接口,必需又toString和hashCode方法; import java.io.Serializable; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; public class BaseObject implements Serializable { public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE); } public boolean equals(Object o) { return EqualsBuilder.reflectionEquals(this, o); } public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } } public class User extends BaseObject { private Long id; private String firstName; private String lastName; /** * @return Returns the id. */ public Long getId() { return id; } /** * @param id The id to set. */ public void setId(Long id) { this.id = id; } /** * @return Returns the firstName. */ public String getFirstName() { return firstName; } /** * @param firstName The firstName to set. */ public void setFirstName(String firstName) { this.firstName = firstName; } /** * @return Returns the lastName. */ public String getLastName() { return lastName; } /** * @param lastName The lastName to set. */ public void setLastName(String lastName) { this.lastName = lastName; } } 创建DAO访问对象 1. 在src/com.jandar.service.dao新建IDAO.java接口,所有的DAO都继承该接口 package com.jandar.services.dao; public interface IDAO { } 2. 在src/com.jandar.service.dao下新建IUserDAO.java接口 public interface IUserDAO extends DAO { List getUsers(); User getUser(Integer userid); void saveUser(User user); void removeUser(Integer id); } 该接口提供了访问对象的方法, 3. 在src/com.jandar.service.dao.hibernate下新建UserDAOHiberante.java import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.orm.hibernate.support.HibernateDaoSupport; import com.jandar.model.User; import com.jandar.service.dao.IUserDAO; public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO { private Log log=LogFactory.getLog(UserDaoHibernate.class); /* (非 Javadoc) * @see com.jandar.dao.IUserDAO#getUsers() */ public List getUsers() { return getHibernateTemplate().find("from User"); } /* (非 Javadoc) * @see com.jandar.dao.IUserDAO#getUser(java.lang.Long) */ public User getUser(Integer id) { // TODO 自动生成方法存根 return (User) getHibernateTemplate().get(User.class,id); } /* (非 Javadoc) * @see com.jandar.dao.IUserDAO#saveUser(com.jandar.model.User) */ public void saveUser(User user) { log.debug("xxxxxxx"); System.out.println("yyyy"); getHibernateTemplate().saveOrUpdate(user); if(log.isDebugEnabled()) { log.debug("userId set to "+user.getId()); } } /* (非 Javadoc) * @see com.jandar.dao.IUserDAO#removeUser(java.lang.Long) */ public void removeUser(Integer id) { Object user=getHibernateTemplate().load(User.class,id); getHibernateTemplate().delete(user); if(log.isDebugEnabled()){ log.debug("del user "+id); } } } 在这个类中实现了IUserDAO接口的方法,并且继承了HibernateDAOSupport类。这个类的作用是通过hibernate访问、操作对象,进而实现对数据库的操作。
怎么知道hibernate中的众多jar包那个版本和哪个版本是配套的请不要说对初学者没影响
Hibernate的jar包到官网上一般也是一组下载下的.注意支持的java版本,要和其他的框架组合使用,只能试了才知道.
谁帮我解释下hibernate中queryDao.queryUnique(hql)含义,初学者
好久没接触这个了,根据方法名应该是查询一个唯一的对象,所以查询出来的结果是一个Object类型,hql是hibernate的面向对象的查询语言,类似SQL语句,如果不懂语法可以先学习一下。
实体层中字段,数据库表中字段,hbm.xml中的property分别是什么关系初学者!!!!!!!
hbm.xml把实体类和数据库表关联起来,它是配制实体类的对象对应数据库表中的字段:例: 《class name="com.OA_System.hibernate.bean.OA_DAILY" table="OA_DAILY"》 《id name="OA_DAILY_ID" column="ID" type="long"》 《generator class="sequence"》 《param name="sequence"》nl2_sl《/param》 《/generator》 《/id》 《property name="OA_DAILY_DATES" column="DATES" type="string"》《/property》 《property name="OA_DAILY_ADDRESS" column="ADDRESS" type="string"》《/property》 《property name="OA_DAILY_RPERSON" column="RPERSON" type="string"》《/property》 《property name="OA_DAILY_RWAY" column="RWAY" type="string"》《/property》 《property name="OA_DAILY_GAIYAO" column="GAIYAO" type="string"》《/property》 《property name="OA_DAILY_XIANGXI" type="text"》 《column name="XIANGXI" sql-type="clob"》《/column》 《/property》 《/class》《class》标签中:name="com.OA_System.hibernate.bean.OA_DAILY" 代表实体类路径table="OA_DAILY" 代表数据库中的表《id》标签是配置主件《property》标签是配置各个字段(《id》《property》中:name 一般都是我们实体类的对象名,column 对应数据库字段,type 是对应的类型)
hibernate和ibatis的区别
Hibernate的特点: Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。iBATIS的特点: iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合。系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。 对于实际的开发进行的比较: 1. iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。 2. iBatis 可以进行细粒度的优化 比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。 当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。 例如:我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...一般情况下Hibernate 会把所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他们也选出来呢?用hibernate 的话,你又不能把这两个不需要的字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是非常重要。 3. 开发方面: 开发效率上,我觉得两者应该差不多。可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。 而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。 4. 运行效率 在不考虑 cache 的情况下,iBatis 应该会比hibernate 快一些或者很多。***隐藏网址***希望对你有帮助...
我是初学springMVC,与hibernate一起用,现在遇到以下问题,点击表单提交时就出现这个问题
呵呵,这个是肯定的啊还有spring代替MVC这说法你自己想出来的吧?呵呵,这个spring不是这样用的如何使用啊?怎么注入。。注入到哪啊?这个就要你重载下hibernateDaoSupport,这样分页就更方便了,还可以用hibernate的方法看这个public class MyHibernateDaoSupport extends HibernateDaoSupport{ @Resource(name="sessionFactory") public void setSuperSessionFactory(SessionFactory sessionFactory){ super.setSessionFactory(sessionFactory); } /** * 使用hql 语句进行分页查询操作 * @param hql 需要查询的hql语句 * @param offset 第一条记录索引 * @param pageSize 每页需要显示的记录数 * @return 当前页的所有记录 */ public List findByPage(final String hql, final int offset, final int pageSize) { List list = getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { List result = session.createQuery(hql) .setFirstResult(offset) .setMaxResults(pageSize) .list(); return result; } }); return list; }}这个是一个办法,我都这样用,用的是spring2.5,hibernate3.2,如果你用spring2.0你可以把这个换掉@Resource(name="sessionFactory")换成setter方法!其他的就在spirng.xml文件中配置就行整合的时候就extends MyHibernateDaoSupport 这样就行了,这样就可以用分页的方法了,当然上面的方法我自己写的,你也可以自己修改,怎么样写都成!
更多文章:
三星note 21 ultra(三星note20ultra与note21ultra对比)
2024年6月24日 15:43
搞趣网:火影忍者手游有哪几种玩法 玩法介绍?合肥市启趣教育咨询有限公司怎么样
2024年3月25日 14:20
7 Days to Die 七日杀 PC MAC 正版 steam 国区礼物 怎么在steam下载?七日杀A18在哪里可以下载
2024年6月26日 08:21
万年历黄道吉日查询(万年历黄道吉日,怎样在万年历里查黄道吉日)
2023年8月15日 12:00
pixellab制作头像官方下载(pixellab怎么打开QQ上面下载的文件)
2024年6月10日 04:47
86版五笔输入法官方下载电脑版(电脑五笔输入法怎么下载安装)
2024年6月30日 03:31