Spring Boot常见配置及错误

时间:2022-01-23 16:18:55

一、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