前一篇写的有些多,大家先看前一篇,传送门
具体的资源已将上传到资源了。
附地址: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