1. 前言

        Hibernate是一个开放源代码的ORM持久化框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

        所谓ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了

        持久化,即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

2. 入门

(1)jar包引入:

       

        除了sqljdbc.jar可根据自己的数据库驱动换成其他jar包,其他包都是必须的。下载地址:http://hibernate.org/orm/。因为本例中我们需要使用注解,所以请下载3.0版本以上的包。

(2)数据表准备

  1 CREATE TABLE tbUser (
2 userID VARCHAR(50),
3 loginName VARCHAR(200),
4 userName VARCHAR(200),
5 passWord VARCHAR(200)
6 )

(3)创建表tbUser对应的对象

        所谓的ORM就是要将关系型数据库的数据表映射为JAVA对象,所以理所应当的我们需要为tbUser表建立一个JAVA对象与其相对应。

  1 package com.luych.hibernate.study.entity;
2
3 import javax.persistence.Entity;
4 import javax.persistence.Id;
5 import javax.persistence.Table;
6
7 @Entity
8 @Table(name="tbUser")
9 public class UserEntity {
10
11 @Id
12 private String userID;
13 private String loginName;
14 private String userName;
15 private String passWord;
16
17 public String getUserID() {
18 return userID;
19 }
20 public void setUserID(String userID) {
21 this.userID = userID;
22 }
23 public String getLoginName() {
24 return loginName;
25 }
26 public void setLoginName(String loginName) {
27 this.loginName = loginName;
28 }
29 public String getUserName() {
30 return userName;
31 }
32 public void setUserName(String userName) {
33 this.userName = userName;
34 }
35 public String getPassWord() {
36 return passWord;
37 }
38 public void setPassWord(String passWord) {
39 this.passWord = passWord;
40 }
41 @Override
42 public String toString() {
43 return loginName+", "+userName+", "+passWord+", "+userID;
44 }
45
46
47 }

        @Entity: 此注解来通知Hibernate,该对象为ORM对象。

        @Table(name="tbUser"):此注解来通知Hibernate,该对象对应的数据表为tbUser,将来针对此对象的新增、修改、删除、查询等操作都会映射到tbUSer数据表中。

        @id:此注解表示userID为主键,是对象的唯一标识,一般数据库设计时候也会将userID字段设置为主键。Hibernage的对象缓存会根据@id标识的主键来进行处理。

        @Column:此注解在本例中没有出现。当数据库中字段名和JAVA对象属性名称不一致的时候,可以用此注解来描述其对应关系。如下例(数据库字段为LOGIN_NAME,对象属性为loginName):

  1 @Column(name="LOGIN_NAME")
2 private String loginName;

        @Transient:此注解在本例中也没有出现。如果JAVA对象中的某个属性,并没有数据表的字段与其相对应,那么就用此注解标注该属性。Hibernate针对此对象进行增删改查的时候回忽略此属性。例如:我们要为UserEntity对象增加一个登陆次数(由其他数据表统计而来),那么处理如下:

  1 @Transient
2 private int loginCnt;

        另外,我们改造了toString方法,后面的测试代码中将要用到。

(4)配置Hibernate文件

         建立Hibernate的配置文件,路径和文件名任意。本例为:hibernate-config.xml。内容如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5 <hibernate-configuration>
6 <session-factory>
7 <!-- 设置数据库驱动 -->
8 <property name="hibernate.connection.driver_class">
9 com.microsoft.sqlserver.jdbc.SQLServerDriver
10 </property>
11 <!-- 设置数据库URL -->
12 <property name="hibernate.connection.url">
13 jdbc:sqlserver://192.168.9.23:14433;databaseName=tempdb
14 </property>
15 <!-- 数据库用户名 -->
16 <property name="hibernate.connection.username">sa</property>
17 <!-- 数据库密码 -->
18 <property name="hibernate.connection.password">123@abcd</property>
19 <!-- beans -->
20 <mapping class="com.luych.hibernate.study.entity.UserEntity"/>
21 </session-factory>
22 </hibernate-configuration>

        该配置文件中,我们为Hibernate设置了数据库连接信息(驱动、URL、用户名以及密码,这些信息请根据自己实际情况来做相应变更),并通知Hibernate我们刚刚创建的UserEntity对象(mapping class="com.luych.hibernate.study.entity.UserEntity")。

(5)测试运行

  1 package com.luych.hibernate.study.main;
2
3 import java.util.List;
4 import java.util.UUID;
5
6 import org.hibernate.Query;
7 import org.hibernate.Session;
8 import org.hibernate.SessionFactory;
9 import org.hibernate.cfg.Configuration;
10 import org.junit.After;
11 import org.junit.Before;
12 import org.junit.Test;
13
14 import com.luych.hibernate.study.entity.UserEntity;
15
16 @SuppressWarnings("unchecked")
17 public class TestMain {
18
19 private Session session;
20
21 @Before
22 public void getSession(){
23 //请根据自己在第三部中创建的xml文件路径及名称调整configure参数值
24 Configuration config = new Configuration().configure("hibernate-config.xml");
25 SessionFactory sessionFactory = config.buildSessionFactory();
26 session = sessionFactory.openSession();
27 }
28
29 @After
30 public void freeSession(){
31 session.close();
32 }
33
34 public void sel() {
35 Query query = session.createQuery("FROM UserEntity WHERE 1=1");
36 List<UserEntity> userList = query.list();
37 for (UserEntity userEntity : userList) {
38 System.out.println(userEntity.toString());
39 }
40 }
41
42 public void add() {
43 session.beginTransaction();
44 UserEntity user = new UserEntity();
45 user.setLoginName("luych");
46 user.setUserName("卢艳超");
47 user.setPassWord("12333");
48 user.setUserID(UUID.randomUUID().toString());
49 session.save(user);
50 session.getTransaction().commit();
51 }
52
53 public void edt(){
54 session.beginTransaction();
55 Query query = session.createQuery("FROM UserEntity WHERE 1=1");
56 List<UserEntity> userList = query.list();
57 for (UserEntity userEntity : userList) {
58 userEntity.setPassWord("45666");
59 session.update(userEntity);
60 }
61 session.getTransaction().commit();
62 }
63
64 public void del(){
65 session.beginTransaction();
66 Query query = session.createQuery("FROM UserEntity WHERE 1=1");
67 List<UserEntity> userList = query.list();
68 for (UserEntity userEntity : userList) {
69 session.delete(userEntity);
70 }
71 session.getTransaction().commit();
72 }
73
74 @Test
75 public void test(){
76 System.out.println("当前已有数据:");
77 sel();
78 del();
79 System.out.println("执行删除后:");
80 sel();
81 add();
82 add();
83 System.out.println("执行新增后");
84 sel();
85 edt();
86 System.out.println("执行修改后");
87 sel();
88 }
89 }
90

         以上代码里,getSession方法用来根据hibernate-config.xml配置文件来获取。freeSession方法用来关闭不再使用的Session。sel方法用来查询当前数据库中的所有数据并打印到控制台;add方法即要新增一条数据;edt方法将所有的passWord都改为45666;del方法将删除所有的数据。大家看一下test方法,然后我们右键,Run As JUnit Test,控制台输出结果为:

  1 当前已有数据:
2 luych, 卢艳超, 45666, 50420e9c-e751-41c3-a33d-0b6d09924da8
3 luych, 卢艳超, 45666, 58bd812c-4e43-4248-b0c9-9c3576c6d47c
4 执行删除后:
5 执行新增后
6 luych, 卢艳超, 12333, 9660637e-5447-42c0-bcfb-2b24786bc0e8
7 luych, 卢艳超, 12333, c0631818-cc91-4691-93fc-159c2cabe37d
8 执行修改后
9 luych, 卢艳超, 45666, 9660637e-5447-42c0-bcfb-2b24786bc0e8
10 luych, 卢艳超, 45666, c0631818-cc91-4691-93fc-159c2cabe37d

        可以看到我们的增删改查操作都成功的完成了。

 

        以上就是Hibernate的入门基本操作,后续还会有其他探究。本文仅当是抛砖引玉吧,愿大家共勉。

最新文章

  1. python--批量下载豆瓣图片
  2. 精通Web Analytics 2.0 (2) 内容简介
  3. 【原】iOS学习之XML与JSON两种数据结构比较和各自底层实现
  4. 在MacOS和iOS系统中使用OpenCV
  5. mysql5.5手册读书日记(3)
  6. NSIS打包(二)第一个安装包
  7. Apache 禁止访问目录
  8. Spring security oauth2最简单入门环境搭建
  9. 基于visual Studio2013解决C语言竞赛题之1040因数分解
  10. 由单页面web应用引发的企业应用问题
  11. 子沐代码段——Flask+Mysql+Echarts可视化
  12. UML之概述
  13. Requests库作者另一神器Pipenv的用法
  14. Django 连接mysql数据库中文乱码
  15. 阿里云ACE共创空间——MQ消息队列产品测试
  16. Vmware ESXi日志文件存放目录地址
  17. 四:(之三)制作镜像和一些docker命令
  18. Makefile 链接静态库
  19. mysql日期时间类型总结
  20. kuberentes 源码编译安装

热门文章

  1. Intel欲与AMD共同做大PC市场
  2. 从ofo到乐视,变卖资产好过冬靠谱吗?
  3. LCA之tarjan离线
  4. android studio3.1 添加闪屏页面(启动欢迎界面)(例子简单无BUG)
  5. Golang函数-不定参函数
  6. HihoCoder第十周:后序遍历
  7. spingcloud--hystrix(断路器)
  8. maven集成SSM项目,jetty部署运行——搭建maven项目部署jetty试运行(一)
  9. 【问题管理】-- Tomcat8部署项目加载静态资源html页面编码错误
  10. 十六、JavaScript之%运算符