1. 程式人生 > >用Maven整合SpringMVC+Spring+Hibernate 框架,實現簡單的插入資料庫資料功能(二)

用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庫,開啟都挺慢的。

3、注意程式碼規範就好,這點對剛畢業的小夥伴們很重要哦。

轉載請註明出處:

http://blog.csdn.net/js931178805/article/details/39642743