使用resultType的时候,数据库查询结果的字段名字必须和java代码的字段名一致,不一致的时候解决办法如下:
1、可以在sql查询语句中使用别名
2、可以在setting中设置开启mapUnderscoreToCamelCase,开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。
3、使用resultMap(在mapper文件中resultType和resultMap只能二选一)
标题
1、添加接口方法
public Teacher getTeacherByIDUseResultMap(Integer id);
2、编写mapper文件
<resultMap id="teacher" type="bean.Teacher">
<!--用id定义主键-->
<id column="id" property="id"/>
<!-- result定义普通封装规则,按照习惯会定义所有的列-->
<result column="name" property="name"/>
<result column="gender" property="gender"/>
</resultMap>
<!-- resultMap写对应map的id值-->
<select id="getTeacherByIDUseResultMap" resultMap="teacher">
select * from teacher where id=#{id}
</select>
3、编写测试代码
@Test
public void testSearch7() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//生成session实例
try (SqlSession session = sqlSessionFactory.openSession()) {
//获取接口的实现
TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
Teacher teacher = teacherMapper.getTeacherByIDUseResultMap(1);
System.out.println(teacher);
}
}
运行结果