Hibernate 学习笔记
学生时代就这样玩完了,哈哈、、
不过学习却是还要继续、、
就这样发发牢骚吧、、、、、
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 学习笔记相关推荐
- hibernate学习笔记二
上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...
- hibernate学习笔记(总结)
hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...
- 马士兵Hibernate学习笔记
马士兵hibernate学习笔记 课程内容 6课程内容 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0 ...
- Hibernate学习笔记Session.evict(user)方法
@[TOC]Hibernate学习笔记Session.evict(user)方法 Hibernate学习笔记Session.evict(user)方法 首先我们要明白Session.flush(use ...
- Hibernate学习笔记(一)----针对不同的数据库不同的配置
Hibernate初学笔记 l Hibernate初步配置: 1 新建项目 2 学习建立user-library-hibernate,并加入相应的jar包(hibernate核心jar包,lib下的所 ...
- hibernate 学习笔记1
今天开始学习hibernate,碰到的几个问题在这里记录一下. 1>导入hibernate5.2.10的hibernate-release-5.2.10.Final\hibernate-rele ...
- Hibernate学习笔记(二)
Hibernate概述: 什么是Hibernate:是一个持久层的ORM的框架 什么是ORM: ORM:对象关系映射,指的是将一个java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可 ...
- Hibernate学习笔记(一)
####1.1Hibernate框架的学习路线 第一天:Hibernate的入门(Hibernate的环境搭建.Hibernate的API.Hibernate的CRUD) 第二天:Hibernat ...
- Hibernate学习笔记_查询
HQL vs EJBQL 1 NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Q ...
最新文章
- CSDN:Markdown extra grammar
- 用户、角色和权限,多表查询
- 自动完成--autoComplete插件(2)
- DataList用法
- insert和update 锁等待_黑龙F5智感双全智能锁全球首发,掀起惊艳风潮
- 武汉大学计算机学院参考书目,2020武汉大学计算机与软件工程考研初试科目、参考书目及复试详情...
- linux scp 输入密码,Linux scp远程复制数据不需要输入密码
- python自定义变量名标识符,【python】3 标识符和关键字
- for和select循环语句的应用实践
- SpringBoot 配置文件说明
- Tensorflow - 训练中出现 Nan 值
- php mysql布局教程_请教php关于mysql数库库布局的问题
- ACL访问控制列表(访问控制、抓取感兴趣流)详解及基本ACL和高级ACL的配置。
- Photoshop快速复制图层的几种方法和技巧
- 打字游戏之输入框功能的实现
- SpringBoot中的html页面访问不到js,css等静态资源问题解决方案
- 白银价格转换器(美元/盎司-人民币/克)
- java实现:啤酒2元一瓶,10个盖子可以换一瓶啤酒,4个瓶子可以换一瓶啤酒,请问x元最多可换多少瓶啤酒
- 计算机教师继续教育心得,教师继续教育培训个人心得体会(精选6篇)
- 无时不在断流的小米10手机的共享热点