Springboot开发中数据流向总结

1.相关配置:

  • 配置appication.xml文件   该文件中主要配置数据库连接、mybatis、server、log相关信息,配置如下:

spring:

  datasource:

    url : jdbc:mysql://IP地址+端口号/reportforms?useAffectedRows=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
    username: username
    password : password
    driverClassName : com.mysql.jdbc.Driver       

mybatis:
mapperLocations :
 classpath:mapper/*.xml   ##配置mapper映射的路径,用户定义接口获取数据库查询后的数据
server:
port: 8060
servlet:
context-path: /reportforms

##log日志配置

logging:
 file: logs/application_log.log
level:
 ROOT: INFO
 org.springframework.boot: INFO
org.springframework.web: INFO
pattern:
 console: "%d - %msg%n"

2.src/main/resources 数据源的获取

  • 该处是通过配置数据库字段(查看数据库对应字段)和属性(model层使用)

<?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.changan.reportFormsMysql.mapper.basic.IAMapper">

<resultMap id="AR"
        type="com.changan.reportFormsMysql.model.AModel">
        <result column="字段1" jdbcType="VARCHAR" property="属性名1" />
        <result column="字段2" jdbcType="VARCHAR" property="属性名2" />
        <result column="字段3" jdbcType="VARCHAR" property="属性名3" />
        <result column="字段4" jdbcType="VARCHAR" property="属性名4" />
        <result column="字段5" jdbcType="VARCHAR" property="属性名5" />
        <result column="字段6" jdbcType="VARCHAR" property="属性名6" />
        <result column="字段7" jdbcType="VARCHAR" property="属性名7" />
        <result column="字段8" jdbcType="VARCHAR" property="属性名8" />  
    </resultMap>

<!--  下面的id相当于函数,其他地方会使用是个函数,resultMap是通过上面的配置进行拉取  -->

<select id="getARatio" resultMap="AR">
    SELECT
    *
    FROM
    active_ratio
    WHERE
    series_code=#{参数}
    ORDER BY
    yearmonth
    DESC
</select>

</mapper>

  • @Mapper 这块是属于mybatis机制中内容,定义数据接口,注明这个是一个mapper映射,这里就是通过书写接口以及注解@Mapper进行使用。

@Mapper

public interface IAMapper {

   //红色参数要与数据库配置的mapper内容一致

     public ArrayList<AModel> getARatio(@Param(value="参数") String carSeries);        
}

3.Model层数据

该处主要是将数据库配置中的.xml文件property进行映射,得到set和get方法,后续在用户进行访问时进行调用,同样可以使用lombok进行配置。

public class AModel {

        private String seriesCode;
        private String yearmonth;
        private String activecount;
        private String activesum;
        private String salecount;
        private String salesum;
        private String activeratio;
        private String updateTime;
        
        public String getSeriesCode() {
            //System.out.println("------------调用model中的getSeries()函数----------");
            logger.error("------------调用model中的getSeries()函数----------");
            return seriesCode;
        }
        Logger logger = LoggerFactory.getLogger(ReportFormsController.class);
        public void setSeriesCode(String seriesCode) {

            //System.out.println("------------调用model中的setSeries()函数----------");
            logger.error("------------调用model中的setSeries()函数----------");
            
            
            this.seriesCode = seriesCode;
        }
        public String getYearmonth() {
            return yearmonth;
        }
        public void setYearmonth(String yearmonth) {
            this.yearmonth = yearmonth;
        }

        ·

           ·
           ·   
  
}

4.Service层

主要是进行业务数据处理,一些算法可以在该层实现,并为Controller提供服务。

分为一个接口和实现类

public interface IA {

        public Msg getARatio(String carSeries) throws Exception;

}

实现中药标注@Service,代表是Service层

@Service
public class A implements IA {
    //该处通过自动注入mapper,将数据拉取过来,@Autowired主要是新建一个mapper对象,方便调用数据。
    @Autowired
    IAMapper mapper;
    
    @Override
    public Msg getARatio(String carSeries) {
        
        
        String valueSum;
        Msg msg = new Msg();
        ArrayList<AModel> res;
        try {
            Logger logger = LoggerFactory.getLogger(ReportFormsController.class);
            logger.error("----------------函数进入service-----------------");
            res = mapper.getARatio(carSeries);
            for (int i = 0; i < res.size(); i++) {
                
                valueSum = res.get(i).getActivecount() + res.get(i).getActivesum();
                logger.error("---------" + valueSum + "------------");
            }
            if (res.size() > 0) {
                msg.setCode(0);
                msg.setData(res);
            } else {
                msg.setCode(0);
                msg.setData(null);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
            msg.setCode(1);
            msg.setMsg(ResponseCode.ERROR.getDesc());
        }
        
        return msg;
    }
}

5.Controller层

采用@Contoller注解的方式,可以使接口的定义更加简单,将@Controller标记在某个类上,配合@RequestMapping注解,可以在一个类中定义多个接口,这样使用起来更加灵活。被@Controller标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类,而@Contoller注解在org.springframework.stereotype包下。其中被@RequestMapping标记的方法会被分发处理器扫描识别,将不同的请求分发到对应的接口上。ReportFormsController 即为一个自定类。在该类的前面标记@Controller,该类就成了一个控制器类。

@Controller
@RequestMapping("/report")
public class ReportFormsController {

/************************************************************
      * Author:T.song
      * Function: getARatio()接收用户输入参数
      ************************************************************/
     @Autowired
     IA iaservice;
    
     @PostMapping(value="/getA")
     @ResponseBody
     public Msg getARatio(@RequestParam(required=false) String carSeries){
          
         Logger logger = LoggerFactory.getLogger(ReportFormsController.class);
         logger.error("----------------函数进入controller-----------------");
            if (carSeries == null) {
                
                msg.setCode(0);
                msg.setMsg(ResponseCode.ILLEGAL_ARGUMENT.getDesc());
                logger.error(ResponseCode.ILLEGAL_ARGUMENT.getDesc());
                return msg;
                
            };
            
              try {
                  
                return iaservice.getARatio(carSeries);
            } catch (Exception e) {
                
                e.printStackTrace();
                logger.error(e.getMessage());
                msg.setCode(0);
                msg.setMsg(ResponseCode.ERROR.getDesc());
            }
              
            return msg;
          
      }

}

注意:上述内容由个人及其相关项目内容简化撰写,如有错误地方或表述不清楚地方请见谅,并希望您能帮忙指出。

猜你喜欢

转载自blog.csdn.net/manchengpiaoxue/article/details/84871998