1.orm思想(Object Relational Mapping—对象关系映射):
以前jdbc底层操作数据库:
如今操作:
现在使用配置文件操作完成。
配置xxx.hbm.xml(xxx为你实体类名 建议命名为这种方式,位置不固定):
第一步:引入hibernate的mapping dtd约束
<!DOCTYPE hibernate-mappingPUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
这个约束可以在 hibernate-mapping dtd文件中找到
在联网的环境配置其中内容会有提示
如果没联网提示的话可以进行之下操作:
1.点击Windows(窗口) 的Preferences(首选项)
2.输入 xml c 选择xml catalog
3.点击add添加将你本机中的hibernate-mapping dtd文件加载进来,当然如果你用的是MyEclipse的话就不用配置,它其中已为你加载过了。
第二步:
在xml中进行相应的配置(见代码):
配置hibernate.cfg.xml(名称、位置固定 位置在src下 操作过程中只会加载这个文件)
第一步:引入约束 操作同上
第二步:同上
其中的配置总共分三部分:
1. 配置数据库的信息
2. 配置hibernate的信息
3. 把映射文件放到核心配置文件中来
基本API:
Session:
Transaction(事务):
事务:
一.什么是事务
事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。
事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。
二.事务的 ACID
事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。
1 、原子性
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
2 、一致性
事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
3 、隔离性
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
4 、持续性
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
数据库系统必须维护事务的以下特性 ( 简称 ACID) :
原子性 (Atomicity)
一致性 (Consistency)
隔离性 (Isolation)
持久性 (Durability)
原子性 (Atomicity)
事务中的所有操作要么全部执行,要么都不执行;
如果事务没有原子性的保证,那么在发生系统
故障的情况下,数据库就有可能处于不一致状
态。
----事务参考博客:http://blog.csdn.net/lauray_/article/details/50547385
Demo代码:
1.Student.java(实体类)
package com.lsy.entity;
public class Student {
private int id;
private String classid;
private String name;
private String sex;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getClassid() {
return classid;
}
public void setClassid(String classid) {
this.classid = classid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2. student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置表与实体间的一一对应关系(mapping) -->
<class name="com.lsy.entity.Student" table="t_student" >
<!-- 配置主键 -->
<id name="id" column="id">
<!--配置主键生成策略
native表示主键自动增长 -->
<generator class="native"></generator>
</id>
<!-- 配置其他的字段
name 实体类属性名称
column表字段名称
-->
<property name="classid" column="classid"></property>
<property name="name" column="name"></property>
<property name="sex" column="sex"></property>
<property name="age" column="age"></property>
</class>
</hibernate-mapping>
3.hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 第一部分 配置数据库的信息 必须的 -->
<!-- 数据库驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property>
<!-- url配置 第三个/代表localhost的3306端口 -->
<property name="hibernate.connection.url">jdbc:mysql:///test</property>
<!-- 用户名 密码 -->
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">admin</property>
<!-- 设置连接编码 -->
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
<!-- 第二部分 配置hibernate的信息 可选的-->
<!-- 后台显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- 帮我们创建表 无创建 有则更新 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 数据库方言 每个数据库语言独有的一些关键字 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </property>
<!-- 第三部分 引入映射文件 -->
<mapping resource="com/lsy/entity/student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
4.测试代码:
package com.lsy.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.lsy.entity.Student;
public class Test1 {
@Test
public void hibernateTest(){
//1 得到Configuration 会去找到并加载核心文件
Configuration cfg =new Configuration();
cfg.configure();
//2 得到sessionFactory; 会读取文件中的配置
SessionFactory sf =cfg.buildSessionFactory();
//3 得到session对象
Session session=sf.openSession();
//4开启事务
// Transaction tran=session.getTransaction();
// tran.begin();
Transaction tran=session.beginTransaction();
//5 具体的crud操作
//添加操作 save
Student stu= new Student();
stu.setClassid("145042116");
stu.setName("新东方3");
stu.setSex("男");
stu.setAge(20);
session.save(stu);
//6提交事务
tran.commit();
//7关闭资源
session.close();
sf.close();
}
}
5.结果: