springboot 快速搭建 restcontroller

碰到的坑,

一个是 service(若没有实现类)不能实现dao接口,否则报错。直接注入就好。若实现了dao接口,会包内存溢出错误,将进行无限循环。

二是,在启动类上,需要加入扫描mapper的package名称,否则报 mapper里面的bean没有实例化。

在controller里,映射文件,不需要加“/”斜杠,只需要加名称即可。

需要注意的是,在application文件中,需要指定mapper的xml的位置。否则也报错。

@SpringBootApplication
@MapperScan(basePackages = {"cn.taotao.dao"})       //需要指定!!
public class TransactionalTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TransactionalTestApplication.class, args);
    }

}

在pom中必须引入web的starter,即使是json的restcontroller,也必须引入web starter

其他的都和之前一篇一样。参阅:

springboot的事务管理的一个完整demo

这个的代码如下:

UserService 

package cn.taotao.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.taotao.bean.User;
import cn.taotao.dao.UserMapper;

@Service
public class UserService  {

    @Autowired
    private UserMapper userMapper;
    
    public int deleteByPrimaryKey(Integer id) {
        // TODO Auto-generated method stub
        return 0;
    }

    
    public int insert(User record) {
        // TODO Auto-generated method stub
        return 0;
    }

    
    public int insertSelective(User record) {
        // TODO Auto-generated method stub
        return 0;
    }

    
    public User selectByPrimaryKey(Integer id) {
        // TODO Auto-generated method stub
        return null;
    }

    
    public int updateByPrimaryKeySelective(User record) {
        // TODO Auto-generated method stub
        return 0;
    }

    
    public int updateByPrimaryKey(User record) {
        // TODO Auto-generated method stub
        return 0;
    }

    
    public List<User> queryAll() {
        // TODO Auto-generated method stub
        return this.userMapper.queryAll();
    }

}

controller

package cn.taotao.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import cn.taotao.bean.User;
import cn.taotao.service.UserService;

@RestController
public class IndexController {

    @Autowired
    private UserService userService;
    
    @RequestMapping(value= {"/","/index"})
    @ResponseBody
    public List<User> getIndex() {
        ModelAndView mv = new ModelAndView("index");
        List<User> queryAll = this.userService.queryAll();
        mv.addObject("users", queryAll);
    //    return mv;
        return queryAll;
    }
    
}

application.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
      username: root
      password: xxxxx
      initial-size: 1
      min-idle: 1
      max-active: 50
      max-wait: 15000
      enable: true
      test-on-borrow: true
      test-on-return: true
      test-while-idle: true
  mvc:
    view:
      suffix: .jsp
      
mybatis:
  mapper-locations:
   - classpath:mapper/*Mapper.xml              
   #这个需要指出,否则不会加载mapper.xml文件
 
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 

pom.xml

<!-- 手动添加 -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <!-- <version>2.4.2</version> -->
        </dependency>
        <!--/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <!--servlet依赖的jar包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--jsp依赖的jar包 -->
        <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        

入口启动类

@SpringBootApplication
@MapperScan(basePackages = {"cn.taotao.dao"})
public class TransactionalDemoApplication {

    
    public static void main(String[] args) {
        SpringApplication.run(TransactionalDemoApplication.class, args);
    }

}
原文地址:https://www.cnblogs.com/sdgtxuyong/p/14471055.html