HibernateDemo

本文详细阐述了如何利用Hibernate框架构建一个社区数据管理流程,包括数据映射、辅助工具类、DAO接口及其实现、服务接口及其实现,并通过HomeController进行测试。主要涉及了对象关系映射(ORM)、持久化操作、数据库交互等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建HibernateDemo 项目,涉及到数据关系映射,先放一张目录结构:


1.编写pojo映射类 Community.java(注解实现映射)

package minicity.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;


@Entity
@Table(name="COMMUNITY")
public class Community implements Serializable {//用注解的方式实现O-R mapping
	
	//private static final long serialVersionUID = 1L;  
	@Id  
    @Column(length=32) 
	private int id;//community id
	
	@Column(length=32) 
	private String name;//community name
    
	@Column(length=32) 
	private int roomsnum;  //numbers of room
	
	@Column(length=32) 
	private double signrate; // signrate of community
	
	
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
    public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public int getRoomsnum() {
		return roomsnum;
	}
	
	public void setRoomsnum(int roomsnum) {
		this.roomsnum = roomsnum;
	}
	
	public double getSignrate() {
		return signrate;
	}
	
	public void setSignrate(double signrate) {
		this.signrate = signrate;
	}
	
	/*Constructor*/
	public Community() {//无参的构造方法
		// TODO Auto-generated constructor stub
	}

}
2.编写辅助工具类 HibernateUtil.java

         要启动Hibernate需要创建一个org.hibernate.SessionFactory对象。org.hibernate.SessionFactory是一个线程安全的对象,只能被实例化一次。使用org.hibernate.SessionFactory可以获得org.hibernate.Sessiond的一个或多个实例。

         创建一个辅助类HibernateUtil,它既负责Hibernate的启动,也负责完成存储和访问SessionFactory的工作。基本实现代码:

package minicity.hibernateutil;

//import org.hibernate.HibernateException;  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
//import org.hibernate.Transaction;  
import org.hibernate.cfg.Configuration;  

public final class HibernateUtil {  
    
    private static SessionFactory sessionFactory;  
      
    /** 
     * 私有的构造方法,这样就可以防止实例化这个类 
     */  
    private HibernateUtil(){}  
      
    /** 
     * 因为读取配置文件和映射文件很耗时间,所以这段代码块定义成静态的,那么只加载一次就可以了 
     */  
    static{  
        Configuration config=new Configuration();  
        config.configure();//读取配置文件,默认的是读取hibernate.cfg.xml,若文件名不是这个,也可以以参数形式指定  
        sessionFactory=config.buildSessionFactory();  
    }  
  
    public static SessionFactory getSessionFactory() {  
        return sessionFactory;  
    }  
      
    public static Session getSession(){  
        return sessionFactory.openSession();  
    }  
}  

3.编写DAO接口 CommunityDao.java

package minicity.dao;

import minicity.model.Community;


/*创建Community接口*/
public interface CommunityDao {
	
	Community findCommunity(int id);
	
	void saveCommunity(Community community);
	
	void updateCommunity(Community community);
	
	void deleteCommunity(Community community);

}

4.编写DAO实现类 CommunityDaoImpl.java


package minicity.dao.impl;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import minicity.dao.CommunityDao;
import minicity.model.Community;

import org.springframework.stereotype.Repository;

@Repository
public class CommunityDaoImpl implements CommunityDao {
	
	
	 @PersistenceContext  
	 private EntityManager em;

	 public void saveCommunity(Community community) {
		
		 em.persist(community);		 
		
	}
	 
	 public Community findCommunity(int id ){
		 
		 Community community1 = em.find(Community.class, id);
		 return community1;
	 }
	 
	 
	public void updateCommunity(Community community) {
	
		em.merge(community);
	}

	public void deleteCommunity(Community community) {
		
		em.remove(em.merge(community));
		/*Session已经关闭 ,
		用merge()将Detached instance em 绑定到当前的 Session*/
		
		/*不能写成,merge后的instance依然是 Detached instance
		em.merge(community);
		em.remove(community);
		*/
	}
	
}

5. 编写服务类接口  ICommunityService.java


package minicity.service;

import minicity.model.Community;

public interface ICommubityService {
	
	public Community findCommunity(int id);
	
	public void saveCommunity(Community com);
	
	public void updateCommunity(Community com);

	public void deleteCommunity(Community com);
}

6.编写服务类实现CommunityServiceImpl

package minicity.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import minicity.dao.CommunityDao;
import minicity.model.Community;

@Service
public class CommunityServiceImpl implements ICommubityService{
	
	@Resource
	private CommunityDao communityDao;
	
	public void saveCommunity(Community com){
		communityDao.saveCommunity(com);
	}
	
	public Community findCommunity(int id){
		
		return communityDao.findCommunity(id);
	}
	
	public void updateCommunity(Community com){
		communityDao.updateCommunity(com);
	}
	
	public void deleteCommunity(Community com){
		communityDao.deleteCommunity(com);
	}
	
	
}


7  编写HomeController.java 测试一下


package minicity.controller;

import java.util.Map;
import java.util.jar.Attributes.Name;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import minicity.model.Community;
import minicity.service.ICommubityService;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

	@Resource
	private ICommubityService icommunityService;

	@RequestMapping(value = "/home")
	public String index(ModelMap map) {
		return "index.ftl";
	}

	@RequestMapping(value = "/savecommunity")
	public String testSaveCommunity() {

		Community com = new Community();
		com.setName("6");
		com.setRoomsnum(6);
		com.setSignrate(0.06);
		icommunityService.saveCommunity(com);

		return"index.ftl";
	}

	@RequestMapping(value = "/findcommunity")
	public String testFindCommunity() {

		Community com = new Community();
		com = icommunityService.findCommunity(3);
		
		  if(com != null)
		  { 
			  System.out.println(com.getSignrate());
		  }    
		  return "index.ftl";
	}

	@RequestMapping(value = "/updatecommunity")
	public String testUpdateCommunity() {

		Community com = new Community();
		com = icommunityService.findCommunity(5);
		com.setName("55");
		icommunityService.updateCommunity(com);
		return "index.ftl";

	}

	@RequestMapping(value = "/deletecommunity")
	public String testDeleteCommunity() {

		Community com = new Community();
		com = icommunityService.findCommunity(1);
		icommunityService.deleteCommunity(com);
		return "index.ftl";
	}
	
	@RequestMapping(value="/modelmap")
	public String getModelMap(String param,ModelMap modelmap){
		
		Community com = new Community();
		com = icommunityService.findCommunity(2);
		System.out.println(com.getSignrate());
		modelmap.addAttribute("community", com);
		return "index.ftl";
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值