<?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="user">
<!-- id int类型 -->
<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" 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 name="photo" type="binary" length="1024" column="photo_"/>
</class>
</hibernate-mapping>
package cn.itcast.c_hbm_property;
import java.util.Arrays;
import java.util.Date;
/**
* 实体
*
* @author 风清杨
* @version V1.0
*/
public class User {
private int id;// 编号
private String name;// 姓名
private int 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;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age
+ ", birthday=" + birthday + ", desc=" + desc + ", photo="
+ Arrays.toString(photo) + "]";
}
}
package cn.itcast.c_hbm_property;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
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;
/**
* 操作类
*
* @author 风清杨
* @version V1.0
*/
public class App {
private static SessionFactory sessionFactory;
// 初始化配置文件
static {
sessionFactory = new Configuration()//
.configure()// 读取默认主配置文件
.addClass(User.class)//
.buildSessionFactory();// 根据配置生成session工厂
}
/**
* 保存
*
* @throws Exception
*/
@Test
public void testSave() throws Exception {
// 读取图片文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
"test.png"));
byte[] photo = new byte[bis.available()];
bis.read(photo);
bis.close();
// 创建对象
User user = new User();
user.setName("张三");
user.setAge(18);
user.setBirthday(new Date());
user.setDesc("2016年4月,布鲁克斯在接受韩国媒体“民众之声”采访,被问及“继引进‘爱国者’导弹、‘萨德’系统和宙斯盾系统后,韩国安保防御还需要什么”时,他表示,为加强对朝鲜发射弹道导弹的预警和追踪,同时迅速、全方位地共享相关信息,必须加强韩美两国在弹道导弹防御方面的“合作运营能力”。布鲁克斯还强调,韩方应该加大反导武器的购买力度,提升自身防御能力的同时,也应为韩美同盟反导体系做贡献,这也符合韩美战时作战指挥权转换的条件。");
user.setPhoto(photo);
// 保存?
Session session = sessionFactory.openSession();// 打开一个新的Session
Transaction tx = session.beginTransaction();// 开始事务
session.save(user);
tx.commit();// 提交事务
session.close();// 关闭session 释放资源
}
/**
* 获取
*
* @throws Exception
*/
@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.getId());
System.out.println(user.getName());
System.out.println(user.getAge());
System.out.println(user.getBirthday());
System.out.println(user.getDesc());
System.out.println(user.getPhoto());
OutputStream os = new FileOutputStream("copy.jpg");
os.write(user.getPhoto());
os.close();
tx.commit();
session.close();
}
}
版权声明:本文为L1585931143原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。