【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件

时间:2023-03-09 08:18:13
【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件

上一篇我们创建了工程和一个Factory的po对象(javaBean),我们也写好了Mapper的映射文件,接下来我们来完成生产厂家的DAO与SERVICE,以及CONTROLLER,还有做显示的JSP页面,以及框架的配置文件。

首先回顾一下我们的系统架构:
【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件

我们的BaseDao与BaseDaoImpl:

  1. package cn.hpu.jk.dao;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import java.util.Map;
  5. import cn.hpu.jk.pagination.Page;
  6. //泛型类,基础的DAO接口
  7. public interface BaseDao<T> {
  8. public List<T> findPage(Page page);//分页查询
  9. public List<T> find(Map paraMap);//带条件查询,条件可以为null,既没有条件;返回list对象集合
  10. public T get(Serializable id);//只查询一个,常用于修改
  11. public void insert(T entity);//插入,用实体作为参数
  12. public void update(T entity);//修改,用实体作为参数
  13. public void deleteById(Serializable id);//按id删除,删除一条;支持整数型和字符串类型ID
  14. public void delete(Serializable[] ids);//批量删除;支持整数型和字符串类型ID
  15. }

BaseDaoImpl:

  1. package cn.hpu.jk.dao.impl;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.mybatis.spring.support.SqlSessionDaoSupport;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import cn.hpu.jk.dao.BaseDao;
  9. import cn.hpu.jk.pagination.Page;
  10. public abstract class BaseDaoImpl<T> extends SqlSessionDaoSupport implements BaseDao<T>{
  11. @Autowired
  12. //mybatis-spring 1.0无需此方法;mybatis-spring1.2必须注入。
  13. public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
  14. super.setSqlSessionFactory(sqlSessionFactory);
  15. }
  16. private String ns;      //命名空间
  17. public String getNs() {
  18. return ns;
  19. }
  20. public void setNs(String ns) {
  21. this.ns = ns;
  22. }
  23. public List<T> findPage(Page page){
  24. List<T> oList = this.getSqlSession().selectList(ns + ".findPage", page);
  25. return oList;
  26. }
  27. public List<T> find(Map map) {
  28. List<T> oList = this.getSqlSession().selectList(ns + ".find", map);
  29. return oList;
  30. }
  31. public T get(Serializable id) {
  32. return this.getSqlSession().selectOne(ns + ".get", id);
  33. }
  34. public void insert(T entity) {
  35. this.getSqlSession().insert(ns + ".insert", entity);
  36. }
  37. public void update(T entity) {
  38. this.getSqlSession().update(ns + ".update", entity);
  39. }
  40. public void deleteById(Serializable id) {
  41. this.getSqlSession().delete(ns + ".deleteById", id);
  42. }
  43. public void delete(Serializable[] ids) {
  44. this.getSqlSession().delete(ns + ".delete", ids);
  45. }
  46. }

我们现在来创建自己的Dao层
FactoryDao:

  1. package cn.hpu.jk.dao;
  2. import cn.hpu.jk.domain.Factory;
  3. public interface FactoryDao extends BaseDao<Factory>{
  4. //我们这里可以直接使用继承的BaseDao的增删改查方法
  5. //创建一系列其它Dao的原因是因为其它Dao有可能需要拓展
  6. }

FactoryDaoImpl:

  1. package cn.hpu.jk.dao.impl;
  2. import org.springframework.stereotype.Repository;
  3. import cn.hpu.jk.dao.FactoryDao;
  4. import cn.hpu.jk.domain.Factory;
  5. @Repository //为了包扫描的时候这个Dao被扫描到
  6. public class FactoryDaoImpl extends BaseDaoImpl<Factory> implements FactoryDao{
  7. public FactoryDaoImpl(){
  8. //设置命名空间
  9. super.setNs("cn.hpu.jk.mapper.FactoryMapper");
  10. }
  11. }

接下来写service层
FactoryService:

  1. package cn.hpu.jk.service;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.apache.poi.ss.formula.functions.T;
  6. import cn.hpu.jk.domain.Factory;
  7. import cn.hpu.jk.pagination.Page;
  8. public interface FactoryService {
  9. public List<Factory> findPage(Page page);//分页查询
  10. public List<Factory> find(Map paraMap);   //带条件查询,条件可以为null,既没有条件;返回list对象集合
  11. public Factory get(Serializable id);//只查询一个,常用于修改
  12. public void insert(Factory factory);//插入,用实体作为参数
  13. public void update(Factory factory);//修改,用实体作为参数
  14. public void deleteById(Serializable id);//按id删除,删除一条;支持整数型和字符串类型ID
  15. public void delete(Serializable[] ids);//批量删除;支持整数型和字符串类型ID
  16. }

FactoryServiceImpl(我们先只实现查询)

  1. package cn.hpu.jk.service.impl;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import java.util.Map;
  5. import javax.annotation.Resource;
  6. import org.apache.poi.ss.formula.functions.T;
  7. import org.springframework.stereotype.Service;
  8. import cn.hpu.jk.dao.FactoryDao;
  9. import cn.hpu.jk.domain.Factory;
  10. import cn.hpu.jk.pagination.Page;
  11. import cn.hpu.jk.service.FactoryService;
  12. @Service
  13. public class FactoryServiceImpl implements FactoryService{
  14. @Autowired
  15. FactoryDao factoryDao;
  16. @Override
  17. public void delete(Serializable[] ids) {
  18. // TODO Auto-generated method stub
  19. }
  20. @Override
  21. public void deleteById(Serializable id) {
  22. // TODO Auto-generated method stub
  23. }
  24. @Override
  25. public List<Factory> find(Map paraMap) {
  26. return factoryDao.find(paraMap);
  27. }
  28. @Override
  29. public List<Factory> findPage(Page page) {
  30. // TODO Auto-generated method stub
  31. return null;
  32. }
  33. @Override
  34. public Factory get(Serializable id) {
  35. // TODO Auto-generated method stub
  36. return null;
  37. }
  38. @Override
  39. public void insert(Factory factory) {
  40. // TODO Auto-generated method stub
  41. }
  42. @Override
  43. public void update(Factory factory) {
  44. // TODO Auto-generated method stub
  45. }
  46. }

下面开始编写Controller层
看看我们之前引入的工具类BaseController:

  1. package cn.hpu.jk.controller;
  2. import java.text.DateFormat;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import org.springframework.beans.propertyeditors.CustomDateEditor;
  6. import org.springframework.web.bind.WebDataBinder;
  7. import org.springframework.web.bind.annotation.InitBinder;
  8. public abstract class BaseController {
  9. @InitBinder
  10. //此方法用于日期的转换,如果未加,当页面日期格式转换错误,将报400错误,实际是因为此方法
  11. public void initBinder(WebDataBinder binder) {
  12. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  13. dateFormat.setLenient(true);
  14. binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
  15. }
  16. }

然后我们创建FactoryController(继承BaseController是为了以后的扩充):

  1. package cn.hpu.jk.controller.basicinfo.factory;
  2. import java.util.List;
  3. import javax.annotation.Resource;
  4. import org.springframework.ui.Model;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import cn.hpu.jk.controller.BaseController;
  7. import cn.hpu.jk.domain.Factory;
  8. import cn.hpu.jk.service.FactoryService;
  9. public class FactoryController extends BaseController{
  10. @Resource
  11. FactoryService factoryService;
  12. //列表
  13. @RequestMapping("/basicinfo/factory/list.action")
  14. public String list(Model model){
  15. List<Factory> dataList=factoryService.find(null);
  16. model.addAttribute("dataList", dataList);//将数据传递到页面
  17. return "/baseinfo/factory/jFactoryList.jsp";//转向页面
  18. }
  19. }

接下来我们实现jsp界面
我们首先先在main/webapp/WEB-INF/pages下写一个最最基础的jsp的配置页面
base.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <!--引入c标签库-->
  3. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  4. <!--配置虚拟路径(工程路径)-->
  5. <c:set var="ctx" value="${pageContext.request.contextPath}"/>
  6. <!--引入最基础的css与js配置文件-->
  7. <link rel="stylesheet" rev="stylesheet" type="text/css" href="${ctx}/skin/default/css/default.css" media="all"/>
  8. <script language="javascript" src="${ctx}/js/common.js"></script>

之后再写一个显示list列表的配置jsp文件:
baselist.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <!--引入base.jsp-->
  3. <%@ include file="base.jsp"%>
  4. <!--引入与list列表有关的样式表-->
  5. <link rel="stylesheet" rev="stylesheet" type="text/css" href="${ctx}/css/extreme/extremecomponents.css" />
  6. <link rel="stylesheet" rev="stylesheet" type="text/css" href="${ctx}/css/extreme/extremesite.css" />

最后,,我们在main/webapp/WEB-INF/pages/factory下创建baseinfo文件夹,我们在里面写我们需要给用户显示的jsp界面(里面包含了baselist.jsp)
jFactoryList.jsp:

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <%@ include file="../../baselist.jsp"%>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <title>生产厂家列表</title>
  6. </head>
  7. <body>
  8. <form name="icform" method="post">
  9. <div id="menubar">
  10. <div id="middleMenubar">
  11. <div id="innerMenubar">
  12. <div id="navMenubar">
  13. <ul>
  14. <li id="view"><a href="#" onclick="formSubmit('toview.action','_self');this.blur();">查看</a></li>
  15. </ul>
  16. </div>
  17. </div>
  18. </div>
  19. </div>
  20. <!-- 页面主体部分(列表等) -->
  21. <div class="textbox" id="centerTextbox">
  22. <div class="textbox-header">
  23. <div class="textbox-inner-header">
  24. <div class="textbox-title">
  25. 生产厂家列表
  26. </div>
  27. </div>
  28. </div>
  29. <div>
  30. <div class="eXtremeTable" >
  31. <table id="ec_table" class="tableRegion" width="98%" >
  32. <thead>
  33. <tr>
  34. <td class="tableHeader"><input type="checkbox" name="selid" onclick="checkAll('id',this)"></td>
  35. <td class="tableHeader">序号</td>
  36. <td class="tableHeader">厂家全称</td>
  37. <td class="tableHeader">缩写</td>
  38. <td class="tableHeader">联系人</td>
  39. <td class="tableHeader">电话</td>
  40. <td class="tableHeader">手机</td>
  41. <td class="tableHeader">传真</td>
  42. <td class="tableHeader">验货员</td>
  43. </tr>
  44. </thead>
  45. <tbody class="tableBody" >
  46. <c:forEach items="${dataList}" var="o" varStatus="status">
  47. <tr class="odd" onmouseover="this.className='highlight'" onmouseout="this.className='odd'" >
  48. <td><input type="checkbox" name="id" value="${o.id}"/></td>
  49. <td>${status.index+1}</td>
  50. <td><a href="toview.action?id=${o.id}">${o.fullName}</a></td>
  51. <td>${o.factoryName}</td>
  52. <td>${o.contacts}</td>
  53. <td>${o.phone}</td>
  54. <td>${o.mobile}</td>
  55. <td>${o.fax}</td>
  56. <td>${o.inspector}</td>
  57. </tr>
  58. </c:forEach>
  59. </tbody>
  60. </table>
  61. </div>
  62. </div>
  63. </form>
  64. </body>
  65. </html>

接下来进行最后一步,我们要配置各种配置文件
我们现在src/main/resources下配置MyBatis的配置文件
sqlMapConfig.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!--  引入了spring就不需要这些了
  7. <environments default="">
  8. <environment id="">
  9. <transactionManager type=""></transactionManager>
  10. <dataSource type=""></dataSource>
  11. </environment>
  12. </environments>
  13. -->
  14. </configuration>

接下来我们创建spring的配置文件beans.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  12. http://www.springframework.org/schema/aop
  13. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  14. http://www.springframework.org/schema/tx
  15. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
  16. <!-- 1.加载数据库配置的属性文件 -->
  17. <context:property-placeholder location="classpath:jdbc.properties"/>
  18. <!-- 2.包扫描:dao,service -->
  19. <context:component-scan base-package="cn.hpu.jk.dao,cn.hpu.jk.service"/>
  20. <!-- 3,dataSource数据源 -->
  21. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  22. <property name="driverClass" value="${jdbc.driverClassName}"/>
  23. <property name="jdbcUrl" value="${jdbc.url}"/>
  24. <property name="user" value="${jdbc.username}"/>
  25. <property name="password" value="${jdbc.password}"/>
  26. <property name="maxPoolSize" value="${c3p0.pool.maxPoolSize}"/>
  27. <property name="minPoolSize" value="${c3p0.pool.minPoolSize}" />
  28. <property name="initialPoolSize" value="${c3p0.pool.initialPoolSize}"/>
  29. <property name="acquireIncrement" value="${c3p0.pool.acquireIncrement}"/>
  30. </bean>
  31. <!-- 4.SessionFactory -->
  32. <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  33. <property name="dataSource" ref="dataSource"/>
  34. <!-- 整合mybatis,包扫描mapper文件 -->
  35. <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
  36. <property name="mapperLocations" value="classpath:cn/hpu/jk/mapper/*.xml"></property>
  37. </bean>
  38. <!-- 5.事务管理-->
  39. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  40. <property name="dataSource" ref="dataSource"/>
  41. </bean>
  42. <!-- 事务通知 -->
  43. <tx:advice id="txAdivce" transaction-manager="txManager">
  44. <tx:attributes>
  45. <tx:method name="insert*" propagation="REQUIRED"/>
  46. <tx:method name="update*" propagation="REQUIRED"/>
  47. <tx:method name="delete*" propagation="REQUIRED"/>
  48. <tx:method name="save*" propagation="REQUIRED"/>
  49. <tx:method name="find*" read-only="false"/>
  50. <tx:method name="get*" read-only="false"/>
  51. <tx:method name="view*" read-only="false"/>
  52. </tx:attributes>
  53. </tx:advice>
  54. <aop:config>
  55. <aop:pointcut expression="execution(* cn.hpu.jk.service.*.*(..))" id="txPointcut"/>
  56. <aop:advisor advice-ref="txAdivce" pointcut-ref="txPointcut"/>
  57. </aop:config>
  58. </beans>

其中jdbc.properties:

  1. #jdbc.driverClassName=com.mysql.jdbc.Driver
  2. #jdbc.url=jdbc:mysql://localhost:3306/jkdb?characterEncoding=utf-8
  3. #jdbc.username=root
  4. #jdbc.password=1234
  5. jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
  6. jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:XE
  7. jdbc.username=jkdb
  8. jdbc.password=22
  9. c3p0.pool.maxPoolSize=20
  10. c3p0.pool.minPoolSize=5
  11. c3p0.pool.initialPoolSize=3
  12. c3p0.pool.acquireIncrement=2

然后我们的spring有关service的配置文件
beans-service.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  12. http://www.springframework.org/schema/aop
  13. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  14. http://www.springframework.org/schema/tx
  15. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
  16. <!-- 加载service-->
  17. <bean name="factoryService" class="cn.hpu.jk.service.impl.FactoryServiceImpl"/>
  18. </beans>

接下来配置springmvc的配置文件springmvc-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xsi:schemaLocation="http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  12. http://www.springframework.org/schema/context
  13. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  14. http://www.springframework.org/schema/aop
  15. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  16. http://www.springframework.org/schema/tx
  17. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd ">
  18. <!-- 1.扫描controller包 -->
  19. <context:component-scan base-package="cn.hpu.jk.controller.*"/>
  20. <!-- 2.内部资源视图解析器,suffix为空,方便跟参数 url?id=xxx -->
  21. <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  22. <property name="prefix" value="/WEB-INF/pages"/>
  23. <property name="suffix" value=""/>
  24. </bean>
  25. <!-- 3.注解驱动 -->
  26. <mvc:annotation-driven/>
  27. <!-- 4.文件上传解析器,最大能上传10M文件(1024*1024*10)-->
  28. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  29. <property name="maxUploadSize" value="10485760"/>
  30. </bean>
  31. </beans>

最后我们来配置我们的web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  6. id="WebApp_ID" version="3.0">
  7. <display-name>Archetype Created Web Application</display-name>
  8. <!-- 1.加载spring框架容器 -->
  9. <context-param>
  10. <param-name>contextConfigLocation</param-name>
  11. <param-value>classpath:beans*.xml</param-value>
  12. </context-param>
  13. <listener>
  14. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  15. </listener>
  16. <!-- 2.springmvc前端控制器 -->
  17. <servlet>
  18. <servlet-name>springmvc</servlet-name>
  19. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  20. <init-param>
  21. <param-name>contextConfigLocation</param-name>
  22. <param-value>classpath:springmvc-servlet.xml</param-value>
  23. </init-param>
  24. </servlet>
  25. <servlet-mapping>
  26. <servlet-name>springmvc</servlet-name>
  27. <url-pattern>*.action</url-pattern>
  28. </servlet-mapping>
  29. <!-- 3.post乱码过虑器 -->
  30. <filter>
  31. <filter-name>CharacterEncodingFilter</filter-name>
  32. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  33. <init-param>
  34. <param-name>encoding</param-name>
  35. <param-value>utf-8</param-value>
  36. </init-param>
  37. </filter>
  38. <filter-mapping>
  39. <filter-name>CharacterEncodingFilter</filter-name>
  40. <url-pattern>/*</url-pattern>
  41. </filter-mapping>
  42. </web-app>

我们基本上把所有基本的东西都配置完毕了,接下来我们发布我们的工程进行测试。
将任务部署至tomcat,然后我们在浏览器*问我们的工程,我们访问我们的路径,看看数据是否返回(我们事先在数据库中填写了一些从测试数据):
访问http://localhost/jx-Maven-Webapp/(我的tomcat默认端口是80)

【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件

点击登录到主界面,然后点击厂家信息
【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件

点击之后结果如图:

【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件