博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate入门教程
阅读量:6344 次
发布时间:2019-06-22

本文共 5215 字,大约阅读时间需要 17 分钟。

Hibernate

随心所欲的使用面向对象思想操纵数据库.

Table of contents

Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库,从而无需顾及数据库的实现究竟是SQLServer还是Mysql还是Oracle

搭建环境

搭建在一般工程中

jar下载

官网进入后看到hibenate ORM,点击more,左侧边栏选择releases中的一个版本,页面最下方,选择download下载即可

官方jar包:lib文件:requeired文件里的所有jar拷贝到自己的新建工程中去,然后在加上连接数据库相关的包,mysql-connector

配置文件

Hibernate.cfg.xml放置在src下,需要修改url,username和password

jdbc:mysql://localhost:3306/mycms
com.mysql.jdbc.Driver
root
123456

Node.hbm.xml 映射到具体的pojo,一个pojo配置一个映射的xml

名字和数据库的名字即使一样,也需要写上property的映射

pojo的主键属性名称对应到数据库实体的主键名称写在id中

,其他的写在property中

半sql半面向对象写法

在一个入口方法或者测试类方法中,加入

//构建上下文换肩加配置连接池,开启事务Configuration configuration = new Configuration().configure();SessionFactory sessionFactory = configuration.buildSessionFactory();Session session = sessionFactory.openSession();Transaction transaction = session.beginTransaction();//这里填写测试代码//提交事务并关闭各种流transaction.commit();session.close();sessionFactory.close();

以下的测试代码,分别放在上面代码的`这里填写测试代码

单个数据存储到数据库

Node node = new Node();;    node.setNodeId("testNodeId1");    node.setPid("testPid1");    node.setType((byte)1);    node.setLevel((short)1);    node.setName("testName1");    session.save(node);

查询单个对象

Node node=(Node)session.get(Node.class,1);System.out.println(node);//Node.class后面的1是数据库中的主键值

更新单个对象

Node node=(Node)session.get(Node.class,10);node.setName("updateName");session.update(node);

删除对象

Node node = (Node) session.get(Node.class, 10);session.delete(node);

查询整个表

这里需要注意,如果你的pojo叫 myuser,而数据库中对应的表叫user,所有使用createQuery的地方,涉及到了表,就该填myuser

Query query = session.createQuery("FROM Node");List list = query.list();System.out.println("list = " + list);

查询某个对象的某个属性

Query query = session.createQuery("SELECT nodeId FROM Node");List list = query.list();System.out.println("list = " + list);

查询指定行数据

Query query = session.createQuery("FROM Node WHERE type=?");query.setParameter(0,10);List list = query.list();System.out.println("list = " + list);

查询指定数据传回一个实体

//需要pojo有相应的构造器Query query = session.createQuery("SELECT new Node(id,name,nodeId) FROM Node");List
list = query.list();System.out.println("list = " + list);

分组聚合

Query query = session.createQuery("SELECT type,SUM(id) FROM Node GROUP BY type");List list = query.list();for (Object o : list) {    Object[] result = (Object[]) o;    System.out.println(Arrays.toString(result));}

排序

Query query = session.createQuery("FROM Node ORDER BY id DESC");List list = query.list();System.out.println("list = " + list);

limit

Query query = session.createQuery("FROM Node ORDER BY id DESC");query.setFirstResult(2);query.setMaxResults(3);List list = query.list();System.out.println("list = " + list);

使用参数

String colName = "id";String sql = "FROM Node WHERE " + colName + "=?";Query query = session.createQuery(sql);query.setParameter(0,6);Node node = (Node) query.uniqueResult();System.out.println("node = " + node);

或者这种

Query query = session.createQuery("FROM Node WHERE id:id");query.setParameter("id",7);List list = query.list();System.out.println("list = " + list);

in

Query query = session.createQuery("FROM Node WHERE id IN(:ids)");query.setParameterList("ids",new Object[]{4,6,7});List list = query.list();System.out.println("list = " + list);//In 的效率很低

写在配置文件里

User.hbm.xml

...
FROM Node WHERE id between ? AND ?
...

代码部分

Query query = session.getNamedQuery("getUserByAge");query.setParameter(0,6);query.setParameter(1,8);List list = query.list();System.out.println("list = " + list);

完全的sql写法

仿照第一种半sql写法,格式变化就可以

1.原生sql写法

SQLQuery query = session.createSQLQuery("SELECT * FROM tree");query.addEntity(Node.class);List list = query.list();System.out.println("list = " + list);

完全的面向对象写法

仿照第一种半sql写法,格式变化就可以

Criteria criteria = session.createCriteria(Node.class);criteria.add(Restrictions.eq("id",6));List list = criteria.list();System.out.println("list = " + list);

相当于查出来了所有的放在criteria里面

不等于

Criteria criteria = session.createCriteria(Node.class);criteria.add(Restrictions.ne("id",1));List list = criteria.list();System.out.println("list = " + list);

排序

Criteria criteria = session.createCriteria(Node.class);criteria.addOrder(Order.desc("id"));List list = criteria.list();System.out.println("list = " + list);

添加分页

Criteria criteria = session.createCriteria(Node.class);criteria.add(Restrictions.ne("id",1));criteria.setFirstResult(0);criteria.setMaxResults(2);List list = criteria.list();System.out.println("list = " + list);

分组聚合

Criteria criteria = session.createCriteria(Node.class);ProjectionList projectionList = Projections.projectionList();projectionList.add(Projections.sum("id"));projectionList.add(Projections.groupProperty("type"));criteria.setProjection(projectionList);List list = criteria.list();for (Object o : list) {    Object[] result = (Object[]) o;System.out.println(Arrays.toString(result));}

转载地址:http://rcjla.baihongyu.com/

你可能感兴趣的文章
【原创】用MySQL 生成随机密码-增加大写处理
查看>>
【原创】PostgreSQL 快速创建空表TIPS
查看>>
SFB 项目经验-01-共存迁移-Lync 2013-TO-SFB 2015-规划01
查看>>
nginx版本升级到1.10
查看>>
Windows 8快捷键
查看>>
CentOS 6.3下Openswan实现双IDC互联
查看>>
Windows Server 2016-系统安装软硬件要求
查看>>
WPF外包公司——北京动点飞扬软件联系方式和官方博客地址
查看>>
Wvtool学习(三):实现wvtool停词过滤的功能
查看>>
C#读取文件:按行读取
查看>>
编程乐趣:读取12306票价和余票信息(二)
查看>>
[简明python教程]学习笔记2014-04-29 23:41:40
查看>>
如何解决WEB性能测试中的验证码问题
查看>>
通过pip删除/管理django旧版本
查看>>
活动目录服务的配置与管理(8) 利用组策略限制软件运行
查看>>
写给新入职的毕业生们
查看>>
Nginx+tomcat实现session共享
查看>>
nagios添加主机组,服务组,联系组
查看>>
一些字符串的方法最优方法
查看>>
个人网络信息安全管理方法分享
查看>>