3.Hibernate基础配置
1.Hibernate.cfg.xml:hbm2ddl.auto
在SessionFactory创建时,自动检查数据库结构,或者将数据库schema的DDL导出到数据库
<property name="hbm2ddl.auto">create</property> 除了 create 还有其他取值,可以去查文档
a)先建表还是先建实体类 (理论先类,实际先表)
2.搭建日志环境并配置显示DDL语句(数据库定义语言:直接提交的)(就是SQL语句)
使用slf接口 ,然后使用log4j的实现(slf是一个规范,一个标准,类似于接口,类似的标准还有JPA,JDBC等)
a)首先引入 slf-api-1.5.8.jar 这个接口标准
b)然后引入log4j(log4j-1.2.14.jar)
c)然后再引入slf4j实现LOG4J的适配器jar包(slf4j-log4j12-1.5.8.jar) (这里体现了适配器模式)
d)最后创建log4j的配置文件(log4j.properties),并加以修改,只要保留
适配器模式将一个类的接口转换成客户期望的另一个接口,让原本不兼容的接口可以合作无间。
原本 slf 接口 和 log4j 接口是不兼容的,但是这里通过slf4j-log4j12-1.5.8.jar,将 log4j中的接口 转换成 符合 slf 标准的接口
JDBC也是类似,只提供了一个标准,mysql 和 oracle 都要使用相应的jar包,使其能够适配JDBC这个标准
3.hibernate.cfg.xml:show_sql 是否输出所有语句到控制台
format_sql 是否在log 和 console中 打印出更漂亮的SQL
4.表名和类名不同,如何对表名进行配置 (默认加了@Entity的类名就是表名)
1.Annotation:使用@Table(name="tableName") 进行注解
2.xml:<class name="Student" table="t_student">
5.字段名和属性名相同
1.Annotation:默认为@Basic (如果成员属性没有加入任何注解,则默认在前面加入了@Basic)
2.xml中不需要写 column
6.字段名和属性名不同
1.Annotation:使用@Column(name="columnName") 进行注解
2.xml:<property name="name" column="_name"/>
7.不需要持久化的字段 (即实体类某个成员属性不打算保存在DB中)
1.Annotation:使用@Transient 进行注解就可以了
2.xml:不写就可以(就是不需要对这个成员属性进行映射)
8.映射日期与时间类型,指定时间精度(数据库中存的数据的类型)
1.Annotation:使用Temporal(value=TemporalType) 来注解表示日期和时间
其中Temporal 有三个值:Temporal.TIMESTAMP 表示 yyyy-MM-dd HH:mm:ss
Temporal.DATE 表示 yyyy-MM-dd
Temporal.TIME 表示 HH:mm:ss
注:当使用注解时,属性为value时,则这个属性名可以省略,例如:@Temporal(TemporalType)
2.xml:使用type属性指定hibernate类型
<property name="birthDate" type="date"/>
注:hibernate 日期时间类型有:date,time,timestamp,当然也可以使用java包装类
9.映射枚举类型
1.Annotation:使用@Enumerated(value=EnumType) 来注解表示此成员属性为枚举映射到数据库
其中 EnumType 可以取两个值:
1.EnumType.STRING 表示直接将枚举名称存入数据库 (数据库字段的类型为varchar(255))
2.EnumType.ORDINAL 表示将枚举所对应的下标数值存入数据库(数据库字段的类型为int)
2.xml:映射非常的麻烦,要先定义自定义类型,然后再使用这个定义的类型,一般不使用这种方式
10.字段映射的位置(field 或者 get方法)
即对字段的注解是放在字段本身,还是该字段的get方法上
Best practice:应该放在get方法上,原因:java的封装性
字段的定义是 private, 是不希望别人来访问的,如果强行将注解放到 字段上,对,hibernate的确也可以访问到(暴力反射),
但是后果就是会破坏java的封装性,而放到 get方法(public)就不会有这样的情况,
3.Hibernate基础配置的更多相关文章
- Hibernate学习笔记2.1(Hibernate基础配置)
Hibernate基础配置 1.<property name="hbm2ddl.auto">update</property> 在SessionFactor ...
- Hibernate 基础配置及常用功能(三)
本章重点讲述Hibernate对象的三种状态以及如何配置二级缓存 有关Hibernate的三种状态如何相互转换网上都能查到,官方文档描述的也比较详细.这里主要是针对几个重点方法做代码演示. 一.状态转 ...
- Hibernate 基础配置及常用功能(一)
本来是想等全部框架测试完以后再统一发布的,但是随着测试的一点点增加感觉把需要叙述的东西放在一起终将会是一场灾难.所以还是打算分成几章来描述,其中还包括一些有待解决的问题.短期很难腾出时间来仔细阅读Hi ...
- Hibernate 基础配置及常用功能(二)
本章主要是描述几种经典映射关系,顺带比较Hibernate4.x和Hibernate5.x之间的区别. 一.建立测试工程目录 有关实体类之间的相互映射关系,Hibernate官方文档其实描述的非常详细 ...
- hibernate基础配置
数据库表名和类名 一致 注解:可写可不写: XML:可写可不写: <class name="Student"> 不一致 注解: public class Teache ...
- Hibernate学习笔记2.3(Hibernate基础配置)
映射,注释可以放在成员变量上面,也可以放在get方法上面 写在成员变量的话 破坏了java的面向对象思维 直接让hibernate访问内部的私有元素 要是能直接设指不合适哈哈 所以主张写在get方法上 ...
- Hibernate游记——装备篇《二》(基础配置示例)
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...
- Java进阶知识03 Hibernate的基础配置详解
1.Hibernate的原理/流程步骤 1.通过Configuration().configure(); 读取并解析hibernate.cfg.xml配置文件,并创建一个configuration对象 ...
- hibernate学习笔记(1)基础配置与jar包
下载hibernate基础jar包,并解压hibernate-core-4.2.4.final 在myeclipse中添加hibernate的dtd支持: location为D:\学习\imooc-h ...
随机推荐
- PCL中有哪些可用的PointT类型(2)
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=267 PointXY-float x, y; 简单的二维x-y point结 ...
- Cgroup与LXC简介
原文地址: https://blog.51cto.com/speakingbaicai/1359825 一.Docker.LXC.Cgroup的结构关系 根据Docker布道师Jerome Petaz ...
- Java日志体系(四)slf4j
1.1 简介 与commons-logging相同,slf4j也是一个通用的日志接口,在程序中与其他日志框架结合使用,并对外提供服务. Simple Logging Facade for Java简称 ...
- What happens when you type an URL in the browser and press enter?
What happens when you type an URL in the browser and press enter? 1. You type maps.google.com into t ...
- C++ N叉树的实现
引言 最近一个项目需要使用多叉树结构来存储数据,但是基于平时学习的都是二叉树的结构,以及网上都是二叉树为基础来进行学习,所以今天实现一个多叉树的数据结构. 理论基础 树和二叉树: 多叉树:多叉树,顾名 ...
- Nmap之用法
简介 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Network Mapper的简称. 功能架构图 N ...
- CTF中对web服务器各种提权姿势
在我们拿下服务器web服务往往只是低权限用户,对于内网渗透,我们往往需要root权限,Linux系统提权包括使用溢出漏洞已及利用系统配置文件. 提权前提: 1.拿到低权限shell 2.被入侵机器上有 ...
- 【转载】android权限大全
1.android.permission.WRITE_USER_DICTIONARY 允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS ...
- CSS实现网页背景图片自适应全屏,自适应背景图片
一张清晰漂亮的背景图片能给网页加分不少,设计师也经常会给页面的背景使用大图,我们既不想图片因为不同分辨率图片变形,也不希望当在大屏的情况下,背景有一块露白,简而言之,就是实现能自适应屏幕大小又不会变形 ...
- Laravel从模型中图片的相对路径获取绝对路径
在模型product.php中增加以下方法.数据库图片字段为image.存储的图片相对路径 public function getImageUrlAttribute() { // 如果 image 字 ...