用Maven整合SpringMVC+Spring+Hibernate 框架,實現簡單的插入資料庫資料功能(二)
阿新 • • 發佈:2019-02-09
前一篇寫的有些多,大家先看前一篇,傳送門
具體的資源已將上傳到資源了。
上文我們直接搭建前的準備和資源配置都寫好了,下面進入具體程式碼編寫。承接上文的小3
3、我習慣建立介面,這樣對整個專案感覺更合理。
(1.)建立IBaseService(業務邏輯層,有的習慣寫成BaseServiceI)都可以,都是標註介面的,我只是簡單的貼下程式碼
PS.貼出來應該就知道為什麼這麼寫了吧。T 泛型,可以少些很多的程式碼,我們這個介面一般放很多業務邏輯都能用到的方法。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); }
(2.)實現上面的介面BaseServiceImpl(這個大家一般都這麼寫吧),當然也是基礎類。
PS.大家看到了新的IBaseDao,我馬上說說他。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); } }
(3.)Dao這個是資料訪問介面,資料持久層,用來具體操作DB,完成增刪改查。我照樣也是用介面。
PS.仍然是泛型,當然實現是impl,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); }
(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