学生时代就这样玩完了,哈哈、、

不过学习却是还要继续、、

就这样发发牢骚吧、、、、、

1、hibernate未毕业之时也曾看过,具体看到哪儿也全忘了,笔记也因为重装系统丢了,索性毕业就记在这儿吧。

首先,hibernate的学习使用数据库是MySQL,这个用起来比较方便。Oracle工作中也就只安装了客户端,所有数据只有连接内网才能访问,太麻烦。

使用hibernate之前,要导入各种jar包,这个也啰嗦一下吧。记忆力不好、、、

a)主要导入的jar包为hibernate包下的lib->required下的所有jar包,除此之外还有log4j.jar,hibernate要打印日志。

b)配置文件hibernate.cfg.xml,配置要访问的数据。至于如何配置,在hibernate的jar中也可以找到,路径:\project\etc\hibernate.properties,在这个文件中可以看到MySQL是如何配置的:

#hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password

具体配置如下:

<hibernate-configuration>
<session-factory>
<!-- hibernate的方言,用来确定链接的数据类型 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 数据库的链接驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据的链接字符串和用户名以及密码 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/haut</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">mysql</property>
<!-- 在使用hibernate的时候会显示相应的sql语句 -->
<property name="show_sql">true</property>

<!-- 会自动完成类到数据库的转换 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="been/User.hbm.xml" />
</session-factory>
</hibernate-configuration>

这个数据配置文件,个人感觉就和使用Java代码通过JDBC访问是一样的,没啥区别。解析XML文件之后还要对JDBC设置。当然这些应该就是hibernate自己的事情了。

c)配置完成之后,就要创建一个实体类,也就是一个JavaBean文件,把一个数据库表的各个字段当做参数全都设置一下而已。然后还要配置hbm文件。(好多的配置文件、、、)hbm文件用来指定数据库表和各个字段,具体配置如下:

<hibernate-mapping package="been">
<class name="User" table="tb_user">
<id name="user_account">
<generator class="assigned"></generator>
</id>
<property name="user_name" />
<property name="user_password" />
<property name="user_sex" />
<property name="level" />
</class>
</hibernate-mapping>

其中有些字段,暂时就不说了吧。好像也是很麻烦的样子,等等在整理。最后把这个配置文件添加到hibernate.cfg.xml中。具体看上面的配置。

d)这些写配置完成之后就可以写测试类了。测试类的主要代码如下:

// 得到src路径下hibernate配置文件的信息
Configuration cfg = new Configuration().configure();
ServiceRegistry service = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory factory = cfg.buildSessionFactory(service);
Session session = factory.openSession();
// 开启事务
session.beginTransaction();
User user = new User();
user.setUser_account("326866020@qq.com");
user.setUser_name("云栖竹径");
user.setUser_password("haut");
user.setUser_sex("0");
session.save(user);
// 提交事务
session.getTransaction().commit();

2、关于hbm配置文件中Id

配置实体类和数据库的配置文件:***.cfg.xml。在这个配置文件中,有一个和特别的东西,至少我是这么认为的。
这个特别的东西,就是 
<id name="account">
<generator class="native"></generator>
</id>
首先是Id的name,这个应该和数据库表的字段保持一致,对应的实体类也是如此。刚开始的时候可能会纠结于,这个Id是不是name也应该定义为Id,我就是非常纠结。最后自己试一下,可以确定Id这个字段虽然有着特殊的地方,但是name并不是固定的。但是需要和Model类中的id字段保持一致。name的值和数据库对应的列名一致可以省略column。
另外,详细介绍的是Id下的子标签generator。
classe 的参数值有很多:
native:自动递增, MySQL
increment:自动递增
sequence:序列,Oracle
这三者的区别在于:
native包容后两者,sequence用于Oracle数据库。一般常用的是native,native是根据所配置的数据库类型,自动选择自增长的类型。
需要说一点,使用这个属性的时候,数据库的字段一定要定义为自增长类型,否则提交的时候会报错。

assigned:是自定义的,你可以自由对Id这个字段使用set赋值,即便你在数据库设定了该字段为自增长都没有关系。

个人感觉最常用的大概就是两个大的分类。使用native的时候插入数据的时候,hibernate打印的日志就不会显示Id这个字段,会在原来的基础上自增长。使用assigned通过set赋值,会根据所赋值插入说句,hibernate的日志此时也会显示该Id字段。
使用assigned的场景:Hibernate: insert into user (account, user_name) values (? ,?)

使用native的场景:Hibernate: insert into user (user_name) values (?)

PS:这个地方测试的时候犯了一个错误,不小心删掉了save方法,无论如何都插入不了数据。大概这就是新手的悲哀、、、、、

3、hibernate的增删改查直接附代码。需要说明的是,load方法的两个参数,最后一个为指定的Id。

代码:

package test;
import java.util.List;
import org.hibernate.Session;
import org.junit.Test;
import been.User;
import utils.HibernateUtils;
public class TestCRUD {
public static void main(String[] args) {
TestCRUD test=new TestCRUD();
//test.testAdd();
test.testLoad();
}
public void testAdd() {
Session session = null;
session = HibernateUtils.openSession();
session.beginTransaction();
User user = new User();
//user.setAccount(3);
user.setUser_name("云栖竹径");

session.save(user);
// 提交事务
session.getTransaction().commit();
}
public void testLoad() {
Session session = null;

session = HibernateUtils.openSession();
User user = (User) session.load(User.class, 1);
System.out.println(user);
}
/*
public void testUpdate() {
Session session = null;
try {
session = HibernateUtils.openSession();
session.beginTransaction();
User user = (User) session.load(User.class, "326866020@qq.com");

session.update(user);
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
if (session != null)
session.close();
} finally {
HibernateUtils.close(session);
}
}

public void testDelete() {
Session session = null;

session = HibernateUtils.openSession();
session.beginTransaction();
User user = new User();
user.setId(1);
session.delete(user);
session.getTransaction().commit();
}

@Test
public void testList() {
Session session = null;
session = HibernateUtils.openSession();
session.beginTransaction();
List<User> users = session.createQuery(" from User").setFirstResult(0).setMaxResults(2).list();
for (User user : users)
System.out.println(user);
}
public void testPager() {
Session session = null;
session = HibernateUtils.openSession();
session.beginTransaction();
List<User> users = session.createQuery(" from User").list();
for (User user : users)
System.out.println(user);
}*/
}

Hibernate 学习笔记相关推荐

  1. hibernate学习笔记二

    上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...

  2. hibernate学习笔记(总结)

    hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...

  3. 马士兵Hibernate学习笔记

    马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...

  4. Hibernate学习笔记Session.evict(user)方法

    @[TOC]Hibernate学习笔记Session.evict(user)方法 Hibernate学习笔记Session.evict(user)方法 首先我们要明白Session.flush(use ...

  5. Hibernate学习笔记(一)----针对不同的数据库不同的配置

    Hibernate初学笔记 l Hibernate初步配置: 1 新建项目 2 学习建立user-library-hibernate,并加入相应的jar包(hibernate核心jar包,lib下的所 ...

  6. hibernate 学习笔记1

    今天开始学习hibernate,碰到的几个问题在这里记录一下. 1>导入hibernate5.2.10的hibernate-release-5.2.10.Final\hibernate-rele ...

  7. Hibernate学习笔记(二)

    Hibernate概述: 什么是Hibernate:是一个持久层的ORM的框架 什么是ORM: ORM:对象关系映射,指的是将一个java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可 ...

  8. Hibernate学习笔记(一)

    ####1.1Hibernate框架的学习路线 第一天:Hibernate的入门(Hibernate的环境搭建.Hibernate的API.Hibernate的CRUD) 第二天:Hibernat ...

  9. Hibernate学习笔记_查询

    HQL vs EJBQL 1         NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Q ...

最新文章

  1. oracle归档日志是否启用,oracle归档日志满了,导致无法启动 ORA-03113
  2. 机器学习:线性回归简单有效,但是千万不要踩到雷区!
  3. 玩转Mixly – 5、Arduino AVR编程 之 逻辑
  4. 极致的线上产品设计与终极数据分析工具,两者缺一不可(中)
  5. php获取上传文件路径 fakepath,JavaScript_js获取上传文件的绝对路径实现方法,在html中input type=file - phpStudy...
  6. 故宫网站遭“围攻”!
  7. textview 背景变形_嘉兴海宁市家庭别墅背景墙装修供应——零度木门厂家
  8. PIM SM建立SPT树过程与实验
  9. 详解web网站测试的内容以及步骤
  10. GPGPU基础(五):使用compute shader进行通用计算及示例
  11. 【论文解读 KDD 2018 | PME】PME: Projected Metric Embedding on Heterogeneous Networks for Link Prediction
  12. 通信协议之序列化——TLV详解
  13. HR在线揭秘:面试总被虐?这 12 个必问题请记好答案!
  14. 阿里实习总结(近期)
  15. 中国2001-2019年各省风险投资数据VC
  16. 1.性能测试项目实战
  17. 技术VS管理,哪个更重要?
  18. getAttribute 和setAttribute 的使用方法
  19. ES7、ES8、ES9、ES10新特性大盘点
  20. 36岁程序员2023年第一天上班被裁

热门文章

  1. UMFPACK的使用
  2. matlab中的imshow函数使用
  3. HashMap之数组下标计算
  4. 3D美术职业晋级之路
  5. IMG与ISO之间的关系
  6. android测试版微信7.0下载地址,微信 7.0.9 for Android 全新发布,低调公布64位测试版下载地址...
  7. 自考计算机应用与辅助设计,黑龙江2012年自考计算机应用与辅助设计考试大纲.doc...
  8. iOS越狱之程序获得root权限
  9. 港大女生闻判拭泪 教师梦恐粉碎
  10. vue 跳转报 NavigationDuplicated: Avoided redundant navigation to current location: “/to-do“.