hibernate课程 初探单表映射3-3 对象类型
本节简介:
1 简介对象类型(重点是音视频blob类型)
2 demo(对图片的写入数据库与读取)
1 简介对象类型
映射类型 java类型 标准sql类型 mysql类型 oracle类型
binary byte[] varchar blob blob
text(大文本类型) java.lang.String clob text clob
clob(大文本类型) java.sql.Clob clob text clob
blob(二进制数据类型) java.sql.Blob blob blob blog 用于存储图片,音频,视频等
2 demo
hibernate.cft.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/bendi</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource = "Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Student.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">
<!-- Generated 2017-12-20 0:42:12 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.ddwei.student.Student" table="STUDENT">
<id name="pid" type="int">
<column name="PID" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="sex" type="java.lang.String">
<column name="SEX" />
</property>
<property name="birthday" type="date">
<!-- <property name="birthday" type="time"> -->
<!-- <property name="birthday" type="timestamp"> -->
<column name="BIRTHDAY" />
</property>
<property name="address" type="java.lang.String">
<column name="ADDRESS" />
</property>
<property name="picture" type="java.sql.Blob">
<column name="Picture" />
</property>
</class>
</hibernate-mapping>
Student.java
package com.ddwei.student;
import java.sql.Blob; import java.util.Date;
public class Student {
// java beans 的设计原则 /** * 1 公有的类 2 共有不带参数构造方法 3 私有属性 4 属性setter/getter方法 */
private int pid;// 学号 private String name;// 姓名 private String sex;// 性别 private Date birthday;// 出生日期 private String address;// 家庭地址 private Blob picture;//相片
public Student() {
}
public Student(int pid, String name, String sex, Date birthday, String address) { // super(); this.pid = pid; this.name = name; this.sex = sex; this.birthday = birthday; this.address = address; }
@Override public String toString() { return "Student [pid=" + pid + ", name=" + name + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; }
public int getPid() { return pid; }
public void setPid(int pid) { this.pid = pid; }
public Date getBirthday() { return birthday; }
public void setBirthday(Date birthday) { this.birthday = birthday; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getSex() { return sex; }
public void setSex(String sex) { this.sex = sex; }
public Blob getPicture() { return picture; }
public void setPicture(Blob picture) { this.picture = picture; }
}
StudentTest.java
package hibernate_001;
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.sql.SQLException; import java.util.Date;
import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test;
import com.ddwei.student.Student;
public class StudentTest { private SessionFactory sessionFactory; private Session session; private Transaction trasaction; @Test public void testSaveStudent(){ // Student student =new Student(1,"周恩来","男",new Date(),"绍兴");//创建学生对象 Student student = new Student(); // student.setPid(100); student.setName("秦始皇"); student.setSex("男"); student.setBirthday(new Date()); student.setAddress("阿房宫"); session.save(student);//会话保存学生对象进入数据库 } /** * 图片(二进制)写入数据库 * @throws IOException */ @Test public void testWriteBlob() throws IOException{ Student student =new Student(1,"周恩来","男",new Date(),"绍兴");//创建学生对象 //1 先获取照片文件: File.separator 是文件分隔符 File file = new File("g:"+File.separator+"tupian"+File.separator+"psb.jpg"); //2 获得文杰输入流(字节流) InputStream input = new FileInputStream(file); //3 创建一个blob对象 input.available()输入流的长度 Blob picture = Hibernate.getLobCreator(session).createBlob(input, input.available()); //4 设置照片属性 student.setPicture(picture); //5 保存学生 session.save(student); } /** * 图片(二进制)读取 * @throws SQLException * @throws IOException */ @Test public void testReadBlob() throws SQLException, IOException{ //1 加载学生对象 Student student = (Student) session.get(Student.class, 1); // System.out.println(student.getName()); //2 获得Blob对象 Blob picture = student.getPicture(); //3 获得输入流 InputStream input = picture.getBinaryStream(); //4 获得文件 File file = new File("d:"+File.separator+"a.jpg"); //5 获得输出流 OutputStream output = new FileOutputStream(file); //6 创建缓冲区 byte[] buff = new byte[input.available()]; //7 把输入流读取到缓冲区 input.read(buff); //8 输出流写入缓冲区的内容 output.write(buff); //9 关闭输入流和输出流 input.close(); output.close(); } @Before public void init(){ //1 创建配置对象 Configuration config = new Configuration().configure(); //2 创建服务对象 ServiceRegistry serviceRe = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); //3 创建会话工厂 sessionFactory = config.buildSessionFactory(serviceRe); //4 打开会话 session = sessionFactory.openSession(); //5 创建事务 trasaction = session.beginTransaction(); } @After public void destroy(){ trasaction.commit(); session.close(); sessionFactory.close(); }
}
hibernate课程 初探单表映射3-3 对象类型的更多相关文章
- hibernate课程 初探单表映射4-1 课程总结
ORM是一种面向对象编程的方法,用这种方法来避免写数据库底层语言sql语句,这样有利于java的跨平台,扩展.维护.而hirenate是ORM的一种框架 hirbernate开发基本步骤编写配置文档h ...
- hibernate课程 初探单表映射3-1 hibernate单表操作简介
本章简介: 1 单一主键 2 基本类型 3 对象类型 4 组件属性 5 单表操作CRUD实例
- hibernate课程 初探单表映射1-3 hibernate简介
1 hibernate定义: Java领域一项开源的orm框架技术: hibernate对jdbc进行轻量级的封装. hibernate 作为持久层存在.就是通过对象关系映射把项目中的对象持久化到数据 ...
- hibernate课程 初探单表映射1-9 创建关系映射文件
创建关系映射文件:(把实体类映射成一个表) 1 右键src==>new==>other==>hibernate==>hbm.xml==>Student==>Fini ...
- hibernate课程 初探单表映射2-7 hbm配置文件常用设置
本节主要简介hbm配置文件以下内容: 1 mapping标签 2 class标签 3 id标签 1 hibbernate-mapping标签 schema 模式名称 catalog 目录名称 defa ...
- hibernate课程 初探单表映射2-4 transaction简介
1 hibernate是非自动提交.如果transaction不写的话,会只创建表结构而不插入语句. 如果不写transaction而想实现插入的功能的话,需要重写session的dowork方法 ...
- hibernate课程 初探单表映射2-2 hibernate常用配置
1 hibernate.cfg.xml常用配置: show_sql 控制台打印sql format_sql 控制台将sql排版 hbm2ddl.auto: create 删除表结构,重新建表并插值 u ...
- hibernate课程 初探单表映射2-1 hibernate进阶 本章简介
本章简介,主要讲5大块的内容 1 hibernate.cfg.xml的配置 2 session 的简介 3 transaction的简介 4 session的详解 5 对象关系映射常用配置
- hibernate课程 初探单表映射1-11 通过hibernate API访问编写第一个小例子
hibernate 业务流程 1 创建配置对象 Configuration config = new Configuration().configure(); 2 创建服务注册对象 Service ...
随机推荐
- centos6 搭建IPSEC
http://www.maxwhale.com/how-to-install-l2tp-vpn-on-centos/ http://blog.earth-works.com/2013/02/22/ho ...
- 树莓派 Learning 001 装机 ---之 1 安装NOOBS系统
树莓派安装NOOBS系统 (使用的树莓派板卡型号:Raspberry Pi 2 Model B V1.1)(板卡的型号在板子正面的丝印层上印着,你可以看到.) RASPBERRY PI 2 MODEL ...
- Jmeter JDBC Request的sql语句不支持;号
Jmeter JDBC Request的sql语句不支持:号,如果要批量插入数据,则需要使用以下方式 INSERT INTO bank_info( `id`, `bank_code`, `bank_n ...
- 1、Question: prep_reads.info vs. align_summary.txt
###参考:https://www.biostars.org/p/163356/ used TopHat to map my reads against their relative referenc ...
- 第5季-小试牛刀-项目开发\阶段2-新手上路\项目-移动物体监控系统\Sprint0-产品设计与规划
lesson1---产品功能展示 先完成准备阶段,准备阶段要做的事情: a.项目经理选择团队, b.根据项目用户需求以及同类型的实物,制定产品功能列表 c.根据功能的难易程度,制定迭代周期以及在每周期 ...
- 1.1 sql注入分类与详解
1.基于报错的 SQL 盲注------构造 payload 让信息通过错误提示回显出来 这里来讲一下报错注入的原理(floor型爆错注入): 0x01:报错过程: 1.rand()用于产生一 ...
- 浅析C#中的事件
讲过了委托,不得不讲事件. 事件基于委托,为委托提供了一种发布/订阅机制. 在发生其他类或对象关注的事情时,类或对象可通过事件通知它们.发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为 ...
- ERROR 1010 (HY000): Error dropping database (can't rmdir './nsd', errno: 39)
在删除数据库的时候报标题所示错误 mysql> drop database test; ERROR 1010 (HY000): Error dropping database (can't rm ...
- 清北刷题冲刺 11-03 p.m
三向城 #include<iostream> #include<cstdio> using namespace std; int n,x,y; int main(){ freo ...
- bzoj1934: [Shoi2007]Vote 善意的投票(最小割)
传送门 考虑源点为同意,汇点为反对,那么只要源点向同意的连边,不同意的向汇点连边,求个最小割就是答案 然后考虑朋友之间怎么办,我们令朋友之间连双向边.这样不管怎么割都能对应一种选择情况.那么还是求一个 ...