[Spring+Hibernate系列]2.项目介绍与首个MVC实例

来源:互联网 发布:阿里云os系统电脑版 编辑:程序博客网 时间:2024/06/05 20:25

1. 项目介绍

简单起见: 项目背景定义为一个学生成绩查询系统。
涉及到的实体类:
学生
老师
课程
学生课程成绩(关系表)


涉及到的操作:
学生信息查询、增加、修改、删除
老师信息查询、增加、修改、删除
老师信息查询、增加、修改、删除
学生课程成绩的查询、增加、修改、删除



2. 系统设计

1)这里仅实现一个添加Student 的简单功能,达成使框架可以运行起来的目的。
    代码部分有
    前端: 一个输入Student 的页面
    后端: 处理输入信息并在数据库添加一笔Student 信息


2)系统简单, 只拆分为基本的共用模块和工作模块两部分。
每个模块的目录按照
model, controller,dao, service 四个
具体里面放什么,一目了然了


3)数据库映射
这里使用JPA注解实现类和Db table 的映射, 不需要额外定义xml。


3. 系统实现


1)  前端页面. student_input.jsp
放置于 WebContent 下



内容尽量简化:(path 变量实际可以取变量替换)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%String path = "http://localhost:8080/springHibernateDemo/";%><html><head></head><body><form  name="form" method="post"action="http://localhost:8080/springHibernateDemo/work/studentController/save">ID: <input type="text" name="studentId"  value=""/><br>English Name:<input type="text" name="engName"  value=""/><br>Chinese Name:<input type="text" name="chiName"  value=""/><br>Gender:<input type="text" name="gender"  value=""/><br>Age:<input type="text" name="age"  value=""/><br><input type="submit" value="Add"/></form></body></html>

2)后端代码
基本模组代码结构:



BaseController.java (目前是空的)

package com.oscar999.base.controller;public abstract class BaseController<T> {}

BaseDao.java

package com.oscar999.base.dao;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.Collection;import java.util.List;import java.util.Map;import javax.annotation.Resource;import org.apache.log4j.Logger;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.orm.hibernate4.HibernateCallback;import org.springframework.orm.hibernate4.support.HibernateDaoSupport;import org.springframework.transaction.annotation.Transactional;import org.springframework.util.CollectionUtils;@Transactionalpublic abstract class BaseDao<E, PK extends Serializable> extends HibernateDaoSupport {protected Logger log = Logger.getLogger(getEntityClass());protected Class<E> entityClass;protected Session session;@Resourcepublic void setSuperSessionFactory(SessionFactory sessionFactory) {super.setSessionFactory(sessionFactory);}public E get(PK id) {return (E) super.getHibernateTemplate().get(getEntityClass(), id);}public void delete(PK id) {E obj = get(id);if (obj != null) {super.getHibernateTemplate().delete(obj);}}public void delete(E obj) {if (obj != null) {super.getHibernateTemplate().delete(obj);}}public void delete(Collection<E> obj) {if (obj != null && obj.size() > 0) {super.getHibernateTemplate().deleteAll(obj);}}@SuppressWarnings("rawtypes")public void deleteAll(List ids) {String hql = "delete from " + getEntityClass().getName() + " t where t.id in(:ids) ";getSessionFactory().openSession().createQuery(hql).setParameterList("ids", ids).executeUpdate();}public E update(E obj) {if (obj != null) {super.getHibernateTemplate().update(obj);}return obj;}public E save(E obj) {if (obj != null) {super.getHibernateTemplate().save(obj);}return obj;}public E saveOrUpdate(E obj) {if (obj != null) {super.getHibernateTemplate().saveOrUpdate(obj);}return obj;}@SuppressWarnings({ "unchecked", "rawtypes" })public void executeUpdateHQl(final String hql, final Map map) {super.getHibernateTemplate().execute(new HibernateCallback() {public Integer doInHibernate(Session session) throws HibernateException {Query query = session.createQuery(hql);query.setProperties(map);return query.executeUpdate();}});}@SuppressWarnings({ "unchecked", "rawtypes" })public E getEntity(final String hql, final Map map) {List<E> list = (List<E>) super.getHibernateTemplate().execute(new HibernateCallback() {public List<E> doInHibernate(Session session) throws HibernateException {Query query = session.createQuery(hql);query.setProperties(map);return query.list();}});if (!CollectionUtils.isEmpty(list)) {return (E) list.get(0);}return null;}@SuppressWarnings({ "unchecked", "rawtypes" })public E getEntity(final String hql, final E entity) {List<E> list = (List<E>) super.getHibernateTemplate().execute(new HibernateCallback() {public List<E> doInHibernate(Session session) throws HibernateException {Query query = session.createQuery(hql);query.setProperties(entity);return query.list();}});if (!CollectionUtils.isEmpty(list)) {return (E) list.get(0);}return null;}@SuppressWarnings({ "unchecked", "rawtypes" })public List<E> getHqlResultList(final String hql, final Map map) {List<E> list = (List<E>) super.getHibernateTemplate().execute(new HibernateCallback() {public List<E> doInHibernate(Session session) throws HibernateException {Query query = session.createQuery(hql);query.setProperties(map);return query.list();}});return list;}@SuppressWarnings({ "unchecked", "rawtypes" })public List<E> getHqlResultList(final String hql, final E entity) {List<E> list = (List<E>) super.getHibernateTemplate().execute(new HibernateCallback() {public List<E> doInHibernate(Session session) throws HibernateException {Query query = session.createQuery(hql);query.setProperties(entity);return query.list();}});return list;}/** * @return the entityClass */@SuppressWarnings("unchecked")public Class<E> getEntityClass() {entityClass = (Class<E>) getSuperClassGenricType(getClass(), 0);return entityClass;}/** * @param entityClass *            the entityClass to set */public void setEntityClass(Class<E> entityClass) {this.entityClass = entityClass;}/** *  *  * @param clazz *            clazz The class to introspect * @param index *            the Index of the generic ddeclaration,start from 0. * @return the index generic declaration, or Object.class if cannot be *         determined */@SuppressWarnings({ "rawtypes", "unchecked" })private Class<Object> getSuperClassGenricType(Class clazz, int index) {Type genType = clazz.getGenericSuperclass();if (!(genType instanceof ParameterizedType)) {return Object.class;}Type[] params = ((ParameterizedType) genType).getActualTypeArguments();if (index >= params.length || index < 0) {return Object.class;}if (!(params[index] instanceof Class)) {return Object.class;}return (Class) params[index];}}


BaseEntity.java
package com.oscar999.base.model;import java.io.Serializable;public class BaseEntity  implements Serializable{/** *  */private static final long serialVersionUID = 1L;}

BaseService.java

package com.oscar999.base.service;public interface BaseService<T, K> {public T saveEntity(T t);}

BaseServiceImpl.java

package com.oscar999.base.service.impl;import java.io.Serializable;import org.springframework.transaction.annotation.Transactional;import com.oscar999.base.dao.BaseDao;import com.oscar999.base.service.BaseService;public abstract class BaseServiceImpl<T,K extends Serializable> implements BaseService<T, K> {@Override@Transactionalpublic T saveEntity(T t) {if(null==getDao()){return null;}return getDao().saveOrUpdate(t);}/** * @return the dao */public abstract BaseDao<T, K> getDao() ;}


work 目录和代码

StudentController.java

package com.oscar999.work.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.oscar999.base.controller.BaseController;import com.oscar999.work.model.Student;import com.oscar999.work.service.StudentService;@Controller@RequestMapping("/work/studentController")public class StudentController  extends BaseController<Student>{@Autowiredprivate StudentService studentService;@RequestMapping(value="/save", method = RequestMethod.POST)public String save(ModelMap model,Student student){studentService.saveEntity(student);return "";}}

StudentDao.java

package com.oscar999.work.dao;import org.springframework.stereotype.Repository;import  com.oscar999.base.dao.*;import com.oscar999.work.model.Student;@Repositorypublic class StudentDao extends BaseDao<Student,Integer>{}


Student.java

package com.oscar999.work.model;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.SequenceGenerator;import javax.persistence.Table;import com.oscar999.base.model.BaseEntity;@Entity@SequenceGenerator(name = "SEQ_STUDENT", allocationSize = 1, initialValue = 1, sequenceName = "SEQ_STUDENT")@Table(name = "STUDENT")public class Student extends BaseEntity {/** *  */private static final long serialVersionUID = 1L;@Id@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STUDENT")@Column(name = "ID")protected Integer id;@Column(name = "STUDENTID", nullable = false)private String studentId;@Column(name = "ENGNAME", nullable = false)private String engName;@Column(name = "CHINAME", nullable = false)private String chiName;@Column(name = "GENDER", nullable = false)private String gender;@Column(name = "AGE")private String age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getStudentId() {return studentId;}public void setStudentId(String studentId) {this.studentId = studentId;}public String getEngName() {return engName;}public void setEngName(String engName) {this.engName = engName;}public String getChiName() {return chiName;}public void setChiName(String chiName) {this.chiName = chiName;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}}

StudentService.java

package com.oscar999.work.service;import com.oscar999.base.service.BaseService;import com.oscar999.work.model.Student;public interface StudentService extends BaseService<Student, Integer>{}


StudentServiceImpl.java

package com.oscar999.work.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.oscar999.base.dao.BaseDao;import com.oscar999.base.service.impl.BaseServiceImpl;import com.oscar999.work.model.Student;import com.oscar999.work.service.StudentService;import com.oscar999.work.dao.StudentDao;@Servicepublic class StudentServiceImpl extends BaseServiceImpl<Student, Integer> implements StudentService {@Autowiredprivate StudentDao dao;@Overridepublic BaseDao<Student, Integer> getDao() {// TODO Auto-generated method stubreturn dao;}@Override@Transactionalpublic Student saveEntity(Student student){return dao.save(student);}}

以上所有部分完成, 在eclipse 中打包成war 档后拷入到 tomcat 的webapps 中,即可。



0 0
原创粉丝点击