hibernate初使用
准备工作,安装及配置Hibernate
http://zhoualine.iteye.com/blog/1190141
在产生数据库表映射 Java 对象时,我增加了数据库中的两张表分别为Chatlog和Users

准备工作完了之后,在项目中新建一个类PrjData.java,主要是为了配置项目的SessionFactory
public class PrjData {
/**
* 整个项目的sessionfactory
*/
private static SessionFactory sessionFactory = null;
static {
try {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
Logs.error(e.toString());
}
}
/**
* 静态函数,用于加载配置文件获取session对象
*
* @return Session
*/
public static Session getSession() // 获取session对象
{
return sessionFactory.openSession();
}
}
配置参考:http://www.cnblogs.com/liuyang-1037/archive/2009/03/26/1422254.html
接下来就是测试我们通过Hibernate与数据库的交互情况了
public static void testInsert() {
String[] contents = new String[] { "今天", "人生赢家", "我爱你"};
Session session = PrjData.getSession();
Transaction transaction = session.beginTransaction();
for(int i = 0; i < contents.length; i ++) {
Chatlog chatlog = new Chatlog();
chatlog.setContent(contents[i]);
if(null != session) {
session.save(chatlog);
}
}
try {
session.flush();
transaction.commit();
session.close();
} catch (Exception e) {
Logs.error(e.toString());
e.printStackTrace();
// TODO: 异常抛出后如何处理
session.close();
return ;
}
}
public static void main(String[] args) {
testInsert();
}
在此过程中我一共遇到了一下异常
1.org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver org.gjt.mm.mysql.Driver could not be loaded
这是因为在忘记在路径中配置mysqlconnecter这个jar包,配置下就解决问题了
2.org.hibernate.MappingNotFoundException: resource: Chatlog.hbm.xml not found
这个问题是因为我们在生成一个hibernate.cfg.xml后没有将我们加入的其他hbm.xml文件映射进来,所以找不到,在hibernate.cfg.xml中添加如下代码既可
<mapping resource = "com/italk/hibernate/Chatlog.hbm.xml"/>
<mapping resource = "com/italk/hibernate/Users.hbm.xml"/>
注意其中的“/”不要习惯的换成“.”
3.org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
在网上查询后有的是因为model类没有写好setter和getter方法,但是我的两个model都是自动生成的,没问题,经过检查发现原来是导入的jar包不正确,重新导入需要的jar后 问题就解决了,参考http://blog.csdn.net/myloveyoyo1314/article/details/4445644
问题解决完后编译程序,查看数据库,没问题!
接下来就是尝试在hbm.xml中加入自己的sql语句了
使用原声sql查询<sql_query>,使用这种方式必须要把所有的列写全才行,否则会报“列名无效”的错误,除非使用return-scalar来设置字段类型
1.不带参数的查询
<sql-query name="getChatlogs"><![CDATA[select j.* from Chatlog as j limit 10]]>
<return alias="j" class="com.italk.hibernate.Chatlog"></return>
</sql-query>
public List<Chatlog> getChatlogs() {
Session session = PrjData.getSession();
Query query = session.getNamedQuery("getChatlogs");
List<Chatlog> list = query.list();
session.close();
return list;
}
2.带参数查询
<sql-query name="getChatlog">
<![CDATA[select j.* from Chatlog as j where j.content=:theContent and j.parentID=:theParentID]]>
<return alias="j" class="com.italk.hibernate.Chatlog"></return>
</sql-query>
/**
* 根据content和parentID从数据库中获得一个Chatlog
*
* @param content
* @param parentID
* @return 返回数据中匹配的CHatlog 否则返回null
*/
public Chatlog getChatlog(String content, long parentID) {
Session session = PrjData.getSession();
Query query = session.getNamedQuery("getChatlog");
query.setString("theContent", content);
query.setLong("theParentID", parentID);
List<Chatlog> list = query.list();
session.close(); if(null != list && 0 != list.size())
return list.get(0);
return null; }
3.带返回类型查询
<sql-query name="getRecirdsCount"><return-scalar column="num" type="long"/><![CDATA[SELECT COUNT(*) as num FROM chat_record]]>
</sql-query>
public static void getRecordCount() {
Session session = PrjData.getSession();
Query query = session.getNamedQuery("getRecirdsCount"); // 按更新时间和顶人数执行查询语句,在ChatRecords.hbm.xml文件中声明
List<?> list = query.list();
session.close();
int size = list.size();
long count= (Long) list.get(0);
}
到此,我的Hibernate初体验基本结束,欢迎多多指正。
hibernate初使用的更多相关文章
- Hibernate初认识以及HelloWorld
一.Hibernate初认识 1. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 2.对 ...
- >hibernate初认识
一.什么是hibernate 1.hibernate是java领域的一款开源的ORM框架技术 2.hibernate对JDBC进行了非常轻量级的封装(使用了反射机制+配置或注解) 二.hibernat ...
- hibernate初体验
简介: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使 ...
- Hibernate初体验及简单错误排除
Hibernate是什么,有多少好处,想必查找这类博文的都知道,所以就不多说了.下面是我对Hibernate简单使用的一个小小的总结.与君(主要是刚入门的)共勉吧! 创建的顺序 创建Hibernate ...
- hibernate 初印象
将要学习的内容: 1.HelloWorld a) xml b) annotation2.Hibernate 原理模拟 - 什么是 O/R Mapping 以及为什么要有 O/RMapping3.常见 ...
- Hibernate学习一----------Hibernate初实现
© 版权声明:本文为博主原创文章,转载请注明出处 ORM(Object/Relationship Mapping):对象/关系映射 - 利用面向对象思想编写的数据库应用程序最终都是把对象信息保存在关系 ...
- (三)mybatis之对Hibernate初了解
前言:为什么会写Hibernate呢?因为HIbernate跟Mybatis一样,是以ORM模型为核心思想的,但是这两者有相似的地方也有差异的地方.通过这两种框架的比对,可以对mybatis有着更深的 ...
- Hibernate初了解
Hibernate是一个开放源代码的对象关系映射框架, 它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JD ...
- Hibernate 初体验
为什么会产生 Hibernate Mybatis 这类的dao层框架 传统的jdbc 虽然执行速度很快,但是开发效率很低,随着面向对象开发的设计思想,在面向对象编程中 将对象 进行持久化,存入关系型的 ...
随机推荐
- [Oracle] CPU/PSU补丁安装详细教程
Oracle CPU的全称是Critical Patch Update, Oracle对于其产品每个季度发行一次安全补丁包,通常是为了修复产品中的安全隐患,以下是对CPU/PSU补丁安装的具体操作步骤 ...
- Linux软连接和硬链接(转)
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...
- python-生成测试报告-然后自动发送邮件
前两篇单独介绍了生成测试报告和自动发送邮件,那么现在把两者整合到一起:生成测试报告后然后自动发送邮件,这里只是简单的整合实现功能,其实还可以优化的,先用吧,后面再慢慢优化 先看下目录,其实目录还是一样 ...
- 谈谈JS中的高级函数
博客原文地址:Claiyre的个人博客如需转载,请在文章开头注明原文地址 在JavaScript中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅 ...
- mysql插入中文出错,提示1366 - Incorrect
提示这样 1366 - Incorrect string value: '\xC0\x86' for column 'platecl' at row 1 是因为编码的问题(在这儿我们需要的是gbk,当 ...
- AT指令(二)
1.常用操作1.1 AT命令解释:检测 Module 与串口是否连通,能否接收 AT 命令:命令格式:AT<CR>命令返回:OK (与串口通信正常) (无返回,与串 ...
- (转)Inno Setup入门(十八)——Inno Setup类参考(4)
本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17251009 编辑框 编辑框也叫文本框,是典型的窗口可视化组件,既可 ...
- Git出现提交错误--Push to origin/master was rejected(转)
Step1:出现的问题? 在使用Git Push代码的时候,会出现Push to origin/master was rejected 的错误提示.在第一次提交到代码仓库的时候非常容易出现,因为初始化 ...
- [Java.Web] Servlet 的一些细节
本文来自 传智播客视频PPT 1. 由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工 ...
- 转:mysql加锁处理分析
MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文,准备就My ...