今日学习:hibernate是什么
一、hibernate是什么
框架是什么:
1.框架是用来提高开发效率的
2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现.
3.所以框架可以理解成是一个半成品的项目.只要懂得如何驾驭这些功能即可.
hibernate框架是什么:
hibernate的好处:
操作数据库的时候,可以以面向对象的方式来完成.不需要书写sql语句
hibernate是一款orm框架:
orm:object relationg mapping. 对象关系映射
orm分4级:
hibernate属于4级:完全面向对象操作数据库
mybatis属于2级
dbutils属于1级
二、hibernate框架的
1.导包
驱动包
2.创建数据库,准备表,实体
3.书写orm元数据(对象与表的映射)
4.书写主配置文件(hibernate.cfg.xml)
"-//hibernate/hibernate configuration dtd 3.0//en"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
com.mysql.jdbc.driver
jdbc:mysql:///hibernate_32
root
1234
org.hibernate.dialect.mysqldialect
true
true
update
5.书写代码测试
//测试hibernate框架
public class demo { @test
//保存客户
public void fun1(){
configuration conf = new configuration().configure(); sessionfactory sessionfactory = conf.buildsessionfactory(); session session = sessionfactory.opensession(); transaction tx = session.begintransaction();
//----------------------------------------------
customer c = new customer();
c.setcust_name("google公司"); session.save(c);//执行保存 //----------------------------------------------
tx.commit();
session.close();
sessionfactory.close();
}
}
三、配置文件详解
orm元数据
"-//hibernate/hibernate mapping dtd 3.0//en"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
hibernate主配置:
必选属性配置(5个)
com.mysql.jdbc.driver
jdbc:mysql:///hibernate_32
root
1234
org.hibernate.dialect.mysqldialect
可选属性配置(3个)
true
true
update
元数据引入配置
四、hibernateapi详解
学习configuration对象
//学习configuration对象
// configuration功能: 配置加载类.用于加载主配置,orm元数据加载
public class demo { @test
public void fun1(){
//1 创建,调用空参构造
configuration conf = new configuration();
//2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件
conf.configure();
//3 读取指定orm元数据(扩展),如果主配置中已经引入映射配置.不需要手动加载
//conf.addresource(resourcename);
//conf.addclass(persistentclass); //4 根据配置信息,创建 sessionfactory对象
sessionfactory sf = conf.buildsessionfactory(); }
}
学习sessionfactory对象
//学习sessionfactory对象
// sessionfactory功能: 用于创建操作数据库核心对象session对象的工厂.
// 简单说功能就一个---创建session对象
//注意:1.sessionfactory 负责保存和使用所有配置信息.消耗内存资源非常大.
// 2.sessionfactory属于线程安全的对象设计.
//结论: 保证在web项目中,只创建一个sessionfactory.
public class demo2 { @test
public void fun1(){
//1 创建,调用空参构造
configuration conf = new configuration();
//2 读取指定主配置文件 => 空参加载方法,加载src下的hibernate.cfg.xml文件
conf.configure();
//3 读取指定orm元数据(扩展),如果主配置中已经引入映射配置.不需要手动加载
//conf.addresource(resourcename);
//conf.addclass(persistentclass); //4 根据配置信息,创建 sessionfactory对象
sessionfactory sf = conf.buildsessionfactory();
//--------------------------------------------------
//5 获得session
//打开一个新的session对象
sf.opensession();
//获得一个与线程绑定的session对象(明天讲解)
sf.getcurrentsession();
}
}
学习session对象:增删查改
//学习session对象
//session对象功能: 表达hibernate框架与数据库之间的连接(会话).session类似于
// jdbc年代的connection对象. 还可以完成对数据库中数据的增删改查操作.
// session是hibernate操作数据库的核心对象
public class demo3 { @test
//事务操作
public void fun1(){
//1 创建,调用空参构造
configuration conf = new configuration().configure();
//2 根据配置信息,创建 sessionfactory对象
sessionfactory sf = conf.buildsessionfactory();
//3 获得session
session session = sf.opensession();
//4 session获得操作事务的transaction对象
//获得操作事务的tx对象
//transaction tx = session.gettransaction();
//开启事务并获得操作事务的tx对象(建议使用)
transaction tx2 = session.begintransaction();
//---------------------------------------------- //----------------------------------------------
tx2.commit();//提交事务
tx2.rollback();//回滚事务
session.close();//释放资源
sf.close();//释放资源
} @test
//session的新增
public void fun2(){
//1 创建,调用空参构造
configuration conf = new configuration().configure();
//2 根据配置信息,创建 sessionfactory对象
sessionfactory sf = conf.buildsessionfactory();
//3 获得session
session session = sf.opensession();
//4 session获得操作事务的transaction对象
//获得操作事务的tx对象
//transaction tx = session.gettransaction();
//开启事务并获得操作事务的tx对象(建议使用)
transaction tx2 = session.begintransaction();
//----------------------------------------------
customer c = new customer();
c.setcust_name("传智播客"); session.save(c);
//----------------------------------------------
tx2.commit();//提交事务
session.close();//释放资源
sf.close();//释放资源
}
@test
//session的查询
//查询id为1的customer对象
public void fun3(){
//1 创建,调用空参构造
configuration conf = new configuration().configure();
//2 根据配置信息,创建 sessionfactory对象
sessionfactory sf = conf.buildsessionfactory();
//3 获得session
session session = sf.opensession();
//4 session获得操作事务的transaction对象
//获得操作事务的tx对象
//transaction tx = session.gettransaction();
//开启事务并获得操作事务的tx对象(建议使用)
transaction tx2 = session.begintransaction();
//---------------------------------------------- customer customer = session.get(customer.class, 1l); system.out.println(customer);
//----------------------------------------------
tx2.commit();//提交事务
session.close();//释放资源
sf.close();//释放资源
}
@test
//session的修改
//修改id为1的customer对象的name属性为黑马程序员
public void fun4(){
//1 创建,调用空参构造
configuration conf = new configuration().configure();
//2 根据配置信息,创建 sessionfactory对象
sessionfactory sf = conf.buildsessionfactory();
//3 获得session
session session = sf.opensession();
//4 session获得操作事务的transaction对象
//获得操作事务的tx对象
//transaction tx = session.gettransaction();
//开启事务并获得操作事务的tx对象(建议使用)
transaction tx2 = session.begintransaction();
//----------------------------------------------
//1 获得要修改的对象
customer c = session.get(customer.class, 1l);
//2 修改
c.setcust_name("黑马程序员");
//3 执行update
session.update(c);
//----------------------------------------------
tx2.commit();//提交事务
session.close();//释放资源
sf.close();//释放资源
}
@test
//session的删除
//删除id为1的customer对象
public void fun5(){
//1 创建,调用空参构造
configuration conf = new configuration().configure();
//2 根据配置信息,创建 sessionfactory对象
sessionfactory sf = conf.buildsessionfactory();
//3 获得session
session session = sf.opensession();
//4 session获得操作事务的transaction对象
//获得操作事务的tx对象
transaction tx = session.gettransaction();
tx.begin();
//开启事务并获得操作事务的tx对象(建议使用)
transaction tx2 = session.begintransaction();
//----------------------------------------------
//1 获得要修改的对象
customer c = session.get(customer.class, 1l);
//2 调用delete删除对象
session.delete(c);
//----------------------------------------------
tx2.commit();//提交事务
session.close();//释放资源
sf.close();//释放资源
}
}
五、crm练习:保存客户
前面的步骤参考前面的笔记。
5.思路分析
在完成作业之前可以先编写一个方便操作的工具类,免去重复的代码:
public class hibernateutils {
private static sessionfactory sf; static{
//1 创建,调用空参构造
configuration conf = new configuration().configure();
//2 根据配置信息,创建 sessionfactory对象
sf = conf.buildsessionfactory();
} //获得session => 获得全新session
public static session opensession(){
//3 获得session
session session = sf.opensession(); return session; }
//获得session => 获得与线程绑定的session
public static session getcurrentsession(){
//3 获得session
session session = sf.getcurrentsession(); return session;
}
public static void main(string[] args) {
system.out.println(hibernateutils.opensession());
} }
作业核心代码:
web层:
/**
* servlet implementation class addcustomerservlet
*/
public class addcustomerservlet extends httpservlet {
private static final long serialversionuid = 1l; private customerservice customerservice = new customerserviceimpl(); protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
//1 获得参数并封装到customer对象
customer c = new customer();
try {
beanutils.populate(c, request.getparametermap());
} catch (illegalaccessexception e) {
e.printstacktrace();
} catch (invocationtargetexception e) {
e.printstacktrace();
}
//2 调用service保存客户
customerservice.save(c);
//3 重定向到客户列表
response.sendredirect(request.getcontextpath() "/listcustomerservlet");
} protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
doget(request, response);
} }
service层:
public class customerserviceimpl implements customerservice { private customerdao customerdao = new customerdaoimpl(); public void save(customer c) {
//调用dao保存客户
customerdao .save(c);
} }
dao层:
public class customerdaoimpl implements customerdao { public void save(customer c) {
//1 获得session
session session = hibernateutils.opensession();
//2 打开事务
transaction tx = session.begintransaction();
//3 执行保存
session.save(c);
//4 提交事务
tx.commit();
//5 关闭资源
session.close();
}
}