zoukankan      html  css  js  c++  java
  • Hibernate---基础配置

    hibernate.cfg.xml里可以设置一个值显示更详细的sql语句:

    <property name="format_sql">true</property>
    
    • 表明和类名不同的时候, 需要对表名进行配置

    Annotation的情况:

    1. Teacher.java  , 加@Table(name="--")

    @Entity
    @Table(name="_Teacher")
    

    运行 junit自动生成 _teacher这个表

    XML的情况:

    1. 修改配置文件Student.hbm.xml:

    <class name="Student" table="_student">
    

    StudentTest.java, 内容如下:

    package com.bjsxt.hibernate.model;
    
    import static org.junit.Assert.*;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class StudentTest {
    	private static SessionFactory sf=null;
    	@BeforeClass
    	public static void beforeClass(){
    		sf=new AnnotationConfiguration().configure().buildSessionFactory();
    	}
    	@Test
    	public void testStudentSave() {
    		Student s =new Student();
    		s.setId(4);
    		s.setName("wdfd");
    		s.setAge(30);
    		
    		Session session =  sf.openSession();
    		session.beginTransaction();
    		session.save(s);
    		session.getTransaction().commit();
    		session.close();
    		sf.close();
    	}
    	@AfterClass
    	public static void afterClass(){
    		sf.close();
    	}
    
    }
    
    • 如果是字段名和属性名不同的话:

    Annotation方式:

    1. 在Teacher.java里加入如下信息 @Column(name="--")

    @Column(name="_name")
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    

    XML方式:

    1. 修改配置文件Student.hbm.xml:

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

      

    • 如果类里有个属性不想存在数据库里

    Annotation方式: 在类里 该属性get方法之前 加@Transient

    XML方式:  直接不写

    • 映射日期与时间类型

    Annotation方式:

    1. 在类里 添加一个Date类型属性,并生成get set方法:

    private Date birthDate;
    	
    	public Date getBirthDate() {
    		return birthDate;
    	}
    	public void setBirthDate(Date birthDate) {
    		this.birthDate = birthDate;
    	}
    

    2. 在TeacherTest里写入一行:

    t.setBirthDate(new Date());
    

    结果:  2016-04-19 16:15:54

    我们只想要年月日, 只需要加入@Temporal(TemporalType.DATE)

    XML方式:  指定type, 很麻烦

    • 映射枚举类型:

    Annotation方式: @Enumerated(EnumType.STRING)

    1. 在Teacher.java同目录下新建一个Enum: Zhicheng.java, 内容如下:

    package com.bjsxt.hibernate.model;
    
    public enum Zhicheng {
    	A,B,C
    }
    

    2. 在 Teacher.java里加入字段:

    private Zhicheng zc;
    	@Enumerated(EnumType.STRING)
    	public Zhicheng getZc() {
    		return zc;
    	}
    	public void setZc(Zhicheng zc) {
    		this.zc = zc;
    	}
    

    3. 在TeacherTest.Java里加入:

    t.setZc(Zhicheng.A);
    

    运行出来的_teacher表里有个zc, 值为A

    如果用 @Enumerated(EnumType.STRING) , zc的值为0.

    junit有个bug, 就是在@beforeclass里出现异常的时候错误不会报出来, 会吞掉,

    解决方法1: @beforeclass加try..catch.

    解决方法2:在test方法里写个main方法,调用beforeClass()方法.

  • 相关阅读:
    vba --barcode9.0 生成 code39
    利用JS 阻止表单提交
    VS2012变化的快捷键
    鼠标右击禁用
    计算机算法常用术语中英对照
    GrideView(三)---编辑功能实现
    GrideView(二)---删除功能
    GridView认识(一)
    微软 自带 AJAX 拓展
    C#日期函数使用大全
  • 原文地址:https://www.cnblogs.com/wujixing/p/5412226.html
Copyright © 2011-2022 走看看