问一个hibernate数据库存取的问题,困扰两天,小弟刚学

wubai86 2015-07-28 10:05:24
package cn.itcast.c_hbm_property;
测试用的程序
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Iterator;

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

import antlr.collections.List;

public class App {

private static SessionFactory sessionFactory;

static {
sessionFactory = new Configuration()//
.configure()// 读取配置文件
.addClass(User.class)//
.buildSessionFactory();
}

@Test
public void testSave() throws Exception {
// 读取图片文件
InputStream in = new FileInputStream( "d:/test.png");
byte[] photo = new byte[in.available()];
in.read(photo);
in.close();

// 创建对象实例
User user = new User();
user.setName("zhangfan");
user.setAge(20);
user.setBirthday(new Date());
user.setDesc("zhangfan is handsome boy123");
user.setPhoto(photo);

// 保存
Session session = sessionFactory.openSession(); // 打开一个新的Session
Transaction tx = session.beginTransaction(); // 开始事务

session.save(user);

tx.commit(); // 提交事务
session.close(); // 关闭Session,释放资源
}


@Test
public void testGet() throws Exception {
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

User user = (User) session.get(User.class, 1); // 获取
System.out.println(user);
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getDesc());
System.out.println(user.getPhoto());

OutputStream out = new FileOutputStream("d:/copy.png");
//out.write(user.getPhoto());
out.close();

tx.commit();
session.close();

}
}
user.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.c_hbm_property">

<!-- name属性:哪个类
table属性:对应哪个表,如果不写,默认的表名就是类的简单名称
-->
<class name="User" table="t_user">
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<!-- 普通的属性(数据库中的基本类型,如字符串、日期、数字等)
name属性:对象中的属性名,必须要有。
type属性:类型,如果不写,Hibernate会自动检测。
可以写Java中类的全名。
或是写hibernate类型。
column属性:对应表中的列名,如果没有,默认为属性名。
length属性:长度,不是所有的类型都有长度属性,比如varchar有,但int没有,如果不写默认为255
not-null属性:非空约束,默认为false
-->
<!--
<property name="name"/>
-->
<property name="name" type="string" column="name" length="20" not-null="true"/>

<property name="age" type="int" column="age_"/>

<property name="birthday" type="date" column="birthday_"/>

<!-- 当列表与关键字冲突时,可以通过column属性指定一个其他的列名。
或是使用反引号包围起来。

指定使用text类型时,最好再指定length,以确定生成的SQL类型是能够存放指定数量的字符的。

<property name="desc">
<column name="desc_" length="5000" sql-type="text"/>
</property>
-->
<property name="desc" type="text" length="5000" column="desc_" ></property>

<!-- 头像,二进制类型,最好指定长度 -->
<property name="photo" type="binary" length="102400"></property>

</class>

</hibernate-mapping>
USER.java
package cn.itcast.c_hbm_property;

import java.util.Date;

/**
* 实体
*
* @author tyg
*
*/
public class User {
private int id;
private String name;
private Integer age;
private Date birthday; // 生日
private String desc; // 一大段说明
private byte[] photo; // 头像图片

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Date getBirthday() {
return birthday;
}

public void setBirthday(Date birthday) {
this.birthday = birthday;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}

public byte[] getPhoto() {
return photo;
}

public void setPhoto(byte[] photo) {
this.photo = photo;
}

public void setAge(Integer age) {
this.age = age;
}

@Override
public String toString() {
return "[User: id=" + id + ", name=" + name + "]";
}

小弟刚hibernate , 前面用的JUNIT 测试,第一个函数测试运行了后,可以在数据库中保存数据,但是第二个testget()方法,执行后数据取不出来,显示空指针异常,一开始数据存进去,一执行第二个程序,数据库表就全部空值了,现在倒是不空值了,数据可以存到表中,可是还是取不出来,忘大神指导。
...全文
69 点赞 收藏 回复
写回复
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-07-28 10:05
社区公告
暂无公告