Spring Boot常见配置及错误

一、SpringBoot常见配置

(1)SpingBoot与MyBatis集成时跟踪SQL语句

log4j:
  logger:
    java:
      sql:
        ResultSet: TRACE

(2)日志跟踪

debug: true
logging: 
  config: classpath:log4j2/log4j2.xml

license:
  file-path: xxx
@Value("${license.file-path}")
private String licenseFilePath

(3)MyBatis集成: 

#mybatis配置
mybatis:
  #配置映射类所在包名
  type-aliases-package: com.xx.it.model
  (数据库实体对象所在路径,一般为@Data对象,非Mapper注释项所在路径)
  #配置mapper.xml文件所在路径
  mapper-location: classpath:com/xx/it/*.xml(非必须项,可以不配)

#不需要再配置Spring任何文件
@SpringBootApplication
 public class Application {
   SpringApplication.run(Application.class,args);
 }

  Mapper所在路径不需要配置,系统会自动扫描与Application同级及以下的所有目录,同时对应的Spring也不需要配置

二、常见错误

(1)SpringBoot与MyBatis集成

  A.ResultMap与ResultType导致的问题

<resultMap id="sample" type="com.xx.it.SampleVo">
  <result property="id" column="id" />
  <result property="name" column="name" />
  <result property="useYn" column="use_yn" />
</resultMap>

<select id="selectSample" resultMap="sample">
  select id,name,useYn from sample where id = #{id}
</select>

<select id="getReply" parameterType="sampleVo" resultType="sample">
  select id,name,useYn from sample where id = #{id}
</select>

 如上情况当ResultMap与ResultType混用时,会出现java.lang.ClassNotFoundException错误,此时对应的解决方案如下:

   1、按照上述思路,统一换成ResultMap; 

   2、在定义resultMap的名字时,按照首字母小写的方式来命名。上例中为:sampVo;

  MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap.

  resultType是直接表示返回类型的(对应着我们的model对象中的实体),

  resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key-->value关系),但是resultType跟resultMap不能同时 存在。

  在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。

  ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。

 ②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用

  参见:http://www.ibloger.net/article/2434.html

  注:select语句中不能同时使用resultType和resultMap

   ResultMap:组装数据库中结果与实体对象的映射关系(将数据库中查询出来的结果映射给实体类)

   column:表中字段名;property:实体类的属性名

   ResultType:查询结果不需要映射时使用resultType

 个人总结:表中定义create_time,类中createTime,返回值类型为resultMap,如果用resultType,那么createTime字段的值为NULL.

 当使用ResultType进行输出映射时,只有查询出来的列名和pojo的属性名一致,该列才可以映射成功;   

 如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象;

 只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象; 

 B.#与$区别

  ${name}原样替换,#{name}是带单引号,占位符

 like '% %'在mybatis中应当写成like '%${name}%'而不是'%#{name}%'

参见:https://segmentfault.com/a/1190000004617028

posted @ 2017-09-26 22:07  moonandstar08  阅读(1158)  评论(0编辑  收藏  举报