2Hibernate略知一二

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;
	}

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值