hibernate(三)基本配置,log4j、JUnit配置
一、基本配置
1、<property name="hbm2ddl.auto">update</property>
改项配置有4个选项:
validate:当创建好表,当我们操纵数据之前会检查数据库中表与配置文件对应上;
update:如果我们添加了新的属性,而数据库中的表中没有该列,hibernate会帮我添加该字段(或者是我们在实体类中增加一个属性(比如在Student类中添加一个属性sex)hibernate会帮我们添加);
create:启动时如果对应表存在则drop掉然后再创建,如果数据库没有对应的表,hibernate会自动帮我们创建;
下图是设置为create时日志

create-drop:只要关闭SessionFactory,hibernate会自动删除表;
2、如果表名与类名不一致则可以在实体类上的@Entity注解下边再添加@Table(name="teacher")
如果使用配置文件配置映射的话可以在class标签上添加属性table="teacher"
3、注解@Basic可不加,默认会把实体类中所有属性映射到数据库表。所有没有定义注解的属性都会等价为在上边添加了@Basic
4、如果字段名与属性名不相同,采用注解配置的话则在属性get方法上添加@Cloumn(name="_name"),如果采用配置文件方式则添加cloumn属性
5、如果不想一个实体类的属性不参与映射,则在get方法上添加注解@Transient,xml配置文件的话就不要写这个属性即<property .../>这个东西不用写进去
6、映射日期与时间,指定时间精度@Temporal(注:如果注解中需要写value="..."则可以省略value直接写属性值)
如果只记日期不记录时间则可以在属性的get方法上写注解@Temporal(TemporalType.DATA)
如果采用配置文件方式配置映射则在配置文件class标签下指定的属性对应的<property>标签中添加属性type="date",或者type="time"(只显示时间不显示日期),type用于指定类型
7、映射枚举类型@Enumerated
如果要映射枚举类型可以在属性的get方法上添加注解@Enumerated(EnumType.STRING)(在数据库中该属性对应的字段为varchar类型)
如果EnumType.ORDINAL就会把下标值存进去(即在数据库中该属性对应的字段为integer类型)
8、注解可以放在实体类的成员变量上,与放在get方法上起到相同的效果
二、配日志环境显示DDL
首先导入slf4j-api-1.6.1.jar,然后下载sjf4j(1.6.1)和log4j(1.2.17)解压。然后导入slf4j-log4j12-1.6.1-jar、log4j-1.2.17.jar到hibernate下
然后从hibernate示例中copy一份log4j配置文件到src目录下
log4j.properties例:
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=warn, stdout #log4j.logger.org.hibernate=info
log4j.logger.org.hibernate=debug ### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug ### log just the SQL
#log4j.logger.org.hibernate.SQL=debug ### log JDBC bind parameters ###
log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug ### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug ### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug ### log cache activity ###
#log4j.logger.org.hibernate.cache=debug ### log transaction activity
#log4j.logger.org.hibernate.transaction=debug ### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug ### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
执行StudentTest测试类,就可以在控制台看到打印的日志了,如果在hibernate.cfg.xml设置<property name="hbm2ddl.auto">create</property>的话就可以看到建表语句了:

当然,通过设置配置文件更改日志输出的内容(级别),将除log4j.logger.org.hibernate.tool.hbm2ddl=debug以外的配置全部屏蔽就只会在控制台中看到ddl了
三、搭建Junit
参见另一篇文章:Junit4使用http://www.cnblogs.com/orlion/p/4996148.html
1、首先下载解压,然后bulid path->add libraries->user library->user libraries->new然后输入MyJunit然后把刚才下载的Junit的包加进去
2、项目根目录下创建一source folder名为test,然后因为要对Student、Teacher类进行测试(注:并不是要测试这两个类,只是会用这两个类进行测试)所有在test下创建包为cn.orlion.hibernate.model
3、创建测试类,可以让eclipse帮我们创建:在测试包右键->new->Junit Test Case-填入测试的类:

然后创建测试方法testTeacherSave()
package cn.orlion.hibernate.model; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; public class TeacheTest { private static SessionFactory sf = null; @BeforeClass
public static void beforeClass(){ sf = new AnnotationConfiguration().configure().buildSessionFactory();
} @Test
public void testTeacherSave() {
Teacher t = new Teacher(); t.setName("test1");
t.setTitle("title1"); Session session = sf.openSession(); session.beginTransaction();
session.save(t);
session.getTransaction().commit(); session.close(); } @AfterClass
public static void afterclass(){
sf.close();
} }
testTeacherSave()方法上右键Run as-> Junit test可以看绿条,success。
四、showsql formatsql
1、hibernate.cfg.xml中配置<property name="show_sql">true</property>就会在控制台中打印出sql语句
2、<property name="format_sql">true</property>就会在控制台中打印出格式化后的sql语句,而不是单单在一行显示,更加直观友好:

hibernate(三)基本配置,log4j、JUnit配置的更多相关文章
- commons-logging和Log4j 日志管理/log4j.properties配置详解
commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...
- log4j.properties和log4j.xml配置
>>>>1. 概述<<<< 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统 ...
- junit中配置log4j日志
在对项目单元测试的时候,有时候会使用log4j来打印日志,这个时候需要对log4j进行配置. 声明和继承SpringJUnit4ClassRunner类,在这个类中对log4j的配置文件进行加载. p ...
- Hibernate配置log4j日志环境
1.准备所需的jar 说明:具体所使用的jar包的版本与你所使用的Hibernate版本有关,我用的是(hibernate-release-4.3.11.Final) <1>准备slf4j ...
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- Hibernate4搭建Log4J日志管理(附Log4j.properties配置详解)
1.首先加入slf4j的jar包,即slf4j-api-1.6.1.jar 在hibernate官网下载hibernate-release-4.2.2.Final.zip并解压,在hibernate- ...
- Log4j中配置日志文件相对路径
方法一. 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs ...
- springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用
log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n ---internationalization 不就是i和n之间有18个字母... http://logging.a ...
- 170512、java日志文件log4j.properties配置详解
一.Log4j配置 第一步:加入log4j-1.2.8.jar到lib下. 第二步:在CLASSPATH下建立log4j.properties.内容如下: 放在src下的话就不用配置 否则得去web. ...
随机推荐
- 关于PDV的那些事
数据集中的数据来源分为两种: 一.来自于另一个数据集: 二.来自于外部数据源(本文细说此来源): 无论是哪种来源,在它们成为目标数据集中的观测行(官方叫它observation)之前都要进入PDV,先 ...
- C# IGUID的生成
GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...
- 关于 某编译错误: This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
每次当八月在VS2013里使用strcat的时候,基本上都会出现这个问题╮(╯▽╰)╭ 原因貌似是因为安全问题(⊙o⊙) 于是,解决方法如下: ①更改预处理定义: (这也是八月最常用的方法了,虽然貌似 ...
- SSIS内存不足
[SSIS.Pipeline] 信息: 缓冲区管理器检测到系统的虚拟内存不足,但无法换出任何缓冲区.考虑了 0 个缓冲区,锁定了 0 个缓冲区.或者是因未安装足够的内存或其他进程正在使用内存,以致于没 ...
- HTTP笔记整理(2)
四. http协议之请求 1.http请求由三部分组成,分别是:请求行(request line).请求报头(request header).请求正文(body) (1). 请求行:用来说明请求类 ...
- nginx.conf各参数的意义
搬运+翻译至 http://qiita.com/syou007/items/3e2d410bbe65a364b603 /etc/nginx/nginx.conf 记录各个参数的意义 user user ...
- Swift 对比学习 (一)
Swift相对Objective-C来说,有过之而无不及,并与Objective-C无缝混编,可谓利器.在Swift中可以看到不同的编程语言的影子,天下语言一大抄,这样也好,减低了不同语言的学习成本. ...
- 【菜鸟玩Linux开发】在C++里操作MySQL
MySQL是一个的开源关系型数据库,对于服务端开发来说是一个优秀的选择.本篇内容将介绍如何在C++程序里操作MySQL数据库. ———————————————————————————————————— ...
- Xamarin.Android绑定库分享
使用Xamarin.Android时,会用到各种第三方库,而这些库基本上是java编写的,要在Xamarin.Android中使用这些库,就需要通过Android Binding Project绑定对 ...
- 将SQL SERVER数据库改成MySql
(www.helpqy.com) 架构在阿里云上,最先想采用SQL SERVER,想大家都是微软家族的嘛.但是发现SQL SERVER需要的配置比较高,需要的银子也比较多,最后在纠结之下换成了MySq ...