本文主要是介绍夜光带你走进Hibernate(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
夜光序言:
身着淡青色衣衫的青年饶了饶头,苦涩一笑,说道:“你还相信爱情吗?”
走在身旁的青年扭过头,漆黑双眸中一抹神采掠过,淡淡一笑:“相信啊,从来都相信爱情,我不信的是人而已”
正文:继续嗯~~
2. Hibernate框架Api
|-- Session 一个与数据库连接的会话信息
Sesison里面维护了一个连接对象,且对常用操作进行封装
更新:
session.save(obj); 保存一个对象
session.update(obj) 更新一个对象, 注意修改对象的主键一定要在数据库存在
session.saveOrUpdate(obj) 保存或更新
如果有设置主键且主键存在执行更新
没有设置主键执行保存
session.delete(obj) 删除一个对象; 注意修改对象的主键一定要在数据库存在
主键查询:
Session.get(clazz,id); 根据主键查询
Session.load(clazz,id); 根据主键查询
HQL查询:
Hibernate Query language
Hibernate提供的面向对象的查询语言
查询的是对象、对象的属性
HQL与SQL区别:
Hql 查询的是对象、对象的属性, 区分大小写
Hql查询的对象一定要有映射
SQL 查询的是表、字段,不区分大小写
3. Hibernate执行流程
4. hibernate.cfg.xml 配置详解
在主配置文件配置的时候,hibernate 前缀可以省略
查看配置提示:
hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties
里面有常用配置,如:
#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.hbm2ddl.auto create-drop 每次在创建sessionFactory的时候创建
表;执行sf.close()删除表。
#hibernate.hbm2ddl.auto create 每次都先删除表,再创建新的表
#hibernate.hbm2ddl.auto update 如果表不存在则创建,存在就不创建
#hibernate.hbm2ddl.auto validate 检查映射配置与数据库结构是否一致,不一致就报错 (严格)
也可以通过代码的方式,自动建表:
/** * 代码方式自动建表 * @param args */ public static void main(String[] args) { // 创建配置管理器对象,加载主配置文件(会加载映射) Configuration cfg = new Configuration().configure(); // 自动建表工具类 SchemaExport export = new SchemaExport(cfg); // 创建表 // 第一个参数: 是否打印建表语句到控制台 // 第二个参数: 是否执行脚本,生成表 export.create(true, true); } |
5. 映射配置
映射文件,
命名: *.hbm.xml
作用: 描述“对象”与“表”的映射关系
通过映射文件可以描述一张完整的表
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 通过XML映射,把对象映射到数据库的表中
package 表示包名; 可选,如果没有写,后面的类必须指定类的全名 auto-import="true" 默认为true,即在写hql的时候,会自动引入包名; 如为false,hql中对象要写上包名称 Query q = session.createQuery("from Users"); --> <hibernate-mapping package="cn.Genius.b_api" auto-import="true"> <!-- class 表示映射的一个javabean对象 (可以有多个class节点,但一般一个映射文件对应一个class)
name 表示映射的类的名称; table (可选)类的名称,对应的表名, 如果不写默认与类名称一样
--> <class name="Users" table="t_users"> <!--
id 表示映射的是主键 注意: 在hibernate的映射文件中,必须要有主键映射! 那就要求表必须要有主键!
generator 表示的是主键生成策略 (Api : 5.1.2.2.1. Various additional generators) class
identity 主键自增长, mysql/sqlservlet等数据库使用的自增长的方式 sequence 以序列的方式实现自增长; native 表示主键自增长: 根据底层数据库的能力选择 identity、sequence等其中一个。
assigned 手动指定主键的值 uuid uuid的值作为主键,确保一定唯一 --> <id name="userId" column="id"> <generator class="native"></generator> </id>
<!-- property 表示普通字段的映射 name 属性的名称 column 可选,如果没有指定,与属性名称一致 length 表示字符长度,只对字符类型有效 type 数据库中字段的类型 (如果没有指定,会匹配属性的类型) hibernate中指定的类型: 小写开头 java中类型: 写类的全名 unique 设置为true,表示给当前列添加唯一约束 (主键约束 = 唯一约束 + 非空) --> <property name="userName" type="java.lang.String" column="username" length="50" unique="true"></property>
<property name="age" column="age" type="int"></property>
<!-- 注意:如果列名称对应的是数据库的关键字,需要处理 --> <property name="desc" column="`desc`" length="200"></property> </class>
</hibernate-mapping> |
本文原文地址:https://blog.csdn.net/weixin_41987706/article/details/89235498
这篇关于夜光带你走进Hibernate(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!