SpringBoot整合Mybatis遇到的问题

一、SpringBoot如何在自定义的类中调用Service

// 第一步:加个@Component
@Component
public class CheckClient {
    // 第二步:注入要调用的Service
    @Autowired
    CheckClientService checkClientService;

    // 第三步:声明一个这个类的静态对象
    private static CheckClient checkClient;

    // 第四步:加入一个init方法,加上@PostConstruct
    @PostConstruct
    public void init() {
        checkClient= this; //⑤
        checkClient.checkClientService = this.checkClientService; // 这步一定要
    }

    public void run(){
    	// 最后:一定要使用checkClient.checkClientService去调用Service中的方法,不然调不到
        List<String> list = checkClient.checkClientService.scanReport();
        checkClient.checkClientService.modifyCheckState(list);
        List<String> ruleList = checkClient.checkClientService.findRuleByTableCode("880");
        for(String rule : ruleList){
            int leftSum = 0;
            int rightSum = 0;
            //根据tablecode和rule取detail表里查
            List<RuleDetail> checkDetail = checkClient.checkClientService.findCheckDetail("880", rule);
            for(RuleDetail ruleDetail : checkDetail){
                String leftSql = ruleDetail.getLeftsql();
                String rightSql = ruleDetail.getRightsql();
                Integer leftResult = checkClient.checkClientService.customQueryItem(leftSql);
                Integer rightResult = checkClient.checkClientService.customQueryItem(rightSql);
                leftSum = leftSum + leftResult;
                rightSum  = rightSum + rightResult;
            }
            System.out.println("111");
        }
        System.out.println("111");
    }
}

二、Mybatis的paramterTpye为List怎么遍历处理?

需要在Dao层加上(@Param(“checkStateList”)注解 ,不然会报

Parameter ‘XXX‘ not found. Available parameters are [collection, list]

mapper里这样写就可以了

<update id="modifyCheckState" parameterType="java.util.List">
    <if test="checkStateList != null and checkStateList.size() > 0">
      
      <foreach collection="checkStateList" item="id" separator=";">
        UPDATE prt_task_checkstate SET checkstate = 0 WHERE id = #{id}
      foreach>
    if>
  update>

三、SpringBoot中怎样打印Mybatis执行的sql语句

在application.yml中添加如下配置即可

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

四、Mybatis怎样执行任意的查询语句

问题背景:在表中由一个列是sql语句,现在需要根据id查询对应的sql语句然后执行

解决方法:

1、dao层新增一个接口,因为列中sql执行的结果是一个整数,所以这里方法返回值就直接用Integer了

Integer customQueryItem(String sqlContent);

2、在mapper中写sql

  <select id="customQueryItem" parameterType="String" resultType="java.lang.Integer">
         
    select>

这样就可以了

你可能感兴趣的:(SpringBoot)