准备工作,安装及配置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初使用的更多相关文章

  1. Hibernate初认识以及HelloWorld

    一.Hibernate初认识 1. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 2.对 ...

  2. >hibernate初认识

    一.什么是hibernate 1.hibernate是java领域的一款开源的ORM框架技术 2.hibernate对JDBC进行了非常轻量级的封装(使用了反射机制+配置或注解) 二.hibernat ...

  3. hibernate初体验

    简介: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使 ...

  4. Hibernate初体验及简单错误排除

    Hibernate是什么,有多少好处,想必查找这类博文的都知道,所以就不多说了.下面是我对Hibernate简单使用的一个小小的总结.与君(主要是刚入门的)共勉吧! 创建的顺序 创建Hibernate ...

  5. hibernate 初印象

    将要学习的内容: 1.HelloWorld a) xml b) annotation2.Hibernate 原理模拟 - 什么是 O/R Mapping 以及为什么要有 O/RMapping3.常见 ...

  6. Hibernate学习一----------Hibernate初实现

    © 版权声明:本文为博主原创文章,转载请注明出处 ORM(Object/Relationship Mapping):对象/关系映射 - 利用面向对象思想编写的数据库应用程序最终都是把对象信息保存在关系 ...

  7. (三)mybatis之对Hibernate初了解

    前言:为什么会写Hibernate呢?因为HIbernate跟Mybatis一样,是以ORM模型为核心思想的,但是这两者有相似的地方也有差异的地方.通过这两种框架的比对,可以对mybatis有着更深的 ...

  8. Hibernate初了解

    Hibernate是一个开放源代码的对象关系映射框架, 它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JD ...

  9. Hibernate 初体验

    为什么会产生 Hibernate Mybatis 这类的dao层框架 传统的jdbc 虽然执行速度很快,但是开发效率很低,随着面向对象开发的设计思想,在面向对象编程中 将对象 进行持久化,存入关系型的 ...

随机推荐

  1. Protel 99 铺铜的一个坑 Pour Over Same

    Protel 99 铺铜的一个坑 Pour Over Same 好久没用 Protel 99 了,修改了一个旧的 PCB 文件. 需要修改线路,由于改了线路需要重新铺铜,得重新画铺铜的边框. 以下这个 ...

  2. C#软件安全 反编译 加密与安全等等

    我最近开发了一些C#语言的软件,但是由于这是一种解释型语言,也就是会转化成中间件语言,很容易就被反编译解密,包括exe和dll库等等,这时候我们真的需要使用一些技巧来将自己的成果进行加密,加壳等办法. ...

  3. 常见企业IT支撑【1、办公网络IP地址规划】

    规划思路如下,可灵活变化

  4. 生产者-消费者问题:介绍POSIX线程的互斥量和条件变量的使用

    全局初始化互斥量和条件变量(不全局也行,但至少要对线程启动函数可见,这样才能使用.) static pthread_cont_t cond = PTHREAD_COND_INITIALIZER; st ...

  5. Spring表单标签

    虽然我们可以使用HTML原生的form表单标签来轻松的写出一个表单,其实我一直都是这样做的,但是使用Spring表单标签可以更方便我们完成例如:验证失败后表单数据的回填功能(虽然你可以使用EL+JST ...

  6. 给iOS开发新手送点福利,简述UILabel的属性和用法

    UILabel属性 1.text:设置标签显示文本. label.text = @"我是Label"; 2.attributedText:设置标签属性文本. NSString *t ...

  7. length length()

    数组长度 length String 长度 length()

  8. windows administrator提升system

    最近刚好有这个需求,本想开一个super cmd,但是win10上不兼容不太好. 于是使用PsExec来提升system权限. 微软传送地址:https://docs.microsoft.com/en ...

  9. Pathway富集分析气泡图

    data.tsv > pathway = read.table("data.tsv",header = T, sep="\t") > library ...

  10. Tkinter Colors(颜色)

          Tkinter Colors: Tkinter的代表与字符串的颜色.一般有两种方式来指定Tkinter的颜色 Tkinter的代表与字符串的颜色.一般有两种方式来指定Tkinter的颜色: ...