前一篇写的有些多,大家先看前一篇,传送门
具体的资源已将上传到资源了。
附地址:MySQL.zip启动
用Maven整合SpringMVC+Spring+Hibernate 框架
上文我们直接搭建前的准备和资源配置都写好了,下面进入具体代码编写。承接上文的小3
3、我习惯建立接口,这样对整个项目感觉更合理。
(1.)建立IBaseService(业务逻辑层,有的习惯写成BaseServiceI)都可以,都是标注接口的,我只是简单的贴下代码
package com.jesus.sshframework.service;
import java.io.Serializable;
public interface IBaseService<T, PK extends Serializable> {
/**
* 根据ID获取实体对象.
* @param id
* 记录ID
* @return 实体对象
*/
public T get(PK id);
/**
* 保存实体对象.
*
* @param entity
* 对象
* @return ID
*/
public PK save(T entity);
}
PS.贴出来应该就知道为什么这么写了吧。T 泛型,可以少些很多的代码,我们这个接口一般放很多业务逻辑都能用到的方法。
(2.)实现上面的接口BaseServiceImpl(这个大家一般都这么写吧),当然也是基础类。
package com.jesus.sshframework.service.impl;
import java.io.Serializable;
import com.jesus.sshframework.dao.IBaseDao;
import com.jesus.sshframework.service.IBaseService;
public class BaseServiceImpl<T, PK extends Serializable> implements IBaseService<T, PK>{
private IBaseDao<T, PK> baseDao;
public IBaseDao<T, PK> getBaseDao() {
return baseDao;
}
public void setBaseDao(IBaseDao<T, PK> baseDao) {
this.baseDao = baseDao;
}
public T get(PK id) {
return baseDao.get(id);
}
public PK save(T entity) {
return baseDao.save(entity);
}
}
PS.大家看到了新的IBaseDao,我马上说说他。
(3.)Dao这个是数据访问接口,数据持久层,用来具体操作DB,完成增删改查。我照样也是用接口。
package com.jesus.sshframework.dao;
import java.io.Serializable;
/**
* Dao接口 - Dao基接口
*/
public interface IBaseDao<T, PK extends Serializable> {
/**
* 根据ID获取实体对象.
*
* @param id
* 记录ID
* @return 实体对象
*/
public T get(PK id);
/**
* 保存实体对象.
*
* @param entity
* 对象
* @return ID
*/
public PK save(T entity);
}
PS.仍然是泛型,当然实现是impl,
(4.)BaseDaoImpl 我们因为用的是泛型,所以得确定具体的类,然后操作Serrion.
package com.jesus.sshframework.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import javax.annotation.Resource;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import org.springframework.util.Assert;
import com.jesus.sshframework.dao.IBaseDao;
@Repository
public class BaseDaoImpl<T, PK extends Serializable> implements IBaseDao<T, PK>{
private Class<T> entityClass;
protected SessionFactory sessionFactory;
public BaseDaoImpl() {
this.entityClass = null;
Class<?> c = getClass();
Type type = c.getGenericSuperclass();
if (type instanceof ParameterizedType) {
Type[] parameterizedType = ((ParameterizedType) type).getActualTypeArguments();
this.entityClass = (Class<T>) parameterizedType[0];
}
}
@Resource
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
public T get(PK id) {
Assert.notNull(id, "id is required");
return (T) getSession().get(entityClass, id);
}
public PK save(T entity) {
Assert.notNull(entity, "entity is required");
return (PK) getSession().save(entity);
}
}
(5.)实体bean,我们也要用Base的哦。
package com.jesus.sshframework.model;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import org.hibernate.annotations.GenericGenerator;
/**
* 实体类 - 基类
*/
@MappedSuperclass
public class BaseEntity implements Serializable{
/**
* ID
*/
private String id;
/**
* 创建日期
*/
private Date createDate;
/**
* 修改日期
*/
private Date modifyDate;
@Id
@Column(length = 32, nullable = true)
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(updatable = false)
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
@Override
public int hashCode() {
return id == null ? System.identityHashCode(this) : id.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass().getPackage() != obj.getClass().getPackage()) {
return false;
}
final BaseEntity other = (BaseEntity) obj;
if (id == null) {
if (other.getId() != null) {
return false;
}
} else if (!id.equals(other.getId())) {
return false;
}
return true;
}
}
最基本的代码我们贴到这基本就完成了。以后的东西都是建立在这几个类(接口)上面的。我想大家应该都会写了。
4、最后贴一下web.xml(用了Maven后经常忘了改他。%>_<%)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name></display-name>
<!-- spring hibernate -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml,classpath:spring-hibernate.xml</param-value>
</context-param>
<!-- openSessionInView配置 -->
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!--spring mvc 配置 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- encodeing -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- encoding filter for jsp page -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
三、小结
1、数据库建完后,表都不用管,自动创建。
2、配置好pom.xml,妈妈再也不用担心我一个个的下jar包了,有时候jar包会下载失败,建议稍修改,或加个换行重新下载一次,推荐大家在配置pom.xml的时候可以多加几个maven远程库,缓存下来后就不再担心了。
PS.maven自动缓存在C盘,大家可以一开始改一下缓存路径,Windows>Preferences>搜索User Settings(我的是MyEclipse2014),其他的自己找,肯定有。
福利:给大家几个Maven库,打开都挺慢的。
http://repository.sonatype.org/content/groups/public/
3、注意代码规范就好,这点对刚毕业的小伙伴们很重要哦。
转载请注明出处:
http://blog.csdn.net/js931178805/article/details/39642743