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 虽然执行速度很快,但是开发效率很低,随着面向对象开发的设计思想,在面向对象编程中 将对象 进行持久化,存入关系型的 ...
随机推荐
- strlen和sizeof的长度区别
strlen返回字符长度 而sizeof返回整个数组占多长,字符串的\0也会计入一个长度
- win10下安装并启动zookeeper
下载直接到zk的官网(zookeeper.apache.org)即可,点击右边的Releases,在Download下再点Download进入镜像下载页面,在给出的链接列表里选择一个镜像地址,进去后选 ...
- Linux 根文件系统目录结构
/:根目录 /bin:linux的常用命令 /sbin:linux的常用命令 /lib:库文件(so.elf) /etc:系统配置文件和脚本文件 /sys:驱动相关的信息 /dev:设备节点目录 /p ...
- Unit04: JSP基本语法 、 JSP运行原理
Unit04: JSP基本语法 . JSP运行原理 hello.jsp <%@page pageEncoding="utf-8"%> <!doctype html ...
- 与FPGA相关的独热码
独热码在状态机里面使用比价广泛,这一块有些人爱用,有些人嫌烦,有时候可以用用格雷码跳转,不过格雷码只支持那种一步到底的,中间有分支就不好做了,所以后来还是回到了独热码的正道上. 说白了独热码的使用,在 ...
- Clustershell集群管理
在运维实战中,如果有若干台数据库服务器,想对这些服务器进行同等动作,比如查看它们当前的即时负载情况,查看它们的主机名,分发文件等等,这个时候该怎么办?一个个登陆服务器去操作,太傻帽了!写个shell去 ...
- Linux:WebServer(Apacge)
/ + 内容:表示在文本中搜索该内容: :q!:不保存直接退出: chown -R imooc:imooc /data:将 /data 文件夹的权限所有人该为用户 imooc: -R:采用递归的方 ...
- 纯css实现点击事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [Java.Web][Servlet]读取配置
private ServletConfig config; public void doGet(HttpServletRequest request, HttpServletResponse resp ...
- hadoop Partiton中的字符串Hash函数改进
最近的MapReduce端的Partition根据map生成的Key来进行哈希,导致哈希出来的Reduce端处理任务数量非常不均匀,有些Reduce端处理的数据量非常小(几分钟就执行完成,而最后的pa ...