1.新建一个工程

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

2.工程目录

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

3.添加gradle.properties文件

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
activeMQVersion=5.7.0
aspectJVersion=1.7.2
commonsLangVersion = 3.1
ehcacheVersion=2.7.4
ehcacheJCacheVersion=1.4.0-beta1
h2Version=1.4.182
hamcrestVersion = 1.3
hibernateVersion=4.1.6.Final
hibernateEntityManagerVersion=4.0.1.Final
hibernateValidatorVersion = 5.0.1.Final
jacksonVersion=2.4.3
javaxMailVersion=1.4.7
jspApiVersion = 2.1
jspElVersion = 2.2.4
jstlVersion = 1.2
junitVersion=4.12
log4jVersion=1.2.14
mockitoVersion=1.9.5
servletApiVersion = 3.1.0
slf4jVersion = 1.7.5
springAMQPVersion=1.0.0.RELEASE
springDataJpaVersion=1.3.2.RELEASE
springSecurityVersion = 3.2.0.RELEASE
springVersion=4.0.7.RELEASE
springWebflowVersion=2.4.1.RELEASE
systemRulesVersion=1.5.0
thymeleafVersion = 2.1.3.RELEASE
tilesVersion = 3.0.1
mysql_Java = 5.1.38
commons_dbcp = 1.4
mybatis_spring =1.2.5
mybatisVersion = 3.3.1
使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

4.添加依赖,修改build.gradle文件

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
group 'com.huang'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse'
apply plugin: 'idea'

sourceCompatibility = 1.5

repositories {
    maven { url 'http://maven.springframework.org/release' }
    maven { url 'http://maven.springframework.org/milestone' }
    maven { url 'http://maven.springframework.org/snapshot' }
    maven { url 'http://download.java.net/maven/2' }
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testCompile"org.springframework:spring-test:${springVersion}"
    testCompile "com.github.stefanbirkner:system-rules:${systemRulesVersion}"
    compile "org.springframework:spring-core:$springVersion"
    compile "org.springframework:spring-context:$springVersion"
    compile "org.springframework:spring-jdbc:$springVersion"
    compile "org.mybatis:mybatis:$mybatisVersion"
    compile "org.mybatis:mybatis-spring:$mybatis_spring"
    compile "commons-dbcp:commons-dbcp:$commons_dbcp"
    compile "mysql:mysql-connector-java:$mysql_Java"
    compile "log4j:log4j:$log4jVersion"
    compile "com.h2database:h2:$h2Version"
    compile "javax.inject:javax.inject:1"
    compile "net.sf.ehcache:ehcache:$ehcacheVersion"
    compile "net.sf.ehcache:ehcache-jcache:$ehcacheJCacheVersion"

}
使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

5.执行sql脚本,创建数据库表

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for tbl_dep
-- ----------------------------
DROP TABLE IF EXISTS `tbl_dep`;
CREATE TABLE `tbl_dep` (
  `depId` varchar(20) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`depId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tbl_dep
-- ----------------------------
INSERT INTO `tbl_dep` VALUES ('01', '总公司');
INSERT INTO `tbl_dep` VALUES ('0101', '一分公司');
INSERT INTO `tbl_dep` VALUES ('010101', '开发部');
INSERT INTO `tbl_dep` VALUES ('010102', '测试部');
INSERT INTO `tbl_dep` VALUES ('0102', '二分公司');
INSERT INTO `tbl_dep` VALUES ('010201', '开发部');
INSERT INTO `tbl_dep` VALUES ('010202', '测试部');

-- ----------------------------
-- Table structure for tbl_user
-- ----------------------------
DROP TABLE IF EXISTS `tbl_user`;
CREATE TABLE `tbl_user` (
  `userId` varchar(20) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `depId` varchar(20) NOT NULL,
  `sex` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`userId`),
  KEY `TBL_USER_FK` (`depId`),
  CONSTRAINT `TBL_USER_FK` FOREIGN KEY (`depId`) REFERENCES `tbl_dep` (`depId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tbl_user
-- ----------------------------
INSERT INTO `tbl_user` VALUES ('user0001', '张三1', '010101', '男');
INSERT INTO `tbl_user` VALUES ('user0002', '张三2', '010101', '男');
INSERT INTO `tbl_user` VALUES ('user0003', '张三3', '010102', '男');
INSERT INTO `tbl_user` VALUES ('user0004', '张三4', '010201', '男');
INSERT INTO `tbl_user` VALUES ('user0005', '张三5', '010201', '男');
INSERT INTO `tbl_user` VALUES ('user0006', '张三6', '010102', '男');
SET FOREIGN_KEY_CHECKS=1;
使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

6.创建实体类User,对应tbl_user表

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

 

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
package com.huang.domain;

/**
 * Created by huangyichun on 2016/12/9.
 */
public class User {

    private String userId;
    private String name;
    private String depId;
    private String sex;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepId() {
        return depId;
    }

    public void setDepId(String depId) {
        this.depId = depId;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId='" + userId + '\'' +
                ", name='" + name + '\'' +
                ", depId='" + depId + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}
使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

7. 创建接口UserMapper,其中部分采用注解形式

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
package com.huang.mapper;

import com.huang.domain.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface UserMapper {


    @Select("SELECT * FROM tbl_user")
    List<User> getUserList();

    @Select("SELECT * FROM tbl_user WHERE userId = #{userId}")
    User getUserById(@Param("userId") String userId);

    @Update("UPDATE tbl_user SET sex = #{sex} WHERE userId = #{userId}")
    void updateUserEmailById(@Param("userId") String userId, @Param("sex") String sex);

    @Delete("DELETE FROM tbl_user WHERE userId = #{userId}")
    void deleteUserById(@Param("userId") String userId);

    void insertUser(User user);
}
使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

8.创建UserMapper.xml文件,放在

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

如果放在java的com.huang.mapper文件夹下,将不会自动加载,这个Idea有关系

 

9.创建配置类

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
package com.huang.config;
import org.apache.commons.dbcp.BasicDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

@Configuration
@MapperScan(basePackages = "com.huang.mapper")
public class DataConfig {

    @Bean
    public BasicDataSource dataSource(){
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8");//防止乱码
        dataSource.setUsername("root");
        dataSource.setPassword("huangyichun");
        dataSource.setInitialSize(5);
        dataSource.setMaxActive(10);
        return dataSource;
    }

    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setTypeAliasesPackage("com.huang.domain");
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return sessionFactory;
    }
}
使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

 

10.创建测试类

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
import com.huang.config.DataConfig;
import com.huang.domain.User;


import com.huang.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = DataConfig.class)
public class TestMybatis {

    @Autowired
    private UserMapper userMapper;
    @Test
    public void getUserById(){
        User user = userMapper.getUserById("user0005");
        System.out.println(user.toString());
    }

    @Test
    public void getUserList(){
        List<User> list = userMapper.getUserList();
        for (User user : list){
            System.out.println(user.toString());
        }
    }

   @Test
    public void updateUserEmailById(){
        userMapper.updateUserEmailById("user0006","女");
    }

    @Test
    public void deleteUserById(){
        userMapper.deleteUserById("user0006");
    }

    @Test
    public void insertUser(){
        User user = new User();
        user.setUserId("user0008");
        user.setName("张三7");
        user.setDepId("010102");
        user.setSex("男");
        userMapper.insertUser(user);
    }

}
使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

 

 nateliu  2016-10-02  原文

前提:

1,已安装JDK

2, 有Intellij IDEA

3, 已安装Gradle

一分钟实现步骤:

1,mkdir Spring-MVC;cd Spring-MVC
2,gradle init
3,edit build.gradle file

  1. /*
  2. * This build file was auto generated by running the Gradle 'init' task
  3. * by 'Administrator' at '16-10-2 下午8:42' with Gradle 3.1
  4. *
  5. * This generated file contains a commented-out sample Java project to get you started.
  6. * For more details take a look at the Java Quickstart chapter in the Gradle
  7. * user guide available at https://docs.gradle.org/3.1/userguide/tutorial_java_projects.html
  8. */
  9.  
  10. buildscript {
  11. repositories {
  12. jcenter()
  13. }
  14. dependencies {
  15. classpath 'org.akhikhl.gretty:gretty:+'
  16. }
  17. }
  18.  
  19. ext {
  20. springVersion = '4.3.3.RELEASE'
  21. }
  22.  
  23. //apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
  24. apply plugin: 'org.akhikhl.gretty'
  25.  
  26. apply plugin: 'java'
  27. apply plugin: 'war'
  28. apply plugin: 'eclipse'
  29. apply plugin: 'idea'
  30.  
  31. // In this section you declare where to find the dependencies of your project
  32. repositories {
  33. // Use 'jcenter' for resolving your dependencies.
  34. // You can declare any Maven/Ivy/file repository here.
  35. jcenter()
  36. mavenCentral()
  37. maven { url 'http://repo.spring.io/release' }
  38. }
  39.  
  40. // In this section you declare the dependencies for your production and test code
  41. dependencies {
  42. //core spring
  43. compile ("org.springframework:spring-context:$springVersion")
  44. compile ("org.springframework:spring-core:$springVersion")
  45. compile ("org.springframework:spring-webmvc:$springVersion")
  46.  
  47. // The production code uses the SLF4J logging API at compile time
  48. compile ("org.slf4j:slf4j-api:1.7.21")
  49.  
  50. // Declare the dependency for your favourite test framework you want to use in your tests.
  51. // TestNG is also supported by the Gradle Test task. Just change the
  52. // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
  53. // 'test.useTestNG()' to your build script.
  54. testCompile ("junit:junit:4.12")
  55. }

build gradle

4,mkdir src\main\java ; mkdir src\main\resources ; mkdir src\main\webapp
 mkdir src\main\webapp\WEB-INF
 mkdir src\test\java ; mkdir src\test\resources
5,将项目导入idea,因为gradlew idea这个命令会生成一些多余的文件,不喜欢垃圾多余的东西,故直接导入

6,Spring MVC本质上就是Servlet, 所以需要定义一个web.xml和一个Spring MVC的配置文件,在WEB-INF下面添加web.xml和spring-mvc-servlet.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">
  5.  
  6. <servlet>
  7. <servlet-name>spring-mvc</servlet-name>
  8. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  9. <load-on-startup>1</load-on-startup>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>spring-mvc</servlet-name>
  13. <url-pattern>/</url-pattern>
  14. </servlet-mapping>
  15. </web-app>

web.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:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:mvc="http://www.springframework.org/schema/mvc"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd
  12. http://www.springframework.org/schema/mvc
  13. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  14.  
  15. <mvc:annotation-driven></mvc:annotation-driven>
  16. <context:component-scan base-package="org.springframework.samples"/>
  17. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  18. <property name="prefix" value="/WEB-INF/views/"/>
  19. <property name="suffix" value=".jsp"/>
  20. </bean>
  21.  
  22. </beans>

spring-mvc-servlet.xml

关于Spring MVC的配置文件,最简的配置是申明p,context,mvc命名空间即可。上面p其实是没有用到的。

7,根据第6步的spring-mvc-servlet.xml的配置,还需要在WEB-INF文件夹下面创建一个views文件夹,并且新建文件home.jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: Administrator
  4. Date: 2016/10/2 0002
  5. Time: 21:53
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>Home</title>
  12. </head>
  13. <body>
  14. <h1>
  15. Hello world!
  16. </h1>
  17.  
  18. <P> The time on the server is ${serverTime}. </P>
  19. </body>
  20. </html>

home.jsp

8,HomeController.java

  1. package org.springframework.samples;
  2.  
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.ui.Model;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestMethod;
  9.  
  10. import java.text.DateFormat;
  11. import java.util.Date;
  12. import java.util.Locale;
  13.  
  14. /**
  15. * Created by Administrator on 2016/10/2 0002.
  16. */
  17. @Controller
  18. public class HomeController {
  19. private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
  20.  
  21. /**
  22. * . * Simply selects the home view to render by returning its name.
  23. * .
  24. */
  25. @RequestMapping(value = "/", method = RequestMethod.GET)
  26. public String home(Locale locale, Model model) {
  27. logger.info("Welcome home! The client locale is {}.", locale);
  28.  
  29. Date date = new Date();
  30. DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
  31.  
  32. String formattedDate = dateFormat.format(date);
  33.  
  34. model.addAttribute("serverTime", formattedDate);
  35.  
  36. return "home";
  37. }
  38.  
  39. }

HomeController.java

9,

  1. gradlew tomcatRun

10, http://localhost:8080/Spring-MVC/

11,理论延伸,Spring MVC的Servlet一共有三个层次

  HttpServletBean,直接继承于Java的HttpServlet, 将Servlet中配置的参数设置到相应的属性,并不参与实际请求的处理

  FrameworkServlet,初始化WebApplicationContext,将不同类型的请求合并到processRequest方法中统一处理

  DispatcherServlet,初始化自身的9个组件,主要将请求交给doDispatch方法具体处理。哪9大组件呢?他们是:

    HandlerMapping,根据request找到相应的Handler(就是常说的Controller)和Interceptors.

    HandlerAdapter,共有3个方法,supports判断是否可以使用某Handler,handler方法具体用Handler干活,getLastModified是用来获取资源的Last Modified.

    HandlerExceptionResolver,根据异常设置ModelAndView.并转交给render方法进行渲染。

    ViewResolver,将String类型的视图名和Locale解析为View类型的视图

    RequestToViewNameTranslator,根据request获取到视图名,因为有些handler并没有返回视图名的。我想这个是实现404的最好组件了,一个spring mvc容器里只能配置一个。

    LocaleResolver,根据request解析出Locale

    ThemeResolver,根据request解析出主题名

    MultipartResolver,用于处理上传文件,将普通的request转换成MultipartHttpServletRequest

    FlashMapManager,用于管理FlashMap的,而FlashaMap主要用于redirect中传递参数

使用IDEA和gradle搭建Spring MVC和MyBatis开发环境

Java配置

按Spring的发展趋势,现在推荐使用Java配置,下面就让我们来抛弃xml而拥抱Java配置吧

前面1-5步一样的。从第6步开始开始改变

6, 要抛弃web.xml,必须要在支持Servlet3.0+的服务器才行,实现只需扩展一下

  1. AbstractAnnotationConfigDispatcherServletInitializer
  1. public class SampleWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  2. @Override
  3. protected Class<?>[] getRootConfigClasses() {
  4. return new Class<?>[0];
  5. }
  6.  
  7. @Override
  8. protected Class<?>[] getServletConfigClasses() {
  9. return new Class<?>[]{SpringMVCConfig.class};
  10. }
  11.  
  12. @Override
  13. protected String[] getServletMappings() {
  14. return new String[]{"/"};
  15. }
  16. }

SampleWebAppInitializer

接下来使用IDEA的Alter +Enter, 自动生成SpringMVCConfig.java

  1. @Configuration
  2. @EnableWebMvc
  3. @ComponentScan("org.springframework.samples.controllers")
  4. public class SpringMVCConfig extends WebMvcConfigurerAdapter {
  5. @Bean
  6. public ViewResolver viewResolver() {
  7. InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  8. resolver.setPrefix("/WEB-INF/views/");
  9. resolver.setSuffix(".jsp");
  10. ;
  11. resolver.setExposeContextBeansAsAttributes(true);
  12. return resolver;
  13. }
  14.  
  15. @Override
  16. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  17. configurer.enable();
  18. }
  19. }

SpringMVCConfig

7, 可以复制xml版本的jsp

8,根据SpringMVCConfig.java里的componentscan里的约定,我们将HomeController放在controllers下面。内容同xml版本

9,测试

相关文章:

  • 2021-10-22
  • 2021-12-23
  • 2022-01-17
  • 2021-12-15
  • 2021-09-17
  • 2021-09-15
  • 2022-12-23
猜你喜欢
  • 2021-08-13
  • 2022-01-22
  • 2022-12-23
  • 2021-12-23
  • 2022-12-23
  • 2021-08-11
相关资源
相似解决方案