Hibernate学习之简单应用
前言:博主在学到Spring的时候,要开始做项目了,突然觉得好像有点虚,之前学过的Hibernate框架的简单应用好像又忘记了。所以返回来,做个小笔记。
简单来讲,Hibernate框架是利用对象-关系型数据映射(ORM)实现持久化(将数据存入可持久保存的存储设备中)。
怎么用呢?这里有一个小demo,实现的是基于Annotation(注解)实现CRUD(增删改查)。可以简单分为三步。
① 创建实体类entity(这里的实体类就是UserInfo吧),实体类在此处的作用就跟JavaBean或POJO的作用一样,因为是用注解的方式底层直接设置映射,所以不需要映射文件啦。
package com.hibernate.entity; import javax.persistence.*;/** * * @author N.Y * 用户实体类 * */ //使用Entity注解,表示当前类为实体Bean,需要进行持久化 @Entity //使用Table注解实现数据表user_info与持久化类UserInfo之间的映射,catalog指定数据库名,name指定表名 @Table(name="user_info", catalog="student") public class UserInfo { private int id; //id private String userName; //用户名 private String password; //密码 private String intro; //自我介绍 //使用Id注解指定当前持久化类的ID标识属性 @Id //使用@GeneratedValue注解指定逐渐生成策略为IDENTITY @GeneratedValue(strategy=GenerationType.IDENTITY) //使用Column注解指定当前属性所对应的数据表中的字段,name指定字段名 //unique指定是否为唯一,nullable指定是否可为null,length指定字段长度 @Column(name="id",unique=true,nullable=false) public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(name="userName", length=16, nullable=false) public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Column(name="password", length=16, nullable=false) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Column(name="intro", length=16) public String getIntro() { return intro; } public void setIntro(String intro) { this.intro = intro; } public UserInfo() { } public UserInfo(String userName, String password) { this.userName = userName; this.password = password; } @Override public String toString() { return "UserInfo [id="+id+",userName="+userName+",password="+password+", intro"+intro; } }
其中,主键生成策略是通过GenetationType指定的,可以使用@GeneratedValue来指定主键生成策略。
主键生成策略枚举值 |
说明 |
GenerationType.IDENTITY |
该策略用于MySQL,特点是递增,在MySQL建表的时候需将主键指定为auto_increment属性。 |
GenerationType.AUTO |
自动选择一个最适合底层数据库主键生成策略(就是系统帮你选),这个是默认项。 |
GenerationType.SEQUENCE |
根据底层数据库的序列来生成主键,条件是数据库支持序列,MySQL不支持,但Oracle支持。 |
GenerationType.TABLE |
使用一个特定的数据库表格来保存主键,框架通过表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。 |
② 编写Hibernate的配置文件,该文件反映了持久化类(就上边儿的UserInfo)和数据库表的映射信息,像是数据库用户名啊、密码啊之类的,此处命名为hibernate.cfg.xml(注意,放在src文件夹下面就好),记得copy过去之后要因地制宜,修改密码跟数据库的连接信息,上面的注解信息也是要修改的。
<!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> <!-- Hibernate连接的基本信息 --> <property name="connection.username">root</property> <property name="connection.password"></property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///student</property> <!-- Hibernate方言 --> <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <!-- 是否打印SQL --> <property name="show_sql">true</property> <!-- 关联Hibernate的映射文件 --> <mapping class="com.hibernate.entity.UserInfo"/> </session-factory> </hibernate-configuration>
至于这些属性的解释可以参考这篇文章:https://blog.csdn.net/tuke_tuke/article/details/49662601
③ 编写测试类
package com.hibernate.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.hibernate.entity.UserInfo; public class HibernateTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init(){ //加载hibernate.cfg.xml Configuration configuration = new Configuration().configure(); //根据hibernate.cfg.xml配置,初始化SessionFactory sessionFactory = configuration.buildSessionFactory(); //创建session开始事务 session = sessionFactory.openSession(); //通过session开始事务 transaction = session.beginTransaction(); } //添加数据 @Test public void testSaveUserInfo(){ try{ //初始化UserInfo类 UserInfo ui = new UserInfo("hibUser1","123456"); UserInfo u = new UserInfo("hibUser2","123456"); //保存 session.save(ui); session.save(u); }catch(Exception e){ e.printStackTrace(); } } @Test public void testGetUserInfo(){ //从数据表user_info中加载编号id为1的用户对象 UserInfo ui = (UserInfo)session.get(UserInfo.class, 4); //在控制台输出用户对象信息 System.out.println(ui.toString()); } @Test public void testLoadUserInfo(){ //从数据表user_info中加载编号id为1的用户对象 UserInfo ui = (UserInfo)session.load(UserInfo.class, 4); System.out.println(ui.toString()); } @Test public void testDeleteUserInfo(){ //从数据表user_info中加载编号id为4的用户对象 UserInfo ui = (UserInfo)session.get(UserInfo.class, 8); //删除对象 session.delete(ui); } @Test public void testUpdateUserInfo(){ //从数据表user_info中加载编号id为1的用户对象 UserInfo ui = (UserInfo)session.get(UserInfo.class, 7); //修改数据 ui.setUserName("miaoyang"); //更新对象 session.update(ui); } @After public void destory(){ //提交事务 transaction.commit(); //关闭session session.close(); //关闭sessionFactory sessionFactory.close(); } }
在这儿就不得不提Hibernate的基本执行流程啦。盯着这串代码哈。
public void init(){ //加载hibernate.cfg.xml Configuration configuration = new Configuration().configure(); //根据hibernate.cfg.xml配置,初始化SessionFactory sessionFactory = configuration.buildSessionFactory(); //创建session开始事务 session = sessionFactory.openSession(); //通过session开始事务 transaction = session.beginTransaction(); }......
public void destory(){ //提交事务 transaction.commit(); //关闭session session.close(); //关闭sessionFactory sessionFactory.close(); }
1、Configuration
创建一个Configuration类的实例,以读取并解析配置文件(hibernate.cfg.xml),一个Configuration实例代表Hibernate所有的Java类到SQL数据库映射的集合。
2、SessionFactory
创建SessionFactory,以读取并解析映射信息,将Configuration对象中的所有配置信息复制到SessionFactory的缓存中。
3、Session
打开Session,让SessionFactory提供链接,并且调用Session接口提供的各种方法完成数据库操作。
4、Transcation
打开一个事务,提交事务之后就关闭Session。
如果想要更加深入的了解的话,可以看下这篇文章的介绍哦:http://blog.51cto.com/wuwen2011/1537972。
④ 其实最最后面还少了一步的,就是数据库的创建。
CREATE DATABASE /*!32312 IF NOT EXISTS*/`student` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `student`; /*Table structure for table `user_info` */ DROP TABLE IF EXISTS `user_info`; CREATE TABLE `user_info` ( `id` ) NOT NULL AUTO_INCREMENT, `userName` ) NOT NULL, `password` ) NOT NULL, `intro` ) DEFAULT NULL, UNIQUE KEY `id` (`id`) ) ENGINE DEFAULT CHARSET=utf8;
另外哦,这些是需要的包:
云盘地址:https://pan.baidu.com/s/1pjLgilqioH9Y9_EeNCCZlQ 密码:oc6y
以上就是Hibernate的简单应用啦,关于Hibernate的应用还有映射,所以大家加油啦,虽然SSH已经用了很久了,但是了解了Hibernate,MyBatis就会相对比较容易上手。
最新文章
- C++设计模式-Prototype原型模式
- 关于for循环删除数组内容出现的问题
- 大商创 sql追踪 卖家入驻
- 关于OPencv版本不符合,相关库变化问题
- log4net.redis+logstash+kibana+elasticsearch+redis 实现日志系统
- 时区之痒 - 从手机GPS模块获取的时间,真的是北京时间么?
- Volley框架使用(POST)
- 64位系统 IIS不支持 Excel导入的问题
- SQL标识列的查询
- Android 带password输入界面的Dialog实现机制
- AFNetworking2.5使用2
- android 5.0新特性学习--CardView
- 你说你精通CSS,真的吗?
- Rails + React +antd + Redux环境搭建
- ruby利用Zip Gem写一个简单的压缩和解压的小工具
- Python3+unittest使用教程
- hbase 实战项目
- Git 配置命令设置
- BOM 对象--location、navigator、screen、history
- Python学习五|集合、布尔、字符串的一些特点
热门文章
- win8.1安装出错解决方法之一
- 【224】◀▶ IDL NetCDF 文件操作说明
- UVaLive 10859 Placing Lampposts (树形DP)
- JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)14
- Unity Mecanim在大型mmo中的应用
- Cordova 系列之创建一个iOS项目
- J - 吉哥系列故事――恨7不成妻
- [ZJOI2008]无序运动Movement
- Codeforces Round #547 (Div. 3) A.Game 23
- 在 Linux 环境直接复移动硬盘上的 GRUB