Gradle + IDEA 搭建一个 Spring + SpringMVC + Mybatis 的极速后台开发框架

被刻印的时光 ゝ 提交于 2019-12-03 04:28:46

一、创建项目

Create New Project

    -> Gradle -> Java & Web

    -> GroupId & ArtifactId

    -> Create sparete module per source set & Use local gradle distribution

    -> select “Gradle home”

    -> Next

    -> Finish

 

二、搭建项目结构

项目结构如下:

其中:

config: 保存 Spring 的一些配置

controller: Controller

dao: DAO

model: Model

service: Service

utils: Servlet 配置

 

没有web.xml。

 

三、完善项目

 

四、各文件内容

SpringCoreConfig.java

package com.haier.demo.config;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@ComponentScan({ "com.haier.demo.service" })
public class SpringCoreConfig {
}

该文件用以代替spring-core-config.xml

 

SpringWebConfig.java

package com.haier.demo.config;


import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;


@EnableWebMvc
@Configuration
@ComponentScan({ "com.haier.demo.controller" })
public class SpringWebConfig extends WebMvcConfigurerAdapter {
   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
       registry.addResourceHandler("/resources/**")
               .addResourceLocations("/resources/");
   }


   @Bean
   public InternalResourceViewResolver viewResolver() {
       InternalResourceViewResolver viewResolver
               = new InternalResourceViewResolver();
       viewResolver.setViewClass(JstlView.class);
       viewResolver.setPrefix("/WEB-INF/views/jsp/");
       viewResolver.setSuffix(".jsp");
       return viewResolver;
   }


   @Bean
   public BasicDataSource dataSource() {
       BasicDataSource dataSource = new BasicDataSource();


       dataSource.setDriverClassName("com.mysql.jdbc.Driver");
       dataSource.setUrl("jdbc:mysql://localhost:3306/dummydb");
       dataSource.setUsername("dummy_user");
       dataSource.setPassword("dummy_password");


       return dataSource;
   }


   @Bean
   public SqlSessionFactory sqlSessionFactory(){
       SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
       sqlSessionFactoryBean.setDataSource(dataSource());
       try {
           return sqlSessionFactoryBean.getObject();
       } catch (Exception e) {
           throw new RuntimeException(e);
       }
   }


   @Bean
   public MapperScannerConfigurer mapperScanner(){
       MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
       mapperScannerConfigurer.setBasePackage("com.haier.demo.dao");
       return mapperScannerConfigurer;
   }
}

该文件用以代替spring-web-config.xml

 

DummyController.java

package com.haier.demo.controller;


import com.haier.demo.model.DummyModel;
import com.haier.demo.service.IDummyService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.*;


@RestController
@Configuration
@ComponentScan("com.haier.demo.service")
public class DummyController {
   private final Logger logger = LoggerFactory.getLogger(DummyController.class);
   @Autowired
   private IDummyService dummyService;


   /**
    * @author: yunpeng.liu
    * @date: 11/11/16
    * @http_method: GET
    * @url: http://localhost:9080/dummy_get?name=li&gender=0
    * @param name
    * @param gender
    * @return
    */
   @RequestMapping(
           value = "/dummy_get",
           method = RequestMethod.GET,
           produces = "application/json")
   public DummyModel get(@RequestParam("name") String name, @RequestParam("gender") int gender) {


       logger.debug("DummyController.get()");


       return dummyService.findById(1);
   }


   /**
    * @author: yunpeng.liu
    * @date: 11/11/16
    * @http_method: POST
    * @url: http://localhost:9080/dummy_post
    * @param model
    * @return
    */
   @RequestMapping(
           value = "/dummy_post",
           method = RequestMethod.POST,
           produces = "application/json")
   public DummyModel post(@RequestBody DummyModel model) {
       logger.debug("DummyController.post()");


       DummyModel response = new DummyModel();


       dummyService.insert(model);


       return response;
   }
}

 

DummyDAO.java

package com.haier.demo.dao;


import com.haier.demo.model.DummyModel;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;


import java.util.List;


public interface DummyDAO {
   @Insert("insert into user (name,gender) values(#{name},#{gender})")
   public int insert(DummyModel dummyModel);


   @Update("update user set name=#{username},gender=#{gender} where id=#{id}")
   public int update(DummyModel dummyModel);


   //推荐使用update delete_flag字段进行软删除
   @Delete("delete from user where id=#{id}")
   public int delete(int id);


   @Select("select * from user ")
   public List<DummyModel> selectAll();


   @Select("select * from user where id=#{id}")
   public DummyModel findById(int id);
}

 

DummyModel.java

package com.haier.demo.model;


import com.fasterxml.jackson.annotation.JsonProperty;


public class DummyModel {
   @JsonProperty("id")
   private int id;


   @JsonProperty("name")
   private String name;


   @JsonProperty("gender")
   private boolean gender;


   public int getId() {
       return id;
   }


   public void setId(int id) {
       this.id = id;
   }


   public String getName() {
       return name;
   }


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


   public boolean isGender() {
       return gender;
   }


   public void setGender(boolean gender) {
       this.gender = gender;
   }
}

 

DummyService.java

package com.haier.demo.service;


import com.haier.demo.dao.DummyDAO;
import com.haier.demo.model.DummyModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.util.List;


@Service
public class DummyService implements IDummyService{
   private static final Logger logger = LoggerFactory.getLogger(DummyService.class);
   @Autowired
   private DummyDAO dummyDAO;


   public DummyDAO getDummyDAO(){
       return dummyDAO;
   }


   public void setDummyDAO(DummyDAO dummyDAO){
       this.dummyDAO = dummyDAO;
   }


   public int delete(int id) {
       return this.dummyDAO.delete(id);
   }


   public DummyModel findById(int id) {
       return this.dummyDAO.findById(id);
   }


   public int insert(DummyModel dummyModel) {
       return this.dummyDAO.insert(dummyModel);
   }


   public List<DummyModel> selectAll() {
       return this.dummyDAO.selectAll();
   }


   public int update(DummyModel dummyModel) {
       return this.dummyDAO.update(dummyModel);
   }
}

 

IDummyService.java

package com.haier.demo.service;


import com.haier.demo.model.DummyModel;


import java.util.List;


public interface IDummyService {
   public int insert(DummyModel dummyModel);


   public int update(DummyModel dummyModel);


   public int delete(int id);


   public List<DummyModel> selectAll();


   public DummyModel findById(int id);
}

 

WebInitializer.java

package com.haier.demo.utils;


import com.haier.demo.config.SpringCoreConfig;
import com.haier.demo.config.SpringWebConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;


public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
   @Override
   protected Class<?>[] getRootConfigClasses() {
       return new Class[] { SpringCoreConfig.class };
   }


   @Override
   protected Class<?>[] getServletConfigClasses() {
       return new Class[] { SpringWebConfig.class };
   }


   @Override
   protected String[] getServletMappings() {
       return new String[] { "/" };
   }
}

该文件用以替代web.xml。

 

五、配置tomcat,运行项目

 

PS. 还有很多地方没有完善,没有 AOP 来控制权限并记录日志,没有反射简化 Service 。呐,回头加。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!