夜光带你走进Hibernate(二)

2023-10-12 21:48
文章标签 hibernate 走进 夜光

本文主要是介绍夜光带你走进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(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/198692

相关文章

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

hibernate修改数据库已有的对象【简化操作】

陈科肇 直接上代码: /*** 更新新的数据并并未修改旧的数据* @param oldEntity 数据库存在的实体* @param newEntity 更改后的实体* @throws IllegalAccessException * @throws IllegalArgumentException */public void updateNew(T oldEntity,T newEntity

Hibernate插入数据时,报错:org.springframework.dao.DataIntegrityViolationException: could not insert: [cn.itc

在用junit测试:插入数据时,报一下错误: 错误原因: package junit;import org.junit.Test;import cn.itcast.crm.container.ServiceProvinder;import cn.itcast.crm.dao.ISysUserDao;import cn.itcast.crm.domain.SysRole;

Hibernate中自带的连接池!!!

<span style="font-size:18px; font-family: Arial, Helvetica, sans-serif;"><?xml version="1.0" encoding="UTF-8"?></span> <span style="font-size:18px;"><!DOCTYPE hibernate-configuration PUBLIC"-//Hibern

【Linux】萌新看过来!一篇文章带你走进Linux世界

🚀个人主页:奋斗的小羊 🚀所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言💥1、初识Linux💥1.1 什么是操作系统?💥1.2 各种操作系统对比💥1.3 现代Linux应用💥1.4 Linux常用版本 💥2、Linux 和 Windows 目录结构对比💥2.1 文件系统组织方式💥2.2

spring mvc+hibernate 实现事务管理(全注解版)

为了方便项目变大配置文件变多,用注解代替 *.hbm.xml,<bean id="*dao" class="">,另外用反省实现dao操作,省去每个类一个dao,此处参考了鸵鸟的例子。 实现功能跟http://blog.csdn.net/waiwai4701/article/details/38270721这个项目是一样的,controller和页面就不再写 首先,jar包支持,为了方便