用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能(二)

前一篇写的有些多,大家先看前一篇,传送门

具体的资源已将上传到资源了。

附地址: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整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能(二)

福利:给大家几个Maven库,打开都挺慢的。

http://search.maven.org/

http://mvnrepository.com/

http://repository.sonatype.org/content/groups/public/

3、注意代码规范就好,这点对刚毕业的小伙伴们很重要哦。


转载请注明出处:

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

用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能(二)

上一篇:数据库基础


下一篇:Sqlite实现默认时间为当前时间列的方法(转)