hibernate的用法(单词hibernate什么用法)

本文目录
- 单词hibernate什么用法
- Hibernate 的复杂用法HibernateCallback
- hibernate中如何使用merge()用法举例
- hibernate 怎么使用 sequence
- Hibernate包作用详解
- 如何使用hibernate访问数据库
- Hibernate中的“count”函数怎么应用
- 谁能给我说说hibernate的作用 还有用法是什么 是不是可以直接调取数据库里的信息
单词hibernate什么用法
return (Collection) hibernateTemplate.execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { List result = session.createQuery("from MyTest") .list(); return result; } }); 这...
Hibernate 的复杂用法HibernateCallback
HibernateTemplate还提供了一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式可通过如下两个方法完成:
● Object execute(HibernateCallback action)。
● List execute(HibernateCallback action)。
这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装 Hibernate后灵活性不足的缺陷。
HibernateCallback 是一个接口,该接口包含一个方法doInHibernate(org.hibernate. Session session),该方法只有一个参数Session。在开发中提供HibernateCallback实现类时,必须实现接口里包含的 doInHibernate方法,在该方法体内即可获得Hibernate Session的引用,一旦获得了Hibernate Session的引用,就可以完全以Hibernate的方式进行数据库访问。
注意:doInHibernate方法内可以访问Session,该Session对象是绑定在该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证了对于复杂的持久层访问,依然可以使用Hibernate的访问方式。
下面的代码对HibernateDaoSupport类进行扩展(虽然Spring 2.0的HibernateTemplate提供了一个分页方法setMaxResults,但仅此一个方法依然不能实现分页查询),这种扩展主要是为该类增加了3个分页查询的方法,分页查询时必须直接调用Hibernate的Session完成,因此,必须借助于HibernateCallBack的帮助。
public class YeekuHibernateDaoSupport extends HibernateDaoSupport
{
/**
* 使用hql 语句进行分页查询操作
* @param hql 需要查询的hql语句
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
public List findByPage(final String hql,
final int offset, final int pageSize)
{
//HibernateDaoSupport已经包含了getHibernateTemplate()方法
List list = getHibernateTemplate().executeFind(new
HibernateCallback()
{
public Object doInHibernate(Session session)
throws HibernateException, SQLException
//该方法体内以Hibernate方法进行持久层访问
{
List result = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
/**
* 使用hql 语句进行分页查询操作
* @param hql 需要查询的hql语句
* @param value 如果hql有一个参数需要传入,value就是传入的参数
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
public List findByPage(final String hql , final Object value ,
final int offset, final int pageSize)
{
List list = getHibernateTemplate().executeFind(new
HibernateCallback()
{
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
//下面查询的是最简单的Hiberante HQL查询
List result = session.createQuery(hql)
.setParameter(0, value)
.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
/**
* 使用hql 语句进行分页查询操作
* @param hql 需要查询的hql语句
* @param values 如果hql有多个参数需要传入,values就是传入的参数数组
* @param offset 第一条记录索引
* @param pageSize 每页需要显示的记录数
* @return 当前页的所有记录
*/
public List findByPage(final String hql, final Object values,
final int offset, final int pageSize)
{
List list = getHibernateTemplate().executeFind(new
HibernateCallback()
{
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
Query query = session.createQuery(hql);
for (int i = 0 ; i 《 values.length ; i++)
{
query.setParameter( i, values);
}
List result = query.setFirstResult(offset)
.setMaxResults(pageSize)
.list();
return result;
}
});
return list;
}
}
在上面的代码实现中,直接使用了getHibernateTemplate()方法,这个方法由Hibernate- DaoSupport提供。而YeekuHibernateDaoSupport是HibernateDaoSupport的子类,因此,可以直接使用该方法。
当实现doInHibernate(Session session)方法时,完全以Hibernate的方式进行数据库访问,这样保证了Hibernate进行数据库访问的灵活性。
注意:Spring提供的XxxTemplate和XxxCallBack互为补充,二者体现了Spring框架设计的用心良苦:XxxTemplate对通用操作进行封装,而XxxCallBack解决了封装后灵活性不足的缺陷。
hibernate中如何使用merge()用法举例
它跟saveOrUpdate()有些像,但是merge方法在执行之前都回去缓存中找是不是有相应的记录,也就是会有一条select语句,执行改语句的目的是为了判断该对象是否被修改了。而update就不管这些,直接就一条update语句或。如果查询出改记录不存在则直接再插入一条记录。用例:
User user = new User();
//user.setId(4);
user.setUsername("heyuanling2");
user.setAge(23);
user.setSex("w");
user.setPassword("heyuanling");
Session session = this.getSession();
Transaction tr = session.beginTransaction();
//User exituser = (User)session.get(User.class, new Integer(1));
session.merge(user);
tr.commit();
hibernate 怎么使用 sequence
为表创建自增长自段有两种,一种是不同的表使用各自的Sequence,方法如下:
1、在Oracle sequence首先创建sequence
create sequence seq_id minvalue 1 start with 1 increment by 1 cache 20;
2.在你的hbm.xml中的配置
《id column="ID0000" name="id" type="integer"》 《generator class="sequence"》 《param name="sequence"》seq_idparam》 generator》 id》
这样再插入数据的时候,Hibernate会自动生成如下语句:
hibernate: select seq_id.nextval from dual hibernate: insert into YXJK.T_YXJK_WHRYTXL (XM0000, ZW0000, LXDH00, SJHM00, DZYJ00, IP0000, ID0000) values (?, ?, ?, ?, ?, ?, ?)
自动生成下一个序列值,然后将对象插入表中。在使用的时候需要注意,Hibernate对于sequence的主键的要求是一定要是shor,long,或者integer。
Hibernate包作用详解
Hibernate一共包括了 个jar包 令人眼花缭乱 本文将详细讲解Hibernate每个jar包的作用 便于你在应用中根据自己的需要进行取舍
下载Hibernate 例如 稳定版本 解压缩 可以看到一个hibernate jar和lib目录下有 个jar包
hibernate jar:
Hibernate的库 没有什么可说的 必须使用的jar包
cglib a *** jar:
CGLIB库 Hibernate用它来实现PO字节码的动态生成 非常核心的库 必须使用的jar包
dom j jar:
dom j是一个Java的XML API 类似于jdom 用来读写XML文件的 dom j是一个非常非常优秀的Java XML API 具有性能优异 功能强大和极端易用使用的特点 同时它也是一个开放源代码的软件 可以在SourceFe上找到它 在IBM developerWorks上面可以找到一篇文章 对主流的Java XML API进行的性能 功能和易用性的评测 dom j无论在那个方面都是非常出色的 我早在将近两年之前就开始使用dom j 直到现在 如今你可以看到越来越多的Java软件都在使用dom j来读写XML 特别值得一提的是连Sun的JAXM也在用dom j 这是必须使用的jar包 Hibernate用它来读写配置文件
odmg jar:
ODMG是一个ORM的规范 Hibernate实现了ODMG规范 这是一个核心的库 必须使用的jar包
mons collections jar
Apache Commons包中的一个 包含了一些Apache开发的集合类 功能比java util *强大 必须使用的jar包
mons beanutils jar
Apache Commons包中的一个 包含了一些Bean工具类类 必须使用的jar包
mons lang jar:
Apache Commons包中的一个 包含了一些数据类型工具类 是java lang *的扩展 必须使用的jar包
mons logging jar:
Apache Commons包中的一个 包含了日志功能 必须使用的jar包 这个包本身包含了一个Simple Logger 但是功能很弱 在运行的时候它会先在CLASSPATH找log j 如果有 就使用log j 如果没有 就找JDK 带的java util logging 如果也找不到就用Simple Logger mons logging jar的出现是一个历史的的遗留的遗憾 当初Apache极力游说Sun把log j加入JDK 然而JDK 项目小组已经接近发布JDK 产品的时间了 因此拒绝了Apache的要求 使用自己的java util logging 这个包的功能比log j差的很远 性能也一般
后来Apache就开发出来了mons logging jar用来兼容两个logger 因此用mons logging jar写的log程序 底层的Logger是可以切换的 你可以选择log j java util logging或者它自带的Simple Logger 不过我仍然强烈建议使用log j 因为log j性能很高 log输出信息时间几乎等于System out 而处理一条log平均只需要 us 你可以在Hibernate的src目录下找到Hibernate已经为你准备好了的log j的配置文件 你只需要到Apache 网站去下载log j就可以了 mons logging jar也是必须的jar包
使用Hibernate必须的jar包就是以上的这几个 剩下的都是可选的
ant jar:
Ant编译工具的jar包 用来编译Hibernate源代码的 如果你不准备修改和编译Hibernate源代码 那么就没有什么用 可选的jar包
optional jar
Ant的一个辅助包
c p jar
C PO是一个数据库连接池 Hibernate可以配置为使用C PO连接池 如果你准备用这个连接池 就需要这个jar包
proxool jar
也是一个连接池 同上
mons pool jar mons dbcp jar:
DBCP数据库连接池 Apache的Jakarta组织开发的 Tomcat 的连接池也是DBCP
实际上Hibernate自己也实现了一个非常非常简单的数据库连接池 加上上面 个 你实际上可以在Hibernate上选择 种不同的数据库连接池 选择哪一个看个人的偏好 不过DBCP可能更通用一些 另外强调一点 如果在EJB中使用Hibernate 一定要用App Server的连接池 不要用以上 种连接池 否则容器管理事务不起作用
connector jar:
JCA 规范 如果你在App Server上把Hibernate配置为Connector的话 就需要这个jar 不过实际上一般App Server肯定会带上这个包 所以实际上是多余的包
jaas jar:
JAAS是用来进行权限验证的 已经包含在JDK 里面了 所以实际上是多余的包
jcs jar
如果你准备在Hibernate中使用JCS的话 那么必须包括它 否则就不用
jdbc _ stdext jar:
JDBC 的扩展包 一般来说数据库连接池会用上它 不过App Server都会带上 所以也是多余的
jta jar
JTA规范 当Hibernate使用JTA的时候需要 不过App Server都会带上 所以也是多余的
junit jar:
Junit包 当你运行Hibernate自带的测试代码的时候需要 否则就不用
xalan jar xerces jar xml apis jar:
lishixinzhi/Article/program/Java/ky/201311/28745如何使用hibernate访问数据库
首先,我们把hibernate最基本的数据库连接,使用mysql。 见一个java工程,见一个包名为book, 在book的包下加一个java类Book.java,其代码如下: package book; public class Book { private Integer id; private String name; private String writer; public Integer get hibernate最基本的数据库连接,使用mysql。 见一个java工程,见一个包名为“book”
温馨提示:下图仅供欣赏,不作为教学。
然后在在book的包下加一个java类Book.java,其代码如下: package book; public class Book { private Integer id; private String name; private String writer; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getWriter() { return writer; } public void setWriter(String writer) { this.writer = writer; } }
温馨提示:下图仅供欣赏,不作为教学。
***隐藏网址***
温馨提示:下图仅供欣赏,不作为教学。
***隐藏网址***
温馨提示:下图仅供欣赏,不作为教学。
这是连接mysql数据库的,用户名和密码改为你mysql数据库的 《property name="show_sql"》true《/property》这是在后台打印sql语句 《mapping resource="book/Book.hbm.xml" /》这是找到映射文件。
温馨提示:下图仅供欣赏,不作为教学。
然后些个测试类:代码如下: package test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import book.Book; public class MainTest { /** * @param args */ public static void main(String args) { try { Configuration cfg=new Configuration()。configure(); SessionFactory sf=cfg.buildSessionFactory(); Session session = sf.openSession(); Transaction ts=session.beginTransaction(); Book b=new Book(); b.setName("hibernate"); b.setWriter("div"); session.save(b); // Book b=(Book) session.get(Book.class,1); // if(b!=null){ // b.setName("xujun"); // System.out.println("书名为:"+b.getName()); // System.out.println("作者为:"+b.getWriter()); // session.delete(b); // } ts.commit(); session.close(); sf.close(); } catch (Exception e) { e.printStackTrace(); } } }
mysql表的字段如下:
把数据库建好后就可以测试。对了,关键的还没有说,还得把antlr.jar,cglib.jar,asm.jar,asm-attrs.jar,commons-colletions.jar,commons-logging.jar,ehcache.jar, jta.jar,dom4.jar,log4.jar,hibernate3.jar引入到lib目录下
温馨提示:下图仅供欣赏,不作为教学。
Hibernate中的“count”函数怎么应用
应用一:
String hql = "select count(*) from User as user";
Integer count = (Integer)getHibernateTemplate().find(hql).listIterator().next();
return count.intValue();应用二:
String hql = "select count(*) from User as user";
return ((Integer)getHibernateTemplate().iterate(hql).next()).intValue();应用三:
String hql = "select count(*) from User as user";
Query query = getHibernateTemplate().createQuery( getSession(),hql);
return ((Integer)query.uniqueResult()).intValue();
select count(uu.userid) from T_Userinfo uu where uu.username like ’%t%’;T_Userinfo为实体类的类名uu.username为实体类中的成员变量的名字。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用
谁能给我说说hibernate的作用 还有用法是什么 是不是可以直接调取数据库里的信息
Hibernate对jdbc进行封装,你写实现类的时候继承下HibernateDaoSupport类,有一个HibernateTemplate,可以调用增删该查方法。aop(面向切面)是Spring中的。

更多文章:
schema翻译(数据库中的”SCHEMA”是什么,怎么翻译)
2026年10月19日 11:10
高级语言程序设计是c语言吗(高级语言程序设计C与C++有什么区别吗,是不是难度等级不一样啊)
2026年10月19日 10:40
10进制转换成2进制在线(十进制数怎么换算成二进制数、在线等)
2026年10月19日 08:50
stack overflow at line(stack overflow at line: 9是什么意思,如何解决)
2026年10月19日 07:20
tif格式的特点(常见的图片文件格式有那些各自特点是什么(六种以上))
2026年10月19日 06:10
html颜色选择器代码(html如何让字体选中一个颜色未选中时另一个颜色)
2026年10月19日 01:30






