1.利用ThreadLocal来管理Session
2.Session的save和persist方法的使用
3.为数据库表添加blob字段
4.修改映射文件和bean文件增加image属性的代码
5.创建带Blob类型字段的对象的保存方法
6.创建获得Blob字段的数据并把图片保存到某个路径下方法
7.使用hibernate对数据库表中blob字段进行操作
8.为数据库表添加clob字段
9.修改映射文件和bean文件增加description属性的代码
10.创建带Clob类型字段的对象的保存方法
11.创建获得Clob字段的数据并把数据保存到String变量中
12.测试clob功能
13.Oracle中创建Users表和Images表
14.通过hibernate实现数据操作
15.hibernate的List集合映射(一)
16.hibernate的List集合映射(二)
17.hibernate的List的集合映射(三)
18hibernate的Map集合映射(一)
19hibernate的Map集合映射(二)
20Hibernate的Map集合映射(三)
LoginDAO.java
package com.test;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class LoginDAO {
private Session session = null;
private Transaction tran = null;
public LoginDAO() {
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
this.session = factory.openSession();
}
public void save(Login login) {
try {
tran = this.session.beginTransaction();
this.session.save(login);
// 事物提交
tran.commit();
} catch (RuntimeException re) {
if(null != tran){tran.rollback();}
throw re;
}finally{
System.out.println("用户信息保存成功!");
this.session.close();
}
}
public void update(Login login) {
tran = this.session.beginTransaction();
this.session.update(login);
tran.commit();
System.out.println("用户信息修改成功!");
this.session.close();
}
public void delete(Login login) {
tran = this.session.beginTransaction();
this.session.delete(login);
tran.commit();
System.out.println("用户信息删除成功!");
this.session.close();
}
public Login queryById(String name) {
Login login = null;
String hql = "FROM Login AS l WHERE l.username=?";
Query query = this.session.createQuery(hql);
query.setString(0, name);
Iterator iter = query.list().iterator();
if (iter.hasNext()) {
login = (Login) iter.next();
}
System.out.println("主键精确查询:");
this.session.close();
return login;
}
public List queryAll() {
List list = null;
String hql = "FROM Login as l";
Query query = this.session.createQuery(hql);
list = query.list();
System.out.println("查询所有记录:");
this.session.close();
return list;
}
public List queryLike(String name) {
List list = null;
String hql = "FROM Login as l WHERE l.username like ?";
Query query = this.session.createQuery(hql);
query.setString(0, "%" + name + "%");
list = query.list();
System.out.println("模糊查询:");
this.session.close();
return list;
}
}
TDLoginDAO
package com.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class TDLoginDAO {
private Session session = null;
private Transaction tran = null;
private static final ThreadLocal s=new ThreadLocal();
public TDLoginDAO() {
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
// this.session = (Session)s.get();
// if(session==null){
// this.session=factory.openSession();
// s.set(this.session);
// }
this.session = factory.getCurrentSession();
}
public void save(Login login) {
try {
tran = this.session.beginTransaction();
this.session.save(login);
login.setUsername("小明");
// 事物提交
tran.commit();
} catch (RuntimeException re) {
if(null != tran){tran.rollback();}
throw re;
}finally{
System.out.println("用户信息保存成功!");
// this.session.close();
}
}
public void delete() {
tran = this.session.beginTransaction();
Login login= (Login)this.session.load(Login.class, new Integer(1));
this.session.delete(login);
tran.commit();
System.out.println("用户信息删除成功!");
// this.session.close();
}
}
blob
<property name="image" type="blob" column="image"/>
BlobLoginDAO
package com.test;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.SQLException;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class BlobLoginDAO {
private Session session = null;
private Transaction tran = null;
public BlobLoginDAO() {
//初始化Hibernate
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
this.session = factory.getCurrentSession();
}
public int saveLogin(String imagename,Login login) throws Exception{
//读取图片的二进制数据
InputStream in = this.getClass().getResourceAsStream(imagename);
byte[] buffer = new byte[in.available()];
in.read(buffer);
in.close();
tran = session.beginTransaction();
login.setImage(Hibernate.createBlob(buffer));
session.save(login);
tran.commit();
return login.getId();
}
public void getBlob(int id,String url) throws Exception{
tran = session.beginTransaction();
Login login=(Login)session.get(Login.class, id);
tran.commit();
Blob image=login.getImage();
InputStream in = image.getBinaryStream();
FileOutputStream fout = new FileOutputStream(url);
int b=-1;
while((b=in.read())!=-1){
fout.write(b);
}
fout.close();
in.close();
}
}
clob
<property name="description" type="clob" column="description"/>
package com.test;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.Reader;
import java.sql.Clob;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class ClobLoginDAO {
private Session session = null;
private Transaction tran = null;
public ClobLoginDAO() {
//初始化Hibernate
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
this.session = factory.getCurrentSession();
}
public int saveLogin(String description,Login login) throws Exception{
//读取图片的二进制数据
tran = session.beginTransaction();
login.setDescription(Hibernate.createClob(description));
session.save(login);
tran.commit();
return login.getId();
}
public String getClob(int id) throws Exception{
tran = session.beginTransaction();
Login login=(Login)session.get(Login.class, id);
tran.commit();
Clob clob=(Clob)login.getDescription();
Reader rd =clob.getCharacterStream();
BufferedReader br=new BufferedReader(rd);
String description=br.readLine();
return description;
}
}
set
<set name="images" table="IMAGES" lazy="true">
<key column="USERID"/>
<element column="FILENAME" type="string" not-null="true"/>
</set>
package com.test.set;
import java.util.*;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class UsersDAO {
private Session session = null;
private Transaction tran = null;
public UsersDAO() {
//初始化Hibernate
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
this.session = factory.getCurrentSession();
}
public int saveUsers(Users user){
tran = session.beginTransaction();
session.save(user);
tran.commit();
return user.getId();
}
public Users loadUsers(int id){
tran = this.session.beginTransaction();
Users user= (Users)this.session.load(Users.class, id);
return user;
}
public void printUsers(Users user){
System.out.println(user.getImages().getClass().getName());
Iterator it=user.getImages().iterator();
while(it.hasNext()){
String filename=(String)it.next();
System.out.println(user.getUsername()+" "+filename);
}
}
}
list
<!-- 演示映射List时使用 -->
<list name="images" table="IMAGES" lazy="true">
<key column="USERID"/>
<list-index column="POSITION"/>
<element column="FILENAME" type="string" not-null="true"/>
</list>
package com.test.list;
import java.sql.Blob;
import java.util.*;
public class ListUsers {
private int id;
private String username;
private List images = new ArrayList(); //演示映射List时使用
private int position; //演示映射List时使用
/**
* @return the position
*/
public int getPosition() {
return position;
}
/**
* @param position the position to set
*/
public void setPosition(int position) {
this.position = position;
}
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the images
*/
public List getImages() {
return images;
}
public void setImages(List images) {
this.images = images;
}
}
map
<map name="images" table="IMAGES" lazy="true">
<key column="USERID"/>
<map-key column="IMAGE_NAME" type="string"/>
<element column="FILENAME" type="string" not-null="true"/>
</map>
package com.test.map;
import java.sql.Blob;
import java.util.*;
public class MapUsers {
private int id;
private String username;
private Map images = new HashMap();
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the images
*/
public Map getImages() {
return images;
}
public void setImages(Map images) {
this.images = images;
}
}