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 虽然执行速度很快,但是开发效率很低,随着面向对象开发的设计思想,在面向对象编程中 将对象 进行持久化,存入关系型的 ...
随机推荐
- Web 漏洞分析与防御之 XSS(一)
原文地址:Web 漏洞分析与防御之 XSS(一) 博客地址:http://www.extlight.com 一.全称 跨站脚本攻击(Cross Site Scripting) 二.原理 通过在网站中的 ...
- RK3288 OTG切换为Host模式
OTG = On The Go,是USB的一种工作模式 USB协议中规定了两类设备,一类是Host.一类是Device. Host为主控设备,如PC,Device为从设备,如鼠标.U盘等,Device ...
- xunsearch的使用(二)
1.查看配置文件vim /data/local/xunsearch/sdk/php/app/demo.ini [pid] type = id [subject] type = title [messa ...
- C# WMP 视频播放
1. C#播放器控件常用的方法介绍 右击工具箱->选择项(I)... -> 显示"选择工具箱项" -> COM组件 -> Windows Media Pla ...
- 基于EFCore的数据Cache实现
.NetCore 内置缓存加入到EFCore操作中,数据更新或者查询时自动更新缓存.github地址 2019-04-27 初步完成逻辑代码编写,尚未经过测试,诸多细节有待完善. 2019-04-28 ...
- java代码-----实现有键盘获得的字符串存储在文件中,并从文件中读取后显示在屏幕上
总结: 没体会到 package com.a.b; import java.io.*; public class tsetOut { public static void main(String[] ...
- eclipse插件-easy explore
最近找到一个Eclipse的插件,名字是Easy Explore,是Easy Structs 其 中的一个部分.主要的功能就是在Eclipse里面视图的部分如果看到自己的工程,或者Package,包什 ...
- Oracle清理大表,降水位
背景:一张表的清理机制存在问题,导致该表的数据一直在增加,该表水位已很高,需要对该表的数据进行清理并降水位. 1.1 迁移前准备 步骤一.新建表 p_transaction_bak. oracle@l ...
- kubectl get pods The connection to the server was refused - did you specify the rig
1 主要是运行这个命令 alias kubectl='kubectl --kubeconfig=/etc/kubernetes/kubelet.conf'问题解决. 同时也用到如下命令: pas ...
- docker 学习(十一) 镜像常用命令
1 创建账户,创建仓库 首先在dockerhub上有自己的账户,然后创建一个repository(如上图), 然后创建一个名字为robinfei/consumer的仓库. 2 本地镜像打标签(比 ...