创建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";
}
}