hibernate学习笔记_基础配置

一.hibernate.cfg.xml: hbni2ddl.auto

二.搭建日志环境并配置显示DDL语句

我们使用slf接口,然后使用log4j的实现。

1、  首先引入log4j的jar包(log4j-1.2.14.jar),

2、  然后再引入slf4j实现LOG4J和适配器jar包(slf4j-log4j12-1.5.8.jar)

3、  最后创建log4j的配置文件(log4j.properties),并加以修改,只要保留

  log4j.logger.org.hibernate.tool.hbm2ddl=debug

三.搭建Junit环境

1、首先引入Junit 类库 jar包 (junit-4.8.1.jar)

2、在项目名上右键→new→Source Folder→输入名称→finish

3、注意,你对哪个包进行测试,你就在测试下建立和那个包相同的包

4、建立测试类,需要在测试的方法前面加入”@Test”

package com.bjsxt.hibernate.model;

import static org.junit.Assert.*;

import org.hibernate.HibernateException;
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 TeacherTest {
    private static SessionFactory sf;
    @BeforeClass
    public static void beforeClass(){
        try {
            sf=new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    @Test
    public void testTeacherSave() {
        Teacher t=new Teacher();
        t.setId(3);
        t.setName("t1");
        t.setTitle("中级");

        Session session=sf.openSession();
        session.beginTransaction();
        session.save(t);
        session.getTransaction().commit();
        session.close();

    }

    @AfterClass
    public static void afterClass(){
        sf.close();
    }
}

四.ehibernate.cfg.xml : show_sql

输出所有SQL语句到控制台. 有一个另外的选择是把org.hibernate.SQL这个log category设为debug。

取值: true | false

五,hibernate.cfg.xml :format_sql

六,表名和类名不同,对表名进行配置

Annotation:使用 @Table(name=”tableName”) 进行注解

@Entity
@Table(name="_Teacher")
public class Teacher {
    private int id;
    private String name;
    private String title;
    private String money;
    private Date birthDay;
    private ZhiCheng zhiCheng;
。。。。。
}

七,字段名和属性相同

Annotation:默认为@Basic

注意:如果在成员属性没有加入任何注解,则默认在前面加入了@Basic

Xml中不用写column

八,字段名和属性名不同

Annotation:使用@Column(name=”columnName”)进行注解

@Column(name="_name")
    public String getName() {
        return name;
    }

Xml:

<property name="name" column="_name"/> 

九,不需要(持久化)psersistence的字段

就是实体类的某个成员属性不需要存入数据库中

Annotation:使用@Transient 进行注解就可以了。

@Transient
    public String getMoney() {
        return money;
    }
    public void setMoney(String money) {
        this.money = money;
    }

Xml:不写(就是不需要对这个成员属性进行映射

十,映射日期与时间类型,指定时间精度

Annotation:使用@Temporal(value=TemporalType)来注解表示日期和时间的注解

其中TemporalType有三个值:TemporalType.TIMESTAMP 表示yyyy-MM-dd HH:mm:ss

                                     TemporalType.DATE      表示yyyy-MM-dd

                                     TemporalType.TIME      表示HH:mm:ss

@Temporal(TemporalType.DATE)//数据库中只存日期,不存时间
    public Date getBirthDay() {
        return birthDay;
    }
    public void setBirthDay(Date birthDay) {
        this.birthDay = birthDay;
    }

注意:当使用注解时,属性为value时,则这个属性名可以省略,例如:@Temporal(TemporalType)

Xml:使用type属性指定hibernate类型

<property name="birthDate" type="date"/>

注意:hibernate日期时间类型有:date, time, timestamp,当然您也可以使用Java包装类

十一,映射枚举类型

Annotation:使用@Enumerated(value=EnumType)来注解表示此成员属性为枚举映射到数据库

其中EnumType有二个值:①EnumType.STRING  表示直接将枚举名称存入数据库

                             ②EnumType.ORDINAL 表示将枚举所对应的数值存入数据库

@Enumerated(EnumType.STRING)//string 在数据库中映射成字符串,而oridinal会映射成int类型从0开始
    public ZhiCheng getZhiCheng() {
        return zhiCheng;
    }
    public void setZhiCheng(ZhiCheng zhiCheng) {
        this.zhiCheng = zhiCheng;
    }

Xml:映射非常的麻烦,先要定义自定义类型,然后再使用这个定义的类型……

总结:

package com.bjsxt.hibernate.model;

import java.util.Date;
import java.util.Enumeration;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table(name="_Teacher")
public class Teacher {
    private int id;
    private String name;
    private String title;
    private String money;
    private Date birthDay;
    private ZhiCheng zhiCheng;

    @Id
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Column(name="_name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    @Transient
    public String getMoney() {
        return money;
    }
    public void setMoney(String money) {
        this.money = money;
    }
    @Temporal(TemporalType.DATE)//数据库中只存日期,不存时间
    public Date getBirthDay() {
        return birthDay;
    }
    public void setBirthDay(Date birthDay) {
        this.birthDay = birthDay;
    }
    @Enumerated(EnumType.STRING)//string 在数据库中映射成字符串,而oridinal会映射成int类型从0开始
    public ZhiCheng getZhiCheng() {
        return zhiCheng;
    }
    public void setZhiCheng(ZhiCheng zhiCheng) {
        this.zhiCheng = zhiCheng;
    }
}
时间: 2024-10-06 10:53:24

hibernate学习笔记_基础配置的相关文章

Hibernate学习笔记_事务

 事务并发处理(面试的意义更大)                        a)   事务:ACID i.   Atomic(原子性) Consistency(一致性) Isolation(隔离性) Durability(独立性) b)   事务并发时可能出现的问题: 第一类丢失更新(Lost Update) 时间 取款事务A 存款事务B T1 开始事务   T2   开始事务 T3 查询账户余额为1000元   T4   查询账户余额为1000元 T5   汇入100元把余额改为1100元

Hibernate学习笔记_缓存

一级缓存和二级缓存和査询缓存(面试题)                 a)    什么是缓存 b)    什么是一级缓存,session级别的缓存 c)    什么是二级缓存,SessionFactory级别的缓存,可以跨越session存在 i.   经常被访间 ii.   改动不大不会经常改动 iii.   数重有限 d)    打开二级缓存 i.   hibernate.cfg.xml 设定: <property name= "cache.use_second_level_cach

Hibernate学习笔记_联合主键

复合主键(联合主键):多个字段构成唯一性. 一,xml方式 1. 将联合主键的属性提取出来,重新编写一个StudentPK类(原Student类中的id,name要删除 并新加入属性“StudentPK”) //StudentPK .javapackage com.bjsxt.hibernate; public class StudentPK implements java.io.Serializable{ private int id; private String name; public

Hibernate学习笔记_查询

HQL vs EJBQL 1         NativeSQL >HQL.> EJBQL(JPQL 1.0) > QBC(Query By Criteria) > QBE(Query By Example)" 2         总结:QL应该和导航关系结合,共同为査询提供服务. @Test public void testHQL_01() { Session session = sf.openSession(); session.beginTransaction();

Hibernate学习笔记_关系映射

    一对一关联     一,     一对一单向外键关联 a)    Annotation: 在被约束表字段的get方法上加@0ne20ne @JoinColumn //Husband .java @Entity public class Husband { private int id; private String name; private Wife wife; @Id @GeneratedValue public int getId() { return id; } public S

WEB_JS学习笔记_基础

1.JS和JAVA对比 JS是基于对象(调用浏览器内置对象的方法),java是面向对象 JS只需解释就可以由浏览器执行, java需要先编译成字节码文件再执行 js是弱类型(数据类型之间任意转换),java是强引用 js和java一样区分大小写 2.一个完整的JavaScrip由以下几部分组成 核心:ECMAScript 文档对象模型:DOM  (内置两大内对象之一) 浏览器对象模型:BOM  (内置两大内对象之一) 3.JS和Html结合方式 方式一:放置<scrip>标签: <scr

Hibernate学习笔记_性能优化

注意session.clear()的运用,尤其在不断分页循环的时候 a)    在一个大集合中进行遍历,遍历msg,取出其中的含有敏感字样的对象 b)    另外一种形式的内存泄露  (  //面试题:Java有内存泄漏吗?语法级别没有 但是可由java引起,例如:连接池不关闭,或io读取后不关闭) 1+N问题 (典型的面试题)                                              a)    @ManyToOne(fetch=FetchType.LAZY)

Shader学习笔记_基础知识_分量

分量 矢量的分量名称:{x,y,z,w}表示顶点: {r,g,b,a}表示颜色:{s,t,p,q}表示纹理坐标. 每个分量用点号连接(例如v2.x(一个float变量),v3.rg(一个vec2变量)). 不同组的分量不能混合使用(例如v4.xgba不合法),但是顺序可以任意,可以重复(例如v3.yyxx(一个vec4变量)),但不能超过4个,因为编译器不知道转化成什么类型(例如v4.xyzwxy不合法). 矩阵的分量就是用下标表示,注意的是矩阵是以列优先的. mat4 m; m[1] = ve

Hibernate学习笔记_关系映射_其他

集合映射(不太重要) 1         Set 2        List (与Set差不多 多个@OrderBy) a) @OrderBy     排序 private List<User> users = new ArrayList<User>(); @OneToMany(mappedBy="group", cascade={CascadeType.ALL} ) @OrderBy("name ASC") public List<U