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 虽然执行速度很快,但是开发效率很低,随着面向对象开发的设计思想,在面向对象编程中 将对象 进行持久化,存入关系型的 ...
随机推荐
- BZOJ1590:[Usaco2008 Dec]Secret Message秘密信息
浅谈\(Trie\):https://www.cnblogs.com/AKMer/p/10444829.html 题目传送门:https://lydsy.com/JudgeOnline/problem ...
- 坑爹的AMH
坑爹的 AMH的配置文件在这里: nginx 配置文件1:/usr/local/nginx-generic-1.6/conf/nginx.conf nginx 配置文件2:/home/wwwroot/ ...
- Tomcat最大连接数问题
Tomcat的server.xml中Context元素的以下参数应该怎么配合适 <Connector port="8080" maxThreads="150&quo ...
- Linux 文件系统目录结构
进入 Linux 根目录(即 "/",Linux文件系统的入口,也是处于最高一级的目录),运行 "ls -l" 命令,可以看到 Linux 系统目录. 1./b ...
- GNU Radio: 自定义 block 实例
综述 本文通过在GNU Radio 中编写一个block的例子,系统介绍创建一个block的过程.该 block 的功能是可以在GRC中通过滑块(WX GUI Slider)来实时改变信号源(Sign ...
- NumPy-快速处理数据--矩阵运算
本文摘自<用Python做科学计算>,版权归原作者所有. 1. NumPy-快速处理数据--ndarray对象--数组的创建和存取 2. NumPy-快速处理数据--ndarray对象-- ...
- java 的一个hellow word 代码解释
/* This is a simple Java program. Call this file "Example.java". */(上面是注释的方法) class Exampl ...
- HTML转义字符表
- 【洛谷】P2983 [USACO10FEB]购买巧克力Chocolate Buying(贪心)
题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...
- WP8 MVVM设计模式
类似了Android里边的MVC模式, Windows Phone 有自己的Model-View-ViewModel模式,这种模式的作用就是为了Data和UI分离开来. 如果你英文较好的话,你可以不再 ...