写在前面
孤傲苍狼的博客:https://www.cnblogs.com/xdp-gacl/category/655890.html
代码中会有很多重要的注释,请不要忽略。
前面在创建实体时,强调过一定要和数据库列名一致。如果不一致结果是映射不到实体中的,但是数据库和java的命名规则是不一样的,怎么办呢?
有两种方法:
1、利用sql中的as解决
2、MyBatis提供的resultMap
0、准备数据
创建一张学生表,插入数据
CREATE TABLE `student` (
`s_id` int(11) NOT NULL AUTO_INCREMENT,
`s_name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`s_id`)
)
INSERT INTO student(s_name) VALUES ("张三"),("李四"),("王五")
新建学生的实体类
package com.project.bean;
public class StudentBean {
int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "StudentBean [id=" + id + ", name=" + name + "]";
}
}
1、使用SQL中的AS解决
- 新建
StudentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.project.mapper.StudentMapper">
<select id="testStudent" resultType="StudentBean">
SELECT
s_id AS id,
s_name AS name
FROM student;
</select>
</mapper>
- 注册
StudentMapper.xml
<mappers>
<mapper resource="com/project/xml/StudentMapper.xml" />
</mappers>
- 测试方法
@Test
public void testStudent() {
SqlSession session = MyBatisUtil.getSqlSession();
try {
List<StudentBean> list = session.selectList("com.project.mapper.StudentMapper.testStudent");
for (StudentBean student : list) {
System.out.println(student);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
}
2、使用resultMap
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.project.mapper.StudentMapper">
<!--这里不再是resultType,而是resultMap-->
<select id="testStudent" resultMap="map">
SELECT * FROM student;
</select>
<!--type属性用来指定实体类-->
<resultMap id="map" type="StudentBean">
<id property="id" column="s_id"></id>
<result property="name" column="s_name"></result>
<!--<result property="age" column="s_age"></result>-->
</resultMap>
</mapper>
如果简单的查询可以使用as来解决问题,但是复杂查询还是推介大家使用resultMap。