Java进阶知识03 Hibernate的基础配置详解
1、Hibernate的原理/流程步骤
1.通过Configuration().configure(); 读取并解析hibernate.cfg.xml配置文件,并创建一个configuration对象。
2.由hibernate.cfg.xml中的<mapping resource="com/xxx/xxx/Student.hbm.xml"/>读取并解析映射信息
3.通过configuration.buildSessionFactory(); //创建SessionFactory
4.sessionFactory.openSession(); //打开Sesssion
5.session.beginTransaction(); //创建事务Transation
6.persistent operate 持久化操作(CRUD)
7.transaction.commit(); //提交事务
8.session.close(); //关闭Session
9.sessionFactory.close(); //关闭SesstionFactory
2、基础配置(实例解析)
本实例所用到的jar包:Hibernate的基础常用包和连接MySQL数据库的常用包
2.1、首先创建一个Student实体
package com.shore.model; /**
* @author DSHORE/2019-9-8
*
*/
public class Student {
private Integer id;
private String name;
private String number;
private String idCard;
private Boolean sex; public Student(){ }
public Student(Integer id, String name, String number, String idCard,
Boolean sex) {
super();
this.id = id;
this.name = name;
this.number = number;
this.idCard = idCard;
this.sex = sex;
} public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public Boolean getSex() {
return sex;
}
public void setSex(Boolean sex) {
this.sex = sex;
}
}
2.2、配置 Student 实体在数据库表的映射 student.hbm.xml 文件(创建在和Student实体类同一级目录下)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.shore.model">
<class name="Student" table="student"> <!-- table="student"可以省略 -->
<id name="id" column="id"> <!-- column="id"可以省略 -->
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/> <!-- column="name"可以省略 -->
<property name="number" column="number" type="java.lang.String"/>
<property name="idCard" column="idCard" type="java.lang.String"/>
<property name="sex" column="sex" type="java.lang.Boolean"/>
</class>
</hibernate-mapping> <!-- 注意:
1、如果classname和tablename一样,可以省略tablename。
2、如果class字段名和table字段名一样,可以省略table字段名。
3、如果要使用自增长,那么<generator class="native"/>和建表脚本的主键的aotu-increment,都不能省略。
-->
2.3、配置 hibernate.cfg.xml 文件(创建在src目录下),这个文件名可以随便修改(xxx.cfg.xml),但是没多大意义,一般不建议修改。
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/school</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property> <!-- JDBC connection pool (use the built-in) -->
<!-- <property name="connection.pool_size">1</property> --> <!-- SQL dialect --> <!-- 方言 (MySQL、Oracle等数据库/语言)-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management -->
<!-- <property name="current_session_context_class">thread</property> --> <!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property> <mapping resource="com/shore/model/Student.hbm.xml"/> <!-- 从这里读取指定实体类和数据库表的映射关系 -->
</session-factory>
</hibernate-configuration>
这里面的jar包,有些用不到
到此为止,Hibernate的简单配置已经基本完成,下面,我们来添加一个测试类,看看测试是否成功
当我们在写项目的时候,要测试的东西可能不止一个,我们把重复部分 封装起来:
package com.shore.utils; import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; /**
* @author DSHORE/2019-9-8
*
*/
//创建session工厂
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() {
try {
// 创建Configuration对象去读取hibernate.cfg.xml配置文件,并创建一个session工厂出来
return new Configuration().configure().buildSessionFactory();
} catch (Throwable e) {
// 将异常打印到控台
System.err.println("初始化sessionFactory创建失败:" + e);
throw new ExceptionInInitializerError(e);
}
} public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
下面开始测试:
package com.shore.test; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test; import com.shore.model.Student;
import com.shore.utils.HibernateUtil; /**
* @author DSHORE/2019-9-8
*
*/
public class HibernateTest {
@Test
public void testStudent() {
// 1、创建session工厂(获取HibernateUtil类里面创建好的session工厂)
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
// 2、打开一个session
Session session = sessionFactory.openSession();
// 3、开启事务
Transaction transaction = session.beginTransaction(); /********************************** 第四步测试操作的内容 *****************************/
/**
*4、 持久化操作
*
* 更新(保存/修改)
* session.update(student);
* session.save(student);
* session.saveOrUpdate(student)
* student的id是否给定了,如果给了id,执行update;如果没有给id,执行save //即:修改数据用update,保存/插入数据用save
*/
Student student = new Student(null, "zhangsan", "654321", "4201011995687657612", false);
session.save(student);//向学生表中插入数据
//session.update(student);//根据id修改学生表中的数据 /********************************** 第四步测试操作的内容 *****************************/
// 5、事务提交
transaction.commit();
// 6、关闭session
session.close();
// 7、关闭session工厂
sessionFactory.close();
}
}
测试成功(且数据库内已成功插入数据):

附录
上面的实例测试步骤,如果不封装,可以这样测试
package com.shore.test; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.shore.model.Student; /**
* @author DSHORE/2019-9-8
*
*/
public class HibernateTest3 {
private static SessionFactory sessionFactory = new Configuration().configure(
"hibernate.cfg.xml").buildSessionFactory();//读取配置文件并创建一个session工厂 @Test
public void addStudent() {
Session session = null;
Transaction tran = null;
try {
session = sessionFactory.openSession(); // 打开一个Session
tran = session.beginTransaction(); // 开启事务 //持久化操作
Student student = new Student(3, "zhangsan", "88888888","110000234632432", true);
session.save(student); tran.commit();// 事务提交
} catch (Exception e) {
tran.rollback(); // 事务回滚
throw new ExceptionInInitializerError(e);
} finally {
session.close(); // 关闭session
}
}
}
或者这样:
package com.shore.test; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.shore.model.Student; /**
* @author DSHORE/2019-9-8
*
*/
public class HibernateTest2 {
@Test
public void addStudent2() {
//创建一个Configuration对象
Configuration configuration = new Configuration();
//读取Hibernate.cfg.xml配置文件
configuration.configure();
//创建SessionFactory
SessionFactory sessionFactory = configuration.buildSessionFactory();
//创建Session
Session session = sessionFactory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/**
* 执行一个具体的mysql操作
*/
Student student = new Student(1, "sange", "666666", "110000234632432", false);
session.update(student); transaction.commit();
session.close();
sessionFactory.close();
}
}
以下代码是上面实例测试步骤的拓展:
package com.shore.test; import java.util.List; import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.junit.Test; import com.shore.model.Student;
import com.shore.utils.HibernateUtil; /**
* @author DSHORE/2019-9-8
*
*/
public class HibernateTest {
@Test
public void testStudent() {
// 1、创建session工厂(获取HibernateUtil类里面创建好的session工厂)
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
// 2、打开一个session
Session session = sessionFactory.openSession();
// 3、开启事务
Transaction transaction = session.beginTransaction(); /********************************** 第四步测试操作的内容 *****************************/
/**
* 4、 持久化操作
*
* 更新(保存/修改)
* session.update(student);
* session.save(student);
* session.saveOrUpdate(student)
* student的id是否给定了,如果给了id,执行update;如果没有给id,执行save //即:修改数据用update,保存/插入数据用save
*/
Student student = new Student(null, "zhangsan", "654321", "4201011995687657612", false);
session.save(student);//向学生表中插入数据
//session.update(student);//根据id修改学生表中的数据 /**
* 查询(根据主键查询) lazy
*/
session.get(Student.class, 1);
student = (Student) session.load(Student.class, 1); //懒加载
System.out.println(student); //Criteria查询全部
Criteria criteria = session.createCriteria(String.class);
List<Student> students = criteria.list(); //listAll //Criteria根据条件查询
criteria.add(Restrictions.eq("id",1)); /********************************** 第四步测试操作的内容 *****************************/
// 5、事务提交
transaction.commit();
// 6、关闭session
session.close();
// 7、关闭session工厂
sessionFactory.close();
}
}
|
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/11488911.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
Java进阶知识03 Hibernate的基础配置详解的更多相关文章
- Java进阶知识15 Spring的基础配置详解
1.SSH各个的职责 Struts2:是web框架(管理jsp.action.actionform等).Hibernate:是ORM框架,处于持久层.Spring:是一个容器框架,用于配置bean,并 ...
- Java进阶知识04 Struts2的基础配置详解
1.Struts2的原理/流程步骤 简单的理解: 1.客户端发送一个request请求,Tomcat服务器接收到的请求经过web.xml配置文件去处理,进入struts2的核心过滤器,从而进入s ...
- hibernate.hbm2ddl.auto配置详解
hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下:<properties><property name="hibernate. ...
- Mingyang.net:hibernate.hbm2ddl.auto配置详解【转】
原文地址:http://www.cnblogs.com/feilong3540717/archive/2011/12/19/2293038.html hibernate.cfg.xml 中hibern ...
- Java核心知识体系3:异常机制详解
1 什么是异常 异常是指程序在运行过程中发生的,由于外部问题导致的运行异常事件,如:文件找不到.网络连接失败.空指针.非法参数等. 异常是一个事件,它发生在程序运行期间,且中断程序的运行. Java ...
- Java进阶知识13 Hibernate查询语言(HQL),本文以hibernate注解版为例讲解
1.简单概述 1.1. 1) SQL:面向的是数据库 select * from tableName;2) HQL查询(Hibernate Query language): hibernate 提供的 ...
- Java进阶知识07 Hibernate一对一双向外键关联(Annotation+XML实现)
1.Annotation 注解版 1.1.创建Husband类和Wife类 package com.shore.model; import javax.persistence.Entity; impo ...
- Java进阶知识12 Hibernate多对多双向关联(Annotation+XML实现)
1.Annotation 注解版 1.1.应用场景(Student-Teacher):当学生知道有哪些老师教,老师也知道自己教哪些学生时,可用双向关联 1.2.创建Teacher类和Student类 ...
- Java进阶知识11 Hibernate多对多单向关联(Annotation+XML实现)
1.Annotation 注解版 1.1.应用场景(Student-Teacher):当学生知道有哪些老师教,但是老师不知道自己教哪些学生时,可用单向关联 1.2.创建Teacher类和Student ...
随机推荐
- spark算子篇-repartition and coalesce
我们知道 RDD 是分区的,但有时候我们需要重新设置分区数量,增大还是减少需要结合实际场景,还有可以通过设置 RDD 分区数来指定生成的文件的数量 重新分区有两种方法:repartition and ...
- tensorflow零起点快速入门(4) --入门常用API
tf.reduce_mean https://blog.csdn.net/he_min/article/details/78694383 计算均值,全部数字的均值,纵向一维的均值,横向一维的均值 tf ...
- Scala学习十——特质
一.本章要点 类可以实现任意数量的特质 特质可以要求实现它们的类具备特定的字段,方法或超类 和Java接口不同,Scala特质可以提供方法和字段实现 当你将多个特质叠加在一起时,顺序很重要——其方法先 ...
- base64编码处理大文件
在做项目的时候遇到需要将文件转为base64编码,并存储在文件中. 在将文件转为base64编码是会将文件读入内存,进行base64编码,输出到文件中.代码入下: FileInputStream st ...
- mybatis-plus使用Oracle函数生成主键
函数的调用方式为: select pkg1.fun1 from dual; mybatis-plus一般会使用的主键生成策略为: @Bean public OracleKeyGenerator ora ...
- 【Git的基本操作八】添加、提交、查看状态
添加.提交.查看状态操作 查看状态: git status
- yocto 项目编译
1. 编译整个项目 构建编译环境: ~/fsl_6dl_release$ MACHINE=imx6dlsabresd source fsl-setup-release.sh -b build-wayl ...
- Raspberrypi 安装完MySQL之后登录不了(ERROR 1698 (28000))
1.问题原因: 出现这是错误是因为 mysql 默认的 root 用户使用了 UNIX auth_socket_plugin 的用户认证方式,我们有下面两种方式处理问题: 修改 root 用户认证方式 ...
- 记一次root用户在本地登录及SSH连接均遭遇permission denied的问题排查经过
某日一位老师反映,机房的6号节点无法登录了.一开始以为是为节点防火墙配置IP白名单时忘记了加进去,但随后发现此节点并未进行白名单配置,密码也一直未有变更,于是在自己的电脑上连接,发现终端里很快显示出了 ...
- JS批量绑定事件
,,,,] for(var j in a){ $("#" + j).click(function () { // 前提是先动态生成id是j的标签 var id_cm = $(thi ...