ORM框架不是一个新话题,它已经伴随我们很多年了。它提供了概念性的、易于理解的数据模型,将数据库中的表和内存中的对象建立了很好的映射关系。在Java中常用的ORM框架主要有两个:Hibernate和iBatis。本篇文章主要介绍Hibernate的使用方法,后续会出介绍iBatis的文章。
❝❞
M:Model
包括pojo、service、dao
。
V:View
包括jsp、html、模块引擎
。
C:Controll
包括我们动态网络资源的技术:Servlet
。
❝❞
S:Struts/SpringMVC:
实际上解决的是我们的控制器的问题(简单的可以认为是Servlet的封装)。
Spring:
整合其余的第三方框架,就是为Srvice
层提供事务。
Hibernate:
其实就是DAO层的解决方案。
同时可以看下其余框架(SSM、SSS)的含义:
Hibernate是一个非侵入式ORMapping框架
❝
非侵入式框架:
我们在使用这个框架的时候,不需要继承或者实现这个框架中的类或者接口,这种类型的框架就叫做非侵入式的框架,非侵入式的框架在使用的时候更好的和原有的框架实现了解耦❞
侵入式框架:
我们在使用这个框架的时候,需要继承或者实现这个框架中的某些类或者接口,这种框架叫做侵入式框架
ORMapping解析
❝
O:
Object
R:
Relation
M:
Mapping 映射❞
Hibernate能够将Java对象通过映射的关系映射到数据库
Hibernate能够将数据库的数据通过映射关系映射到Java对象
Hibernate就是能够通过操作Java对象来达到操作数据库的一门技术。
简单的说:实现数据库的所有操作(CRUD),是原有DAO层的一个解决方案,也是一个替代品。
「简单使用:」
导包,将下载下来的required+jpa相关的包放到一个文件里面
在src下面创建hibernate.cfg.xml配置文件
com.mysql.jdbc.Driver
jdbc:mysql:///qianyu
root
root
org.hibernate.dialect.MySQL5Dialect
update
创建Java的类的对象
public class User implements Serializable{
private static final long serialVersionUID = -6949433888868762441L;
private int uId;
private String userName;
private String userPwd;
public User(int uId, String userName, String userPwd) {
super();
this.uId = uId;
this.userName = userName;
this.userPwd = userPwd;
}
public User() {
super();
}
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
@Override
public String toString() {
return "User [uId=" + uId + ", userName=" + userName + ", userPwd=" + userPwd + "]";
}
}
编写测试类
@Test
public void testHelloWord() throws Exception {
//引入配置文件
Configuration cfg=new Configuration().configure("hibernate.cfg.xml");
//创建SessionFactory对象
SessionFactory sf=cfg.buildSessionFactory();
//创建会话
Session session=sf.openSession();
//开启事务
session.beginTransaction();
//操作对象
User user=new User(1,"小羽","110");
//开始操作
session.save(user);
//进行事务的提交
session.getTransaction().commit();
session.close();
}
Hibernate中的hibernate.cfg.xml配置文件的详解
com.mysql.jdbc.Driver
jdbc:mysql:///qianyu
root
root
org.hibernate.dialect.MySQL5Dialect
update
true
true
Hibernate的xxx.hbm.xml配置文件的详解
Hibernate中的CRUD的实现
添加数据
session.save(user);
session.persist(user);
修改数据
session.beginTransaction();
//查询数据(积极的加载)
User user=session.get(User.class,1);
//下面支持的是懒加载
user.setUserName("xxxxx");
user.setUserPwd("yyyyy");
session.getTransaction().commit();
数据查询
//查询数据(积极的加载)
User user=session.get(User.class,1);
//下面支持的是懒加载
User user2=session.load(User.class,1);
删除数据
//查询数据(积极的加载)
User user=session.get(User.class,1);
session.delete(user);
Hibernate中的帮助类的编写
public class HibernateUtils {
private static Configuration cfg=null;
private static SessionFactory sf=null;
private static ThreadLocal threadLocal=null;
static{
//初始化线程的局部变量
threadLocal=new ThreadLocal();
//加载配置文件
cfg=new Configuration().configure("config/hibernate.cfg.xml");
//生成我们的工厂
sf=cfg.buildSessionFactory();
}
/**
* 获取session的玩法
* @Title: getSession
* @Description: TODO
* @param: @return
* @return: Session
* @throws
*/
public static Session getSession(){
Session session=threadLocal.get();
if(null==session){
session=sf.openSession();
session.beginTransaction();
threadLocal.set(session);
}
return session;
}
/**
* 关闭Session
* @Title: close
* @Description: TODO
* @param:
* @return: void
* @throws
*/
public static void close(){
Session session=threadLocal.get();
if(null!=session){
session.getTransaction().commit();
session.close();
threadLocal.remove();
}
}
}
❝❞
我们hibernate.cfg.xml配置文件中这个括
hibernate.
是可以省略为什么不开启事务也能查询到数据?是因为
默认Hibernate存在只读事务
,只读事务是可以完成数据的读的操作的,如果是要完成增删改的话那么就需要读写事务,这个时候就需要开启事务
❝❞
Save在保存数据的时候,如果id是自增长,你给定id和不给定id都是对的。
Persist在保存数据的时候,如果id是自增长的,你给定id是会报错的。
本篇关于Hibernate的介绍就先到这里结束了,后续会出更多关于Hibernate系列更多文章,谢谢大家支持!
往期推荐
Spring Data开发手册|手摸手教你简化持久层开发工作
Spring Data开发手册|Java持久化API(JPA)需要了解到什么程度呢?
动态资源技术JSP|Java与Html的美好相遇
尚能饭否|技术越来越新,我对老朋友jQuery还是一如既往热爱
告别祈祷式编程|单元测试在项目里的正确落地姿势
组件必知必会|那些年我们使用过的轮子—Filter和Proxy
ES开发指南|如何快速上手ElasticSearch
玩转Redis|学会这10点让你分分钟拿下Redis,满足你的一切疑问
如果你觉得浅羽的文章对你有帮助的话,请在微信搜索并关注「 浅羽的IT小屋 」微信公众号,我会在这里分享一下计算机信息知识、理论技术、工具资源、软件介绍、后端开发、面试、工作感想以及一些生活随想等一系列文章。所见所领,皆是生活。慢慢来,努力一点,你我共同成长...
点个赞,证明你还爱我