一、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}%'