Hibernate hbm映射文件的详解

错误演示

第一步:导入jar包   省略

第二部:创建Person类

package cn.hibernate.bean;

import java.util.Date;

public class Person {

private Integer pId;
private String pName;
private int age;
private Date brithdayDate;
private boolean gender;
private byte[] photo;
private String desc; //描述

public Integer getpId() {
return pId;
}
public void setpId(Integer pId) {
this.pId = pId;
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getpName() {
return pName;
}
public void setpName(String pName) {
this.pName = pName;
}
public Date getBrithdayDate() {
return brithdayDate;
}
public void setBrithdayDate(Date brithdayDate) {
this.brithdayDate = brithdayDate;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public byte[] getPhoto() {
return photo;
}
public void setPhoto(byte[] photo) {
this.photo = photo;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}

第三步:创建Person的映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.bean">
<!--
<class>标签:配置对象与表 之间关系
*name:默认情况,确定对象全限定类名
如果在<hibernate-mapping>配置package,确定javabean所在的包,可以只简单类名
*table:数据库的表名
*catalog:使用的数据库名称,默认值:hibernate.cfg.xml配置url设置的数据库名称
url # jdbc:mysql://localhost:3306/minemysql
<id>标签配置主键,要求每一个表都应该存在主键
* name :确定javabean那个属性作为主键
<property>标签 配置javabean的普通属性
* name: 确定属性名称
* type: 确定属性类型
java类型:type="java.lang.String"
hibernate类型:type="string"
timestamp:时间戳,数据更改,当前字段内容将自动使用系统时间
time:时间
date:日期
binary:二进制,大数据类型
数据库类型: 使用子标签<column>
name:列名
sql-type:数据库类型。例如:varchar(50)
* column: 数据库的列名:默认值与name的取值相同
* length: 确定列的大小
* unique:唯一(添加唯一约束)
* not-null:不为空
-->
<class name="Person" table="t_person">
<id name="pId">
<!-- 主键生成策略:固定值 -->
<generator class="native"></generator>
</id>
<property name="pName" >
<column name="pName" sql-type="varchar(50)"></column>
</property>
<property name="age" type="integer" column="age"></property>
<property name="brithdayDate" type="date"></property>
<property name="gender" type="boolean"></property>
<property name="photo" type="binary" not-null="true" unique="false" length="350000"></property>
<property name="desc" column="`desc`"></property>
</class>
</hibernate-mapping>

第四步:创建核心配置文件hibernate.cfg.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- #1 基本的四项
property.name 取值如果以‘hibernate’开头,可以省略
以“hibernate.connection.driver_class”与“connection.driver_class”相同
-->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/minemysql
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>

<!-- #2方言 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>

<!-- #3 sql -->
<!-- 是否显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 是否格式化sql语句 不格式化显示一行 格式化显示多行 -->
<property name="hibernate.format_sql">true</property>
<!-- 是否显示注释,提供当前sql语句操作对象 -->
<property name="hibernate.use_sql_comments">true</property>

<!-- #4如何创建表(不重要)
create:每一次加载cfg.xml文件都将创建表,程序关闭时,表不进行删除 [初始化,测试时使用]
如果表存在则先删除后创建
create-drop:每一次加载cfg.xml文件都将创建表,程序关闭时,表进行删除
必须执行factory.close()才能删除
update:如果表不存在则创建,如果表存在,先回检查*.hbm.xml文件是否和表匹配,
如果不匹配将更新表结构(只添加,不删除)
validate:加载cfg.xml进效验,映射文件和数据表是否匹配,如果匹配正常操作,如果不匹配则抛出异常
### 显示的开发中先有的表,再有的映射文件
* 表 由DBA创建
-->
<property name="hibernate.hbm2ddl.auto">update</property>

<!-- #5取消bean效验 -->
//省略下面会给讲解什么时候需要配置<property name="javax.persistence.validation.mode">none</property>

</session-factory>
</hibernate-configuration>

第五步:创建测试类

package cn.hibernate.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.hibernate.bean.Person;

public class TestApp {

@Test
public void demo01() throws IOException{
FileInputStream is = new FileInputStream(new File("1.jpg"));
byte[] photo = new byte[is.available()];
is.read(photo);
is.close();

Person son = new Person();
son.setpName("杰克1");
son.setAge(19);
son.setBrithdayDate(new Date());
son.setGender(true);
son.setPhoto(photo);
son.setDesc("这个家伙有头像");

Configuration configuration = new Configuration().configure();
//采用手动方式添加
configuration.addClass(Person.class);

SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();

session.save(son);

transaction.commit();
session.close();
sessionFactory.close();

}
}

测试时出现的错误如下解决

如果出现图片太大可以在映射文件中来修改所能保存图片的大小

出现:org.hibernate.HibernateException: Unable to get the default Bean Validation factory     错误

分析:在javaweb6.0项目中添加一个jar

解决:hibernate.cfg.xml中配置取消

特殊字符

分析:sql数据不能使用关键字(desc,order等)

解决方法:在列名的左右添加重音符 ("``")

时间: 2024-11-05 22:08:08

Hibernate hbm映射文件的详解的相关文章

6.Mybatis 映射文件标签详解

编写的测试代码在下面,没有jar包(上传的大小限制啦) 1.1     Mybatis映射文件(核心) 1.1.1 输入映射 1.1.1.1  ParameterType 指定输入参数的java类型,可以使用别名或者类的全限定名.它可以接收简单类型.POJO.HashMap. 1.1.1.1.1      传递简单类型 参考需求:根据用户ID查询用户信息. 1.1.1.1.2      传递POJO对象 1.1.1.1.2.1     需求 根据用户性别和用户名称来查询用户信息 1.1.1.1.

[转]xxx.hbm.xml文件配置详解

潜龙写 xml代码: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- <hibernate-mapping>一般不去配置,采用

使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同

如果是使用oracle数据库,那么hibernate的映射文件.hbm.xml如下: <id name="xuehao" column="xuehao"> </id> 这个id不是数据库自动生成的,这需要注意:而且这些字段必须和实体类中相对应,实体类中还需要对应的get()方法和set()方法. 因为oracle数据库中的id都是自动生成的,所以这里不需要写数据库的id,这和MySQL数据库有很大区别:另外,MySQL数据库建表时必须指明id

【Hibernate步步为营】--锁机制详解

上篇文章详细讨论了hql的各种查询方法,在讨论过程中写了代码示例,hql的查询方法类似于sql,查询的方法比较简单,有sql基础的开发人员在使用hql时就会变得相当的简单.Hibernate在操作数据库的同时也提供了对数据库操作的限制方法,这种方法被称为锁机制,Hibernate提供的锁分为两种一种是乐观锁,另外一种是悲观锁.通过使用锁能够控制数据库的并发性操作,限制用户对数据库的并发性的操作. 一.锁简介 锁能控制数据库的并发操作,通过使用锁来控制数据库的并发操作,Hibernate提供了两种

hibernate.hbm.xml文件配置入门小结(1)

在Hibernate中,各表的映射文件xxx.hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具. hibernate.hbm.xml文件的基本结构如下: [html] view plain copy print? 1   <?xml version="1.0" encoding='UTF-8'?> 2 3   <!DOCTYPE hibernate-mapping PUBLIC 4        "-//Hi

hibernate 关系映射文件配置

<!--Department.hbm.xml users属性,本类与User的一对多 --> <set name="users"> <key column="departmentId"></key> <one-to-many class="User" /> </set> <!-- parent属性,本类与Department(上级)的多对一 --> <man

Windows DIB文件操作详解-5.DIB和调色板

Windows调色板是256色显卡时期的产物,现在显卡最少也是16bit的了,所以调色板基本上是用不到了的. 但是下面几种情况还是需要去使用和了解调色板: 1.在新显卡上保证256色兼容模式的正常运行 2.在256色显卡或低于256色显卡老机器上运行程序或在一些工业控制场合(为了节约成本可能采用256色显卡或低于256色显卡)运行程序 3.操作DIB的指定像素点数据 1.调色板是什么 同样采用下面一张图 如上图,我们可以调色板分为如下几种: 1.DIB文件中的调色板 2.内存中创建的逻辑调色板对

Hibernate实体映射文件多对多等关系简单应用技巧

第一步,写注释: <!--xx属性,本类与Yy(类)的多对一 --> <!--xx属性,本类与Yy(类)的一对多 --> <!--xx属性,本类与Yy(类)的多对多 --> <!--xx属性,本类与Yy(类)的一对一 --> 第二部,拷模版 <!--xx属性,本类与Yy(类)的多对一 --> <many-to-one name="" class="" column="">&l

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到