利用Hibernate实现简单的增,删,改,查,分页,模糊查询以及上传图片

初学hibrenate,利用它实现常用的增删改查等基本操作。
注:代码中所有sess=Hilbernateutil.getSession();都是用的工具类,
算了,工具类代码也贴上:
在这里插入图片描述
增加:我采用的是学生类。
在这里插入图片描述
浏览:
/获取所有学生
@Override
public List getAllStudent() {
Session sess =null;
Transaction tran=null;
try{

	//得到session对象
	 sess=Hilbernateutil.getSession();
	//利用Hibernate操作数据库,都要开启事务,得到事务对象
	 tran=sess.beginTransaction();
	//开启事务
	//添加对象到数据库
		Query query=sess.createQuery("FROM Student");
		List lis=query.list();
		return lis;	
}catch(Exception e){
	throw new RuntimeException(e);
}finally{	//提交事务	
tran.commit();
	//关闭Session
	sess.close();
}
	
}
删除
	@Override
	public void deleteSudent(int id) {
		Session sess =null;
		Transaction tran=null;
	try{	
		 sess=Hilbernateutil.getSession();
		//利用Hibernate操作数据库,都要开启事务,得到事务对象
		 tran=sess.beginTransaction();
		 //先查询这个ID存在不,如果存在再删除它
		 Object oh=sess.get(Student.class, id);
		 if(oh!=null){
			 sess.delete(oh);
		 }
	}
	catch(Exception e){
		throw new RuntimeException(e);
	}
	finally{
		//提交事务
		tran.commit();
		//关闭对象
		sess.close();
	}
		
	}

修改:修改这里记得学生对象需要赋值一个id,就是主键,不然会报错,查不到
@Override
public void updateStudent(Student stu) {
Session sess =null;
Transaction tran=null;
try{
//加载Student的隐射文件

	//创建session工厂对象
	
	//得到session对象
	 sess=Hilbernateutil.getSession();;
	//利用Hibernate操作数据库,都要开启事务,得到事务对象
	 tran=sess.beginTransaction();
	
	sess.update(stu);
	
}
catch(Exception e){
	throw new RuntimeException(e);
}
finally{
	//提交事务
	tran.commit();
	//关闭对象
	sess.close();
}
	
}
//检索学生:注释掉的部分是另一种方式,并不是错的,只是因为直接return 哪一行的方式适合不了解 sql语句的,就是简单一点,
	@Override
	public Student queryStudent(int pid) {
		
		Session session =null;
		Transaction tran=null;
	try{	
		
		//利用Hibernate操作数据库,都要开启事务,得到事务对象
		session=Hilbernateutil.getSession();
		//开启事务
		tran=session.beginTransaction();
			//Query query=session.get("from Student where pid=?");
		//Object stu=sess.get(Student.class,id);
			//query.setParameter(0, id);
			//Student stu=new Student();
	
			return  (Student) session.get(Student.class, pid);	
	}catch(Exception e){
		throw new RuntimeException(e);
	}finally{
		
		tran.commit();
	
		//关闭Session
		session.close();
	}
	
	}
//分页数据 别嫌方法名乱写,因为只是临时想不到了用啥了。。。
	@Override
	public List<Student> fenyeStudent(int currenpage, int pagesize) {
		Session session=null;
		Transaction tx=null;
		try{
		session =Hilbernateutil.getSession();//获取事务对象
		tx=session.beginTransaction();//开启事务
		Query query=session.createQuery("from Student");
		//设置开始的地方
		query.setFirstResult((currenpage-1)*pagesize);
		//设置最大结果,就是每页显示多少
		query.setMaxResults(pagesize);
		return query.list();
		}catch(Exception e){
			throw new RuntimeException(e);
		}
		finally{
			tx.commit();
			session.close();
		}
	}
//这个是模糊查询
	@Override
	public List<Student> likeStudent(String name) {
		Session session=null;
		Transaction tx=null;
		try {
			
			session =Hilbernateutil.getSession();
				tx=session.beginTransaction();
				String hql=" from Student where pname=?";//hql的语句检索
				Query quer=session.createQuery(hql);//检索需要的这个query
				quer.setParameter(0, name);//这个是赋值,数据库从0开始的
				
			return quer.list();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}finally{
			tx.commit();
			session.close();
		}
	}

上面是基本的增删改查,顺便扩展说一下数据库存储图片,因为之前存数据库都是把图片路径。名字放进去,而这里是把图片整个放进去,就是图片本身(当然放进去是个分割一堆乱起八糟的二进制之类的数字的图片的)如果你要存图片,那么类映射需要这么写,加一个binary类型,长度这个把我是尽量放大了,我觉得一个图片没多大把。。。

然后是图片的上传给数据库,之前有学过存文件的应该知道,当时用的是解析工厂之类的,老麻烦的一串,
这里传图片用的是流,
FileInputStream fl;//文件输入流,
byte[] photo=null;//放照片。转2进制
try {
fl=new FileInputStream(“d:\1.png”);//这里是读取目标的图片
photo=new byte[fl.available()];//获取文件大小
fl.read(photo);//从输入流中读取数据存放到字节数组照片当中
System.out.println(photo);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
stu.setPhoto(photo);//把照片赋值
这顿操作弄完图片就变成支离破碎的一堆了,然后就可以调用方法放入数据库了,
当然我们用浏览方法获取到的也是一堆数字,乱码,
要想看只能采用流再把它导到本地看,
FileOutputStream fos = new FileOutputStream(“d:\2.jpg”);//写入目标位置

		fos.write(stu.getPhoto()); //获取照片并写入指定位置。
		fos.close();  //关闭这个六
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	这轮操作弄完就可以看到一张你上传的图片,也算是另类的复制粘贴把。。。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值