这是学习java的第四个月,开始了框架的学习,先看看关于hibernate的一些基础知识吧!!!!!!!
Hibernate的简介
1、 是优秀的持久化解决方案。
2、 实现持久化的两种方式:
a) 序列化:将对象以流的形式保存在硬盘中
b) 数据库:将对象转换成数据库中的一条数据
3、 对象映射关系:ORM(ObjectRelationship Mapping)
java 数据库
类 表
对象 行/一条数据
属性 列
使用hibernate的步骤
1、 装配hibernate的jar包和配置文件(hibernate.cfg.xml)
配置文件中可以添加属性:运行的时候会在后台打印sql语句
<property name="show_sql">true</property> <property name="format_sql">true</property> |
2、 反向工程:自动生成实体类(生成实体类和.hbm.xml文件)
3、 Hibernate的方言机制,就是让所有都认识sql语句
《换数据库,代码不变》
<property name="dialect"> org.hibernate.dialect.MySQLDialect </property> |
初步使用hibernate编写代码
/** * hibernate操控数据库依赖于session对象 */ //加载配置信息,其实就是加载hibernate.cfg.xml文件 Configuration cfg = new Configuration().configure(); //创建工厂对象 SessionFactory sf = cfg.buildSessionFactory(); //创建session对象 Session session = sf.openSession(); //创建查询语句,使用HQL(Hibernate Query Language)语句 List<Users> list = session.createQuery("from Users").list(); |
封装工具类,实现CRUD
注意:反向的表必须有主键,如果没有主键就会创建主键类
publicclass MySession { privatestatic Configuration cfg = new Configuration().configure(); privatestatic SessionFactory sf; //创建线程 为了保持数据一致 privatestatic ThreadLocal<Session> tl = new ThreadLocal<Session>(); //工厂 static{ sf = cfg.buildSessionFactory(); } protectedstatic Session getSession() { Session session = tl.get(); if(session == null){ session = sf.openSession(); tl.set(session); } returnsession; } } |
使用封装工具
1、查询
List<Users> list = getSession().createQuery("from Users").list(); |
2、删除
//删除 publicstaticvoid deleteUsers(intid){ Session session = getSession(); session.beginTransaction(); //通过id查询数据 Users u = session.get(Users.class, id); //将查到的id数据删除 session.delete(u); session.getTransaction().commit(); } |
3、添加或修改
//将添加和修改合二为一 publicstaticvoid saveOrUpdate(Users u){ Session session = getSession(); session.beginTransaction(); //添加或者修改,如果id存在就修改,如果不存在就添加 session.saveOrUpdate(u); session.getTransaction().commit(); } |
4、模糊查询
//模糊查询 publicstatic List<Users> findLike(String name){ Session session = getSession(); //创建hql语句 String hql = "from Users where uname like :n"; Query q = session.createQuery(hql); //占位赋值 如果是:x 这儿就是("x",name) q.setString("n", name); returnq.list(); } |
5、分页查询
publicstatic List<Users> findUsers(){ Session session = getSession(); Query q = session.createQuery("from Users"); //参数为偏移量pageIndex 当前页码 pageSize 每页的条数 q.setFirstResult((pageIndex-1)*pageSize); //参数为每页最大的条数 q.setMaxResults(pageSize); returnq.list(); } |
Hibernate 和 jdbc 的关系
Hibernate取代了jdbc的复杂的操作(错的)
Jdbc是原生的java代码,而hibernate只是jdbc的另一种封装形式,不管代码多么的简单,并且和jdbc一点关系都没有,但是,最后的hibernate程序都会转换成jdbc来执行操作
Hibernate方言是hibernate的招牌。
Hibernate的list方法和Iterator有什么区别(面试题)
List 的
Iterator的
List的原理:查询全部的数据,发出一条sql语句,对于小数据量来说是适合的。
Iterator的原理:先查询所有的id(1条),然后根据每一个id查询匹配的对象(N条),发出N+1(1+N)条语句,对于大数据量来说Iterator是适合的。