家庭财务管理系统实战1-SpringMVC3+Spring3+Mybatis3+easyui环境整合搭建

作者对javaweb开发了解并不深,此项目为练手学习之用,大牛请绕道或添加过滤器。

首先看用到的jar包,通过几个钟头的排错,jar包终于搞齐了。


源码结构图,此图也是作者通过网上搜寻查找总结的结果。


webContent目录:


web.xml源码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name>homeBank</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<!-- 加载Spring容器配置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- 设置Spring容器加载配置文件路径 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext-*.xml</param-value>
	</context-param>
	<!-- 配置Spring核心控制器 -->
	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/applicationContext-mvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- 拦截匹配规则 -->
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	<!-- 解决工程编码过滤器 -->
	<filter>
		<filter-name>characterEncodingFilter</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>
	<filter-mapping>
		<filter-name>characterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
</web-app>


applicationContext-mvc.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 自动扫描的包名,扫描springmvc的注解 -->
    <context:component-scan base-package="system.homebank"/>
    <!-- annotation默认的方法映射适配器 -->
    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
    <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
          <list>  
            <ref bean="jsonHttpMessageConverter"/>  
          </list>  
        </property>  
    </bean>
    <!-- json转换,需配置编码格式,否则乱码 -->
    <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">    
	    <property name="supportedMediaTypes">    
	        <list>    
	            <value>text/html;charset=UTF-8</value>    
	        </list>    
	    </property>    
    </bean>
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">    
        <property name="prefix" value="/jsp/"/>    
        <property name="suffix" value=".jsp"/>    
        <property name="contentType" value="text/html; charset=utf-8"/>    
    </bean> 
</beans>

applicationContext-common.xml,主要配置数据源以及配置扫描mybatis的所有mapper的接口
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd 
    http://www.springframework.org/schema/tx  
    http://www.springframework.org/schema/tx/spring-tx.xsd 
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:property-placeholder location="classpath:mybatis/jdbc.properties"/>  
    <!--创建数据源 -->  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
        destroy-method="close">  
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
        <property name="url" value="jdbc:mysql://localhost:3306/homebank" />  
        <property name="username" value="homebank" />  
        <property name="password" value="111111" />  
    </bean>  
    <!-- 配置SqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis/config.xml"/>
        <property name="mapperLocations">
            <list>
                <value>classpath:system/homebank/entity/*.xml</value>
            </list>
        </property>
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="system.homebank.mapper"/>
        <property name="markerInterface" value="system.homebank.mapper.BaseMapper"/>
    </bean>
</beans>
上面的MapperScannerConfigurer配置会扫描BaseMapper下的所有接口,这样就不用单独为每一个接口配置一个bean。数据源的配置没有通过jdbc.properties文件,因为用户名总是读取计算机名而不是文件中配置的用户名,我也不知道为啥。


applicationContext-bean.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    
    <!-- 自动扫描 -->
    <context:component-scan base-package="system.homebank.controller"/>
    <context:component-scan base-package="system.homebank.service"/>
    <context:component-scan base-package="system.homebank.dao"/>
    
    
</beans>

上面的配置会自动扫描包下的注解的类,此配置文件中还可以配置其它的一些非注解的类。

下面看mybatis的配置,config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"/>  
        <setting name="lazyLoadingEnabled" value="true"/>  
        <setting name="multipleResultSetsEnabled" value="true"/>  
        <setting name="useColumnLabel" value="true"/>  
        <setting name="useGeneratedKeys" value="true"/>  
        <setting name="defaultExecutorType" value="SIMPLE"/>  
        <setting name="defaultStatementTimeout" value="25000"/>  
    </settings>
    <typeAliases>
        <typeAlias type="system.homebank.entity.User" alias="User" />
    </typeAliases>
</configuration>
以上是几个要命的配置文件,下面的内容就简单了。

首先是实体类User:

package system.homebank.entity;

import java.io.Serializable;

public class User implements Serializable 
{
  private static final long serialVersionUID = 1085062678388838031L;
  private Integer id;
  private String username;
  private String password;
  public Integer getId()
  {
    return id;
  }
  public void setId(Integer id)
  {
    this.id = id;
  }
  public String getUsername()
  {
    return username;
  }
  public void setUsername(String username)
  {
    this.username = username;
  }
  public String getPassword()
  {
    return password;
  }
  public void setPassword(String password)
  {
    this.password = password;
  }
  
  
}

然后为其配一个接口,实现增删改查等,本例只定义获取list的功能:

package system.homebank.mapper;

import java.util.List;

import system.homebank.entity.User;

public interface UserMapper extends BaseMapper
{
  public List<User> getAllUser();
}

BaseMapper接口不定义任何方法:

package system.homebank.mapper;

public interface BaseMapper
{
  
}

接下来定义此实体与数据库表的映射配置,一个实体对应一个这样的配置,UserMapper.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="system.homebank.mapper.UserMapper" >
    <resultMap id="userResultMap" type="system.homebank.entity.User">
        <id property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
    </resultMap>
    <select id="getAllUser" resultType="list" resultMap="userResultMap">
        select * from user
    </select>
</mapper>

resultMap中定义了实体与库表的字段关系,select标签中的id对应的是上面UserMapper接口中的方法名,其他的内容都好理解。

以上是所有关于mybaits的配置,下面就是结构清晰的MVC三层了。

dao层如下:

UserDao.java

package system.homebank.dao;

import java.util.List;

import system.homebank.entity.User;

public interface UserDao
{
  public List<User> getAllUser();
}

UserDaoImpl.java

package system.homebank.dao;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;

import system.homebank.entity.User;
import system.homebank.mapper.UserMapper;

@Repository
public class UserDaoImpl implements UserDao
{
  @Resource
  private UserMapper mapper;
  
  

  @Override
  public List<User> getAllUser()
  {
    return this.mapper.getAllUser();
  }
  
}

@Repository标签一般表示是dao层的服务;@Resouce标签属性将自动注入。

service层如下:

UserService.java

package system.homebank.service;

import java.util.List;

import system.homebank.entity.User;

public interface UserService
{
  public List<User> getAllUser();
}

UserServiceImpl.java

package system.homebank.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import system.homebank.dao.UserDao;
import system.homebank.entity.User;

@Service
public class UserServiceImpl implements UserService
{
  @Resource
  private UserDao dao;
  
  

  @Override
  public List<User> getAllUser()
  {
    return this.dao.getAllUser();
  }
  
}

@Service标签一般表示是服务层服务。

cotroller层如下:

UserController.java

package system.homebank.controller;


import java.util.List;


import javax.annotation.Resource;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


import system.homebank.entity.User;
import system.homebank.service.UserService;


@Controller
@RequestMapping("/userController")
public class UserController
{
  @Resource
  private UserService service;


  
  
  @RequestMapping("/list.do")
  @ResponseBody
  public Object list(Model model)
  {
    List<User> list = service.getAllUser();
    return list;
  }
}
这样,list方法的访问路径就是/userController/list.do,@ResponseBody标签表示直接返回结果到页面。


后台代码到此为止。


以下为jsp页面和前台代码:

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path ;
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<a href="<%=basePath%>/jsp/listUser.jsp">点击</a>
</body>
</html>

listUser.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path ;
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"
    href="<%=basePath%>/res/css/easyui/default/easyui.css">
<link rel="stylesheet" type="text/css" href="<%=basePath%>/res/css/easyui/icon.css">

<script type="text/javascript" src="<%=basePath%>/res/js/jquery.min.js"></script>
<script type="text/javascript" src="<%=basePath%>/res/js/jquery.easyui.min.js"></script>
<script type="text/javascript" src="<%=basePath%>/res/js/easyui-lang-zh_CN.js"></script>
<script>
$(function(){
	$('#dg').datagrid({
        url:'<%=basePath%>/userController/list.do',
        columns:[[
            {field:'id',title:'id',width:100},
            {field:'username',title:'username',width:100},
            {field:'password',title:'password',width:100}
        ]],
        onLoadSuccess:function(data){
        }
    });
});
	
</script>
</head>
<body>
    <table id="dg"></table>
</body>
</html>

ok,可以访问了:http://localhost:8080/homeBank/index.jsp





猜你喜欢

转载自blog.csdn.net/u012071890/article/details/15812419