文章目录
- 一、resulrMap结果映射
- 二、驼峰命名自动映射
查询结果的列名和Java对象的属性名对应不上怎么办?
*第一种方式:as给列名起别名
*第二种方式:使用resultMap进行结果映射
*第三种方式:是否开启驼峰命名自动映射(配置settings)
一、resulrMap结果映射
可以专门定义一个结果映射,在这个结果映射当中指定数据库表的字段名和Java类的属性名的对应关系。
接口:
/*** 查询所有的student信息,使用resultMap标签进行结果映射* @return*/List<Student> selectAllBtReaultMap();
mapper.xml
*select标签中的resultMap属性,用来指定使用哪个结果映射 resultMap的值是resultMap的id
*resultMap标签中的type属性,用来指定POJO类的类名;id属性:指定resultMap的唯一标识,这个id将来要在select标签中使用。如果有主键,建议这里配置一个id标签,注意:这不是必须的 官方解释:这样的配置可以让mybatis提高效率
如果列column和property是一样的,则可以省略
<!--1、不需要再起别名,可以专门定义一个结果映射,在这个结果映射当中指定数据库表的字段名和Java类的属性名的对应关系2、type属性:用来指定POJO类的类名3、id属性:指定resultMap的唯一标识,这个id将来要在select标签种使用--><resultMap id="studentResultMap" type="student"><id property="id" column="id"></id><!--如果数据库表中有主键,一般都是有主键,否则不符合数据库设计第一范式--><!--如果有主键,建议这里配置一个id标签,注意:这不是必须的 官方解释:这样的配置可以让mybatis提高效率--><!--property填写POJO类的属性名--><!--column填写数据库表的字段名--><result property="name" column="name"></result><result property="age" column="age"></result><result property="height" column="height"></result><result property="birth" column="birth"></result><result property="sex" column="sex"></result></resultMap><!--select标签中的resultMap属性,用来指定使用哪个结果映射 resultMap的值是resultMap的id--><select id="selectAllBtReaultMap" resultMap="studentResultMap">select * from t_student</select>
测试:
@Testpublic void testSelectAllResultMap() throws IOException, ParseException {SqlSession session = SqlSessionUtil.openSession();StudentMapper mapper = session.getMapper(StudentMapper.class);List<Student> students = mapper.selectAllBtReaultMap();students.forEach(student -> {System.out.println(student);});session.close();}
运行结果:
二、驼峰命名自动映射
使用这种机制的前提是:属性名遵循Java的命名规范,数据库表的列名遵循SQL的命名规范。
Java命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式。
SQL命名规范:全部小写,单词之间采用下划线分割
例如:
属性名:carNum 数据库表的列名:car_num
启用该功能:在mybatis-config.xml文件中进行配置:
<settings> <!--放在properties标签后面--><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
https://mybatis.net.cn/configuration.html#settings(mybatis官方中文学习手册)