Person .java
package www.csdn.net.blank.bean;
import java.io.Serializable;
import java.sql.Blob;
import java.sql.Clob;
public class Person implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private Blob image;
private Clob intro;
public Person() {
super();
}
public Person(Integer id, Blob image, Clob intro) {
super();
this.id = id;
this.image = image;
this.intro = intro;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Blob getImage() {
return image;
}
public void setImage(Blob image) {
this.image = image;
}
public Clob getIntro() {
return intro;
}
public void setIntro(Clob intro) {
this.intro = intro;
}
}
Person.hbm.xml
<?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="www.csdn.net.blank.bean">
<!-- name代表对应哪个类,table表名 -->
<class name="Person" table="person">
<id name="id" column="id">
<!-- 主键的生成策略 -->
<generator class="native"/>
</id>
<!-- name对应类中的字段,表中的字段,
类型type="blob"是hibernate中的写法,type="java.sql.Blob "是java中的写法-->
<property name="image" column="image" type="blob"/>
<property name="intro" column="intro" type="clob"/>
</class>
</hibernate-mapping>
BaseDao.java
package www.csdn.net.blank.dao;
import java.io.Serializable;
import java.util.List;
@SuppressWarnings("rawtypes")
public interface BaseDao {
/**
* 保存实体对象
*
* @param entity
*/
public void saveObject(Object entity);
/**
* 更新实体对象
*
* @param entity
*/
public void updateObject(Object entity);
/**
* 删除实体对象
*
* @param entity
*/
public void deleteObject(Object entity);
/**
* 根据id删除实体对象
*
* @param clazz
* @param id
*/
public void deleteObjectById(Class clazz,Serializable id);
/**
* 根据id查询实体对象
*
* @param clazz
* @param id
* @return
*/
public Object loadObjectById(Class clazz, Serializable id);
/**
* 根据id查询实体对象
*
* @param clazz
* @param id
* @return
*/
public Object getObjectById(Class clazz, Serializable id);
/**
* 查询所有的操作
*
* @param clazz
* @return
*/
public List getObjects(Class clazz);
}
BaseDaoImpl.java
package www.csdn.net.blank.dao.impl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import www.csdn.net.blank.dao.BaseDao;
import www.csdn.net.blank.util.BaseHibernateDaoImpl;
@SuppressWarnings("rawtypes")
public class BaseDaoImpl extends BaseHibernateDaoImpl implements BaseDao {
@Override
public void saveObject(Object entity) {
// 获取session对象
Session session = getSessionObject();
// 打开事务
Transaction ts = session.beginTransaction();
try {
// 保存
session.save(entity);
// 提交事务
ts.commit();
} catch (Exception e) {
ts.rollback();
}
}
@Override
public void updateObject(Object entity) {
// 获取session对象
Session session = getSessionObject();
// 打开事务
Transaction ts = session.beginTransaction();
try {
// 保存
session.update(entity);
// 提交事务
ts.commit();
} catch (Exception e) {
ts.rollback();
}
}
@Override
public void deleteObject(Object entity) {
// 获取session对象
Session session = getSessionObject();
// 打开事务
Transaction ts = session.beginTransaction();
try {
// 保存
session.delete(entity);
// 提交事务
ts.commit();
} catch (Exception e) {
ts.rollback();
}
}
@Override
public void deleteObjectById(Class clazz, Serializable id) {
// 获取session对象
Session session = getSessionObject();
// 打开事务
Transaction ts = session.beginTransaction();
try {
// 保存
session.delete(getObjectById(clazz, id));
// 提交事务
ts.commit();
} catch (Exception e) {
ts.rollback();
}
}
@Override
public Object loadObjectById(Class clazz, Serializable id) {
return null;
}
@Override
public Object getObjectById(Class clazz, Serializable id) {
Object obj = null;
Session session = getSessionObject();
Transaction ts = session.beginTransaction();
try {
obj = session.get(clazz, id);
ts.commit();
} catch (Exception e) {
ts.rollback();
}
return obj;
}
@Override
public List getObjects(Class clazz) {
List list = new ArrayList();
Session session = getSessionObject();
Transaction ts = session.beginTransaction();
try {
list = session.createQuery("from "+clazz.getName()).list();
ts.commit();
} catch (Exception e) {
ts.rollback();
}
return list;
}
}
HiberUtil.java
package www.csdn.net.blank.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HiberUtil {
static Configuration cfg;
static ServiceRegistry serviceRegistry;
static SessionFactory sessionFactory;
static{
//创建Configuration对象 调用.configure()方法 ,默认class/hibernate.cfg.xml
cfg = new Configuration().configure();
//创建服务对象
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
//创建sessionFactory工厂
sessionFactory = cfg.buildSessionFactory(serviceRegistry);
}
/**
* 获取session对象
* @return
*/
public static Session openSession(){
return sessionFactory.getCurrentSession();
}
}
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>
<!-- 数据库的驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 数据库的URL -->
<property name="connection.url">
jdbc:mysql://localhost:3306/hiber3?useUincode=true&characterEncoding=UTF-8
</property>
<!-- 数据库的用户名 -->
<property name="connection.username">root</property>
<!-- 数据库的密码 -->
<property name="connection.password">root</property>
<!-- 数据库的方言 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- 显示操作的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式sql语句 -->
<property name="hibernate.format_sql">false</property>
<!-- 自动创建和更新表结构 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 映射文件引入 -->
<mapping resource="www/csdn/net/blank/bean/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
PersonTest.java
package www.csdn.net.blank.junit;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import org.hibernate.Hibernate;
import org.junit.Test;
import www.csdn.net.blank.bean.Person;
import www.csdn.net.blank.dao.BaseDao;
import www.csdn.net.blank.dao.impl.BaseDaoImpl;
import www.csdn.net.blank.util.HiberUtil;
public class PersonTest {
private BaseDao baseDao = new BaseDaoImpl();
@Test
public void save() throws Exception {
Person person = new Person();
File file = new File("F:\\资料\\Pictures\\人物 (2)\\200.jpg");
FileInputStream fis = new FileInputStream(file);
File file1 = new File(
"D:\\闫梅\\csdn\\hibernate课程\\代码\\hiber7=1\\src\\自定义标签.txt");
Reader reader = new FileReader(file1);
//第一种方法: 针对 session 是通过sessionFactory.getCurrentSession(); 处理操作
person.setImage(Hibernate.getLobCreator(HiberUtil.openSession())
.createBlob(fis, file.length()));
person.setIntro(Hibernate.getLobCreator(HiberUtil.openSession())
.createClob(reader, file1.length()));
//第二种方法:必须开启事务
/*Session session = HiberUtil.openSession();
//Transaction ts = session.beginTransaction();
person.setImage(session.getLobHelper().createBlob(fis, file.length()));
person.setDescription(session.getLobHelper().createClob(reader,file1.length()));
//ts.commit();
*/
baseDao.saveObject(person);
}
@Test
public void getObject() throws Exception{
//根据id查询对象
Person person=(Person) baseDao.getObjectById(Person.class, 1);
//判读对象是否为null
if(person!=null){
//获取Blob字段
Blob blob=person.getImage();
//根据blob对象的getBinaryStream()方法 获取输入流 对象
InputStream is=blob.getBinaryStream();
//定义写出的文件
File file=new File("D:\\12.jpg");
//写出的输出流
FileOutputStream fos=new FileOutputStream(file);
//缓冲区
byte[] buffer=new byte[1024];
//读取的长度
int len=0;
//循环读取,直到文件结尾
while((len=is.read(buffer))!=-1){
//写出
fos.write(buffer,0,len);
}
//关闭流
fos.close();
is.close();
//获取Clob字段
Clob clob=person.getIntro();
//根据clob对象的getCharacterStream() 获取字符输入流
Reader r=clob.getCharacterStream();
//定义写出的文件
File file1=new File("D:\\12.txt");
//创建输出流对象
FileWriter fileWriter=new FileWriter(file1);
//缓冲区
char[] cbuf=new char[1024];
//读取长度
int len1=0;
//循环读取,直到文件结尾
while((len1=r.read(cbuf))!=-1){
//写出
fileWriter.write(cbuf, 0, len1);
}
//关闭流
fileWriter.close();
r.close();
}
}
}
执行save方法后的结果:执行getObject方法后的结果: