上一篇中已经成功使用maven搭建了一个web项目,本篇描述在此基础上怎么搭建一个基于springmvc+mybatis环境的项目.

说了这么久,为什么那么多人都喜欢用maven搭建项目?我们都知道maven是用来管理项目依赖包的,它到底有多方便呢?大家都知道,在以前,我如果要在项目中使用jar包,那么需要先去网上下载对应的jar包,然后复制到项目中,然后再add to build path才可以真正使用它.那么maven项目中是怎么做的呢?

首先在建好的maven项目最底下我们可以找到一个pom.xml的文件,新建好的pom.xml文件如下:

我们可以看到在dependencies节点下已经默认有个了一个dependency(依赖)节点,当然也许环境版本不同建立起来也许没有默认的,那么这一个dependency节点有什么用呢?

看一下项目:

我想大家已经清晰的看到了,在maven依赖下自动多了一个junit-3.8.1.jar,这不是我手动添加的,是自动添加的,再对比一下version版本号,两者是一样的.那么如果我现在想在项目中引入log4j该怎么做呢?非常简单,在pom.xml中再添加一段:

添加过后保存pom.xml文件,我们就可以看到左侧自动添加了log4j-1.2.17.jar包,(当然你的电脑要是联网的才行,你保存后如果本地仓库没有是会自动去网络上下载的,没有网络可不会凭空变出来,你下载过后下次再引用就不需要重新下载了,会自动从本地仓库中取)如果想要换一个版本,只要改一下version,保存就行了

看,log4j的版本自动就换了,引入的新的log4j版本,并且原先的log4j版本自动删除了,多方便,同理,如果想引入spring的web相关包,只要添加一段就行了.

我们可以看到一下子添加了好几个jar包,连需要用到的spring核心包也 一同引入进来了.写到这里不禁想起了当初做毕业设计时候,也用的springmvc+mybatis,那时候不知道maven,满世界的去下载各种jar包,想想就心酸,对比一下,真感觉是后妈养的.

好了,到这里,我们知道了怎么在项目中添加依赖包了,那么问题来了,每次 要添加的dependency节点,我怎么知道它的groupid,artifactid以及version呢?当然现在网络这么发达,你可已去网上找别人的配置文件,看别人的,如果你想自己写,那么可以自己去maven官网查找,在浏览器输入search.maven.org ,还是以log4j为例,输入log4j,点击搜索,结果如下:

点击中间的1.2.17,如下:

这样就可以方便的添加依赖了,如果你不想要最新版本,可以点击all,进去后再选择自己想要的版本.其实到这里我感觉基本已经算结束了,剩下的都是一些springmvc+mybatis的配置,网上有许多,也都大同小异.

就直接贴代码了,首先结构如下:

后台代码:

UserController:

package com.acgg.testMaven.user.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.acgg.testMaven.user.model.UserInfo;
import com.acgg.testMaven.user.service.UserService; /**
* @author 作者 : niexiaohui
* @version V1.0
* 创建时间:2016年10月29日 下午6:37:55
* 类说明:
*/
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService; @RequestMapping("/queryUser.do")
public String queryAllUser(HttpServletRequest request) {
List<UserInfo> userInfos = userService.queryAllUser();
request.setAttribute("userInfos", userInfos);
return "user/showAllUser";
} @RequestMapping("/showJsonUser.do")
@ResponseBody
public Object showJsonUser(HttpServletRequest request) {
List<UserInfo> userInfos = userService.queryAllUser();
return userInfos;
} }

UserInfoMapper:

package com.acgg.testMaven.user.dao;

import java.util.List;

import com.acgg.testMaven.user.model.UserInfo;

/**
* @author 作者 : niexiaohui
* @version V1.0
* 创建时间:2016年10月29日 下午6:33:46
* 类说明:
*/
public interface UserInfoMapper {
/**
* 查询所有用户
*/
List<UserInfo> queryAllUser();
}

UserInfoMapper.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="com.acgg.testMaven.user.dao.UserInfoMapper">
<resultMap id="BaseResultMap" type="com.acgg.testMaven.user.model.UserInfo" >
<id column="userid" property="id" jdbcType="INTEGER" />
<result column="username" property="name" jdbcType="VARCHAR" />
</resultMap> <sql id="Base_Column_List">
userid, username
</sql> <select id="queryAllUser" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from userinfo
</select> </mapper>

UserInfo:

package com.acgg.testMaven.user.model;
/**
* @author 作者 : niexiaohui
* @version V1.0
* 创建时间:2016年10月29日 下午6:29:10
* 类说明: 用户信息
*/
public class UserInfo {
private Integer id; private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "UserInfo [id=" + id + ", name=" + name + "]";
} }

UserService:

package com.acgg.testMaven.user.service;

import java.util.List;

import com.acgg.testMaven.user.model.UserInfo;

/**
* @author 作者 : niexiaohui
* @version V1.0
* 创建时间:2016年10月29日 下午6:28:20
* 类说明: 用户服务
*/
public interface UserService {
List<UserInfo> queryAllUser();
}

UserServiceImpl:

package com.acgg.testMaven.user.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.acgg.testMaven.user.dao.UserInfoMapper;
import com.acgg.testMaven.user.model.UserInfo; /**
* @author 作者 : niexiaohui
* @version V1.0
* 创建时间:2016年10月29日 下午6:31:17
* 类说明:
*/
@Service("UserService")
public class UserServiceImpl implements UserService { @Autowired
private UserInfoMapper userInfoMapper; @Override
public List<UserInfo> queryAllUser() {
return userInfoMapper.queryAllUser();
} }

配置文件:

config.properties:

jdbc.drivername=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration>
<!--%d{yyyy-MM-dd HH:mm:ss}:%-5p -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p:%c - %t %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="debug" />
<param name="LevelMax" value="error" />
</filter>
</appender> <appender name="FileDebug" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="../logs/bookShop/DebugLog.log" />
<param name="DatePattern" value="yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%-5p %t %c - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="debug" />
<param name="LevelMax" value="error" />
</filter>
</appender> <appender name="FileInfo" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="../logs/bookShop/InfoLog.log" />
<param name="DatePattern" value="yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%-5p %t %c - %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="info" />
<param name="LevelMax" value="error" />
</filter>
</appender> <!-- ibatis 输出的sql,DEBUG级别 -->
<logger name="java.sql">
<level value="DEBUG" />
</logger> <root>
<priority value="DEBUG" />
<appender-ref ref="console" />
<appender-ref ref="FileDebug" />
<appender-ref ref="FileInfo" />
</root> </log4j:configuration>

spring-mvc.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:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc" 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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 启用spring mvc 注解 -->
<mvc:annotation-driven/>
<!-- 扫描控制器,自动扫描com.acgg.testMaven.*.controller包下的所有类,使其认为spring mvc的控制器 -->
<context:component-scan base-package="com.acgg.testMaven.*.controller" /> <!-- 对静态资源文件的访问,交给default servlet handler处理 -->
<mvc:default-servlet-handler /> <mvc:view-controller path="/" view-name="redirect:/index" />
<!-- 开启注解,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<!-- springmvc返回json格式数据配置 -->
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean> <!-- 视图解析,对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/" p:suffix=".jsp" /> <!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean> <!-- <mvc:interceptors>
使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求
<bean class="com.acgg.bookshop.utils.LoginInterceptor"/>
<mvc:interceptor>
<mvc:mapping path="/cart/*"/>
<mvc:mapping path="/order/*"/>
<mvc:mapping path="/myHome/*"/>
定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的
<bean class="com.acgg.bookshop.utils.LoginInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/bookImg/*"/>
<bean class="com.acgg.bookshop.utils.BookImgInterceptor"/>
</mvc:interceptor>
</mvc:interceptors> --> </beans>

spring-mybatis.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:context="http://www.springframework.org/schema/context"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!--引入配置属性文件  -->
<context:property-placeholder location="classpath:config.properties" />
<!-- 扫描服务,自动扫描(自动注入) -->
<context:component-scan base-package="com.acgg.testMaven.*.service" /> <!-- BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 以便Spring容器关闭时,数据源能够正常关闭。 -->
<!-- defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true; -->
<!-- defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false; -->
<!-- maxActive:最大连接数据库连接数,设置为0时,表示没有限制; -->
<!-- maxIdle:最大等待连接中的数量,设置为0时,表示没有限制; -->
<!-- maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息; -->
<!-- validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据, 如你可以简单地设置为:“select
count(*) from user”; -->
<!-- removeAbandoned:是否自我中断,默认是 false ; -->
<!-- removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值; -->
<!-- logAbandoned:是否记录中断事件, 默认为 false; -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.drivername}"></property>
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- dbcp数据源事务的自动提交功能,true 开启 -->
<property name="defaultAutoCommit" value="true"></property>
</bean> <!-- 创建SqlSessionFactory,同时指定数据源 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--通用的属性是configLocation,它是用来指定MyBatis的xml配置文件路径的,这里使用下面的自动扫描。 -->
<!-- <property name="configLocation" value="classpath:mapper-config.xml"/> -->
<!--mabatis文件配置,扫描所有mapper -->
<property name="mapperLocations" value="classpath*:com.acgg.testMaven/*/dao/*.xml" />
</bean> <!-- spring与mybatis整合,扫描所有dao -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--basePackage 属性是让你为映射器接口文件设置基本的包路径,你可以使用分号或逗号 作为分隔符设置多于一个的包路径。 -->
<property name="basePackage" value="com.acgg.testMaven.*.dao" />
<!--可省略此步骤,因 为 MapperScannerConfigurer 将会创建 MapperFactoryBean,之后自动装配(前提是只有一个DataSource) -->
<!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> -->
</bean> <!-- 启用对事务注解的支持 -->
<tx:annotation-driven transaction-manager="transactionManager" /> <!--对datasource数据源进行事务处理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean> <!-- 拦截器方式配置事物 -->
<tx:advice id="userTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--当代理的service层中的方法抛出异常的时候才回滚,必须加rollback-for参数 -->
<tx:method name="insert*" propagation="REQUIRED"
rollback-for="Throwable" />
<tx:method name="del*" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="update*" propagation="REQUIRED"
rollback-for="Throwable" />
<tx:method name="add*" propagation="REQUIRED" rollback-for="Throwable" />
<!--除了上面标识的方法,其他方法全是只读方法 -->
<tx:method name="*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice> <!-- 配置哪些类的方法需要进行事务管理 -->
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* com.acgg.bookshop.*.service.*.*(..))"
advice-ref="userTxAdvice" />
</aop:config> </beans>

前台jsp:

index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户列表</title>
</head>
<body>
<h2>Hello World!</h2>
<a href="user/queryUser.do" >显示用户</a></br>
<a href="user/showJsonUser.do" >json显示</a></br>
</body>
</html>

启动项目后输入http://localhost:8080/testMaven/访问

点击显示用户:

点击json显示:

maven搭建springmvc+mybatis项目的更多相关文章

  1. 从头开始基于Maven搭建SpringMVC+Mybatis项目(3)

    接上文内容,本节介绍基于Mybatis的查询和分页功能,并展示一个自定义的分页标签,可重复使用以简化JSP页面的开发. 从头阅读传送门 在上一节中,我们已经使用Maven搭建好了项目的基础结构,包括一 ...

  2. Maven搭建SpringMVC+Mybatis项目详解

    前言 最近比较闲,复习搭建一下项目,这次主要使用spring+SpringMVC+Mybatis.项目持久层使用Mybatis3,控制层使用SpringMVC4.1,使用Spring4.1管理控制器, ...

  3. 从头开始基于Maven搭建SpringMVC+Mybatis项目(1)

    技术发展日新月异,许多曾经拥有霸主地位的流行技术短短几年间已被新兴技术所取代. 在Java的世界中,框架之争可能比语言本身的改变更让人关注.近几年,SpringMVC凭借简单轻便.开发效率高.与spr ...

  4. 从头开始基于Maven搭建SpringMVC+Mybatis项目(2)

    接上文内容,本节介绍Maven的聚合和继承. 从头阅读传送门 互联网时代,软件正在变得越来越复杂,开发人员通常会对软件划分模块,以获得清晰的设计.良好的分工及更高的可重用性.Maven的聚合特性能把多 ...

  5. 从头开始基于Maven搭建SpringMVC+Mybatis项目(4)

    接上文内容,上一节中的示例中完成了支持分页的商品列表查询功能,不过我们的目标是打造一个商品管理后台,本节中还需要补充添加.修改.删除商品的功能,这些功能依靠Mybatis操作数据库,并通过Spring ...

  6. Maven搭建SpringMVC+MyBatis+Json项目(多模块项目)

    一.开发环境 Eclipse:eclipse-jee-luna-SR1a-win32; JDK:jdk-8u121-windows-i586.exe; MySql:MySQL Server 5.5; ...

  7. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  8. Maven搭建SpringMVC + SpringJDBC项目详解

    前言 上一次复习搭建了SpringMVC+Mybatis,这次搭建一下SpringMVC,采用的是SpringJDBC,没有采用任何其他的ORM框架,SpringMVC提供了一整套的WEB框架,所以如 ...

  9. Maven搭建SpringMVC+Hibernate项目详解

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

随机推荐

  1. 王立平--查看SQLite中的数据信息

    Eclipse菜单Window - Open Perspective - DDMS进入DDMS视图. 然后File Explorer View中依次展开路径/data/data/package_nam ...

  2. 20155211 网络攻防技术 Exp7 网络欺诈防范

    20155211 网络攻防技术 Exp7 网络欺诈防范 实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工具建立冒名网站 (2)e ...

  3. EZ 2018 04 06 NOIP2018 模拟赛(七)

    我是链接 这次是真的惨,码了将近2hours的可持久化线段树炸掉了! 而且本地拍了一万年也没发现哪里炸了. T1 压位的入门题,话说这道题能拿个99分就可以了(100分要FFT) 对于暴力,就是暴力找 ...

  4. Ms.office2010安装教程

    下面用到的软件下载地址如下:http://pan.baidu.com/s/1c08cxPI 第一步 1. 将压缩包office2010.rar解压解压后,会出现一个office2010文件夹如图1.1 ...

  5. 如何写论文的introduction

    重要的是写Introduction.写Introduction就和写童话一样.(转自知乎珵cici) 1. 有一条巨龙抓走了公主 (介绍你的问题为什么值得研究) 2. 巨龙是多么多么多么难打(强调你的 ...

  6. HTML 图像实例

    61.插入图像本例演示如何在网页中显示图像.图像标签(<img>)和源属性(Src)在 HTML 中,图像由 <img> 标签定义. <img> 是空标签,意思是说 ...

  7. 详细解析 nginx uri 如何匹配 location 规则

    location 是 nginx 配置中出现最频繁的配置项,一个 uri 是如何与多个 location 进行匹配的? 在有多个 location 都匹配的情况下,如何决定使用哪一个 location ...

  8. 比较 VGG, resnet和inception的图像分类效果

    简介 VGG, resnet和inception是3种典型的卷积神经网络结构. VGG采用了3*3的卷积核,逐步扩大通道数量 resnet中,每两层卷积增加一个旁路 inception实现了卷积核的并 ...

  9. 日本厚劳省对IT技术人员展开确保海外人才调查

    新浪美股讯 5月13日消息,共同社报道,日本厚生劳动省将开始对在国内工作的外国籍系统工程师(SE)及程序员的劳动条件进行实际状况调查.为避免在与海外的人才获取竞争中败北,希望掌握接纳企业的需求等推动企 ...

  10. 2-Eighteenth Scrum Meeting-20151218

    任务安排 成员 今日完成 明日任务 闫昊 写完学习进度记录的数据库操作  写完学习进度记录的数据库操作 唐彬 编写与服务器交互的代码 和服务器老师交流讨论区后台接口 史烨轩 获取视频url  尝试使用 ...