当列名和属性名不一致 1.起别名 2.开启驼峰命名自动映射 <setting name="mapUnderscoreToCamelCase" value="true"/> 例如:t_id 映射为 tIdy 3.resultMap自定义映射 (resultMap和resultType二选一) resultType 按照规则自动映射,按照是否开启驼峰式映射,自己映射属性和列名,只能映射一层结构 深层次的对象结构无法映射,多表查询的时候结果无法映射! resultMap标签,自定义映射关系,可以深层次,可以单层次(可用于多表查询)
声明自定义映射 resultMap
<!--声明自定义映射-->
<!--id:当前resultMap的标识; type:具体的返回值类型全类名或别名 | 集合只写泛型即可-->
<resultMap id="TeacherMap" type="teacher">
<!--id 为主键映射关系-->
<id column="t_id" property="tId"/>
<!--result普通列的映射关系-->
<result column="t_name" property="tName"/>
</resultMap>
<!--根据id查询老师-->
<!--
当列名和属性名不一致
1.起别名
2.开启驼峰命名自动映射
<setting name="mapUnderscoreToCamelCase" value="true"/>
例如:t_id 映射为 tIdy
3.resultMap自定义映射 (resultMap和resultType二选一)
resultType 按照规则自动映射,按照是否开启驼峰式映射,自己映射属性和列名,只能映射一层结构
深层次的对象结构无法映射,多表查询的时候结果无法映射!
resultMap标签,自定义映射关系,可以深层次,可以单层次(可用于多表查询)
-->
<select id="queryById" resultMap="TeacherMap">
select * from teacher where t_id = #{id};
</select>
测试
@Test
public void test_04() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.queryById("189f3cbc6ca211ee82d51831bfba1465");
System.out.println(teacher);
sqlSession.close();
}
输出结果
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7f69d591]
==> Preparing: select * from teacher where t_id = ?;
==> Parameters: 189f3cbc6ca211ee82d51831bfba1465(String)
<== Columns: t_id, t_name
<== Row: 189f3cbc6ca211ee82d51831bfba1465, 张三丰
<== Total: 1
Teacher(tId=189f3cbc6ca211ee82d51831bfba1465, tName=张三丰)