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. ...
随机推荐
- vim指令常用
慢慢尝试使用vim,不断学习使用新的快捷键,将常用快捷键但经常容易忘的写下来, 1. 复制黏贴 命令行模式下按住v选中,y表示复制,d表示剪切,p为复制.
- java基础(环境设置,基础语法,函数数组)
框架图 环境搭建 课程中常见dos命令: dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录 cd : 进入指定目录 cd.. : 退回到上一级目录 cd/ : 退回到 ...
- JS中innerHTML,innerText,value
一·.JS初学者易混淆的问题:innerHTML,innerText,value(他们和JQ的区别:JS→value,JQ→value()) 1.getElementById("a" ...
- (转)使用Node.js+Socket.IO搭建WebSocket实时应用
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...
- python学习笔记:Day02
一.列表(list) 1.定义一个列表 name=["tom","jerry","12","13","lose ...
- OC中的自动引用计数
目录: 1,自动引用计数的定义 2,强引用和弱引用 3,类比手动引用 4,循环引用 5,CoreFoundation 内容: 自动引用计数的定义: (Automatic Reference Count ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)
(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做 ...
- 推荐一些常用感觉不错的jQuery插件
转:http://www.cnblogs.com/v10258/p/3263939.html JQuery插件繁多,下面是个人在工作和学习中用到感觉不错的,特此记录. UI: jquery UI(官方 ...
- PS 多次剪裁同一图片
一个图品里面有两个小图,要分别抠出来. 我以前的做法是,先扣一个,重新打开文件,再扣另外一个. 今天发现一个简单的办法,不用重新打开文件. 就是在扣完第一个的时候,打开历史记录面板,双击 打开 动作, ...
- vi 卡住怎么办
http://zhidao.baidu.com/question/93283359.html ---------- 我貌似好像按了ctrl+s... 用惯了windows人,会习惯性地按Ctrl+S来 ...