夜光带你走进Hibernate(二)

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/89235498

夜光序言:

 

身着淡青色衣衫的青年饶了饶头,苦涩一笑,说道:“你还相信爱情吗?”

走在身旁的青年扭过头,漆黑双眸中一抹神采掠过,淡淡一笑:“相信啊,从来都相信爱情,我不信的是人而已”

 

 

 

正文:继续嗯~~

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 前缀可以省略

 

d

查看配置提示:

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>

 

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/89235498
今日推荐