JAVA框架:hibernate
一:介绍
hibernate是java中的dao层,即和持久层打交道。底层也是数据库驱动、连接等。他也有orm,类和数据库的映射。
二、部署
下载地址:https://sourceforge.net/projects/hibernate/?source=typ_redirect
1)包介绍:
2:)创建数据库
create table customer (id BIGINT NOT NULL AUTO_INCREMENT primary key,name varchar(),ipone_number varchar() );
3)创建hibernate配置文件
1)javabean文件
package jd.com.hibernatepro; public class Customer {
public Customer(){};
private Long id;
private String name;
private String ipone_number; public void setId(Long id) {
this.id = id;
} public void setIpone_number(String ipone_number) {
this.ipone_number = ipone_number;
} public void setName(String name) {
this.name = name;
} public Long getId() {
return id;
} public String getIpone_number() {
return ipone_number;
} public String getName() {
return name;
}
}
2)创建映射文件(Customer.hbm.xml)
名字没有强制要求,但是一般会起类名.hbm(hibernate mapping).xml
配置文件内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--配置类和表结构映射-->
<class name="jd.com.hibernatepro.Customer" table="customer">
<!--配置id name是javabean属性column是表的属性 属性纸一样的话可以省略column -->
<id name="id" column="id">
<!--主键生成策略 native主键采取的本地策略 递增策略-->
<!--注意语法 xml 不是<generator></generator-->
<generator class="native"/>
</id>
<!--配置其他属性-->
<property name="name"/>
<property name="ipone_number"/>
</class> </hibernate-mapping>
其中约束:
从WEB-INF/lib/hibernate-core-5.0.7.Final.jar 中的拷贝
其中
1是hibernate的核心配置文件的约束查找文件。
2是映射配置文件的约束查找文件。
我们这边选择3.0的
3)创建核心配置文件: 文件名称必须是hibernate.cfg
约束拷贝如上。
内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!--记住先配置session-factory标签一个数据库对应一个session-factory标签-->
<hibernate-configuration>
<session-factory>
<!--必须要配置的参数是5个 4个是连接数据库串 1个是数据库方言-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://192.168.147.145:3306/day13</property>
<property name="hibernate.connection.username">admin</property>
<!--方言 告诉hibernate使用是 那个数据库类型-->
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="jd/com/hibernatepro/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
需要注意:
引用配置配置文件:<mapping resource="jd/com/hibernatepro/Customer.hbm.xml"/> 在windows的时候是转义符\需要改成斜杠/。
还有核心配置文件的位置需要在src下面。
hibernate配置完了。
4)测试代码:
使用hibernate的步骤:
* 使用hibernate的步骤:
* )先加载配置文件。
*)创建sessionFactory对象,生成session对象(工厂方法主要是生成对象)。
* )创建session对象(数据库会话对象)
* )开启事务。
* )编写保存代码。
* )提交事务。
* )释放资源。
代码:
package jd.com.test; import jd.com.hibernatepro.Customer;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; public class TT {
@Test
public void test(){
/**
* 使用hibernate的步骤:
* 1)先加载配置文件。
*2)创建sessionFactory对象,生成session对象(工厂方法主要是生成对象)。
* 3)创建session对象(数据库会话对象)
* 4)开启事务。
* 5)编写保存代码。
* 6)提交事务。
* 7)释放资源。
*/
//先加载配置文件。
Configuration configuration=new Configuration();
//加载配置文件
configuration.configure();
//创建sessionFactory对象
SessionFactory sessionFactory=configuration.buildSessionFactory();
//创建session对象
Session session=sessionFactory.openSession(); //开启事务。
Transaction transaction=session.beginTransaction(); //编写保存代码
Customer customer=new Customer();
customer.setIpone_number("");
customer.setName("tom");
//数据保存
session.save(customer);
//提交事务。
transaction.commit(); //释放资源
session.close(); } }
查看数据库:
mysql> select * from customer;
+----+------+--------------+
| id | name | ipone_number |
+----+------+--------------+
| | tom | |
+----+------+--------------+
row in set (0.00 sec)
测试完成。
核心配置文件可选配置:
sql语句控制台和日志输出(SQL in log and console)。
<!--可选配置-->
<!--输出sql语句-->
<property name="hibernate.show_sql">true</property>
<!--sql语句格式化-->
<property name="hibernate.format_sql">true</property>
创建表和添加值以及添加字段。
hibernate.hbm2ddl.auto update 如果表不存在他创建,如果存在插入值。可以添加额外字段。
添加额外字段需要在映射文件和javabean里添加相应的配置。
<!--update-->
<property name="hibernate.hbm2ddl.auto">update</property>
这个比较常用。
不要用
hibernate.hbm2ddl.auto create-drop 无论存不存在都建 在删。
hibernate.hbm2ddl.auto create 每次都创建 存在先drop在创建。会把之前数据和表删除。。
三、方法介绍
sessionFactory 和session。
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
所以在项目中sessionfactory不需要释放。一个数据库一个sessionfactory。
基于上面写一个工具类:
package jd.com.test; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class hibernateUtils {
private final static Configuration CONFIURATION;
private final static SessionFactory SESSIONFACTORY;
static {
CONFIURATION=new Configuration().configure();
SESSIONFACTORY=CONFIURATION.buildSessionFactory();
}
public static Session getSession(){
return SESSIONFACTORY.openSession();
}
}
session:注意的是Session对象是非线程安全的。所有每次操作就创建一个session 使用完就释放!
session的方法:
* save(obj) 保存数据。
* delete(obj) 删除数据。
* get(Class,id) 获取数据。
* update(obj) 更新数据。
* saveOrUpdate(obj) -- 保存或者修改(如果没有数据,保存数据。如果有,修改数据)
* createQuery() -- HQL语句的查询的方式
我们在操作数据的时候,要遵循先查询在删除、更新等操作。
@Test
public void Select(){
Session session=hibernateUtils.getSession();
Transaction transaction=session.beginTransaction();
Customer customer=new Customer();
//第一个参数是javabean的class对象,第二个参数是表中的id序列号。get方法只能返回一个查询结果。
Customer c=session.get(Customer.class,2L);
System.out.println(c);
//提交事务。
transaction.commit(); //释放资源
session.close();
} @Test
public void Del(){
Session session=hibernateUtils.getSession();
Transaction transaction=session.beginTransaction();
Customer customer=new Customer();
//第一个参数是javabean的class对象,第二个参数是表中的id序列号。get方法只能返回一个查询结果。
Customer c=session.get(Customer.class,3L);
session.delete(c);
//提交事务。
transaction.commit(); //释放资源
session.close();
}
@Test
public void Update(){
Session session=hibernateUtils.getSession();
Transaction transaction=session.beginTransaction();
Customer customer=new Customer();
//第一个参数是javabean的class对象,第二个参数是表中的id序列号。get方法只能返回一个查询结果。
Customer c=session.get(Customer.class,1L);
c.setName("ok");
session.update(c);
//提交事务。
transaction.commit(); //释放资源
session.close();
}
@Test
public void SavUp(){
Session session=hibernateUtils.getSession();
Transaction transaction=session.beginTransaction();
Customer customer=new Customer();
//第一个参数是javabean的class对象,第二个参数是表中的id序列号。get方法只能返回一个查询结果。
Customer c=new Customer();
c.setIpone_number("");
c.setName("oop");
session.saveOrUpdate(c);
//提交事务。
transaction.commit();
//释放资源
session.close();
}
@Test
public void QuerY(){
Session session=hibernateUtils.getSession();
Transaction transaction=session.beginTransaction();
Query query=session.createQuery("from Customer");
List customers=query.list();//查询所有数据
for (Object c:customers
) {
System.out.println(c);
}
//提交事务。
transaction.commit();
//释放资源
session.close();
}
}
JAVA框架:hibernate的更多相关文章
- JAVA 框架hibernate (三)(数据库更新丢失)
一.场景: 我们在并发操作数据库同一个字段,比如:name:tom age:22这条数据.有2个同时进行操作.A操作该数据的name改成admin,B操作这条数据的age改成:35.然后A先把数据更 ...
- JAVA框架--hibernate、struts2、spring
JAVAEE——spring01:介绍.搭建.概念.配置详解.属性注入和应用到项目 JAVAEE——struts2_04:自定义拦截器.struts2标签.登陆功能和校验登陆拦截器的实现 JA ...
- java框架之Spring(4)-Spring整合Hibernate和Struts2
准备 导包 Struts2 导入 Struts2 zip 包解压目录下 'apps/struts-blank.war' 中所有 jar 包,如下: asm-3.3.jar asm-commons-3. ...
- 【JAVA框架】Hibernate 与Mybatis 区别
Hibernate Mybatis 简介 区别 与联系 欢迎提出见解及转载. 1 简单简介 1.1 Hibernate 框架 Hibernate是一个开放源代码的对象关 ...
- java 三大框架 hibernate部分知识实现增删该查操作
1.三层架构 表现层 web层(MVC是一个表现层的设计模型) 业务层 service层 持久层 dao层2.三大框架和三层架构的关系(建议学习三大框架的顺序:先学习hibernat ...
- 框架Hibernate笔记系列 基础Session
标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...
- 持久化框架Hibernate 开发实例(一)
1 Hibernate简介 Hibernate框架是一个非常流行的持久化框架,其中在web开发中占据了非常重要的地位, Hibernate作为Web应用的底层,实现了对数据库操作的封装.HIberna ...
- Java框架的思考
目前的JAVA 企业级开发框架,我们常用的大致包括IOC AOP MVC ORM框架 1. IOC spring是一个非常棒的ico容器,其思想非常简单,用一个集合对象如MAP 来缓存对象(对象都是单 ...
- 对java框架的几点认识
java框架实在是太多了,网上一抄一大段,根本就了解不到什么.我还是以我的经验来说一下j2ee的框架.1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一个MV ...
- ORM框架Hibernate (一) 对DAO封装和抽象
说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...
随机推荐
- HUST1017(KB3-A Dancing links)
1017 - Exact cover Time Limit: 15s Memory Limit: 128MB Special Judge Submissions: 7270 Solved: 3754 ...
- python正则表达式贪婪与非贪婪模式
之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意. 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="a ...
- Excel indirect引用其它xlsx文件内容作为下拉框
效果如下图: 在第一个excel文件中有一个下拉框 这里面的选项,需要从另外一个Excel文件中读取内容,另外一个Excel文件如下: 实现的步骤如下: 1.新建一个Excel文件select.xls ...
- IDEA项目搭建二——使用SpringBoot创建Web层
一.编写底层代码 1.demo-common中创建FormatString类 先在默认com.tyh中创建package命名为common 删除自动生成的app.java,在common包下创建新类 ...
- react native中的聊天气泡以及timer封装成的发送验证码倒计时
今天看来情书写的文章,研究了一下大佬写的文章,自己做一点总结. 其实,今天我想把我近期遇到的坑都总结一下:1.goBack的跨页面跳转,又两种方法,一可以像兔哥那样修改navigation源码,二可以 ...
- 【three.js练习程序】鼠标滚轮缩放
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- go语言练习:结构体
package main import "fmt" type book struct { title string author string page int } func ma ...
- Android aapt 工具介绍(转)
目录 AAPT 工具介绍 AAPT 的帮助信息 查看AAPT的版本 使用AAPT列出资源包apk文件列表 使用AAPT打包资源文件 使用AAPT解压资源包apk 来自:http://mmmyddd ...
- cookie 组成结构
1.用抓包工具 fidller 只能看到 cookie 的 name 和 value 两个参数,实际上 cookie 还有其 它参数 2.以下是一个完整的 cookie 组成结构 cookie ={u ...
- centOS7中Mariadb数据库安装与基本管理
一.Mariadb数据库安装 1. 直接yum源安装 yum -y install mariadb mariadb-serversystemctl start mariadb /启动Mariadb服务 ...