MyBatis學習(四)--解決實體屬性和資料庫欄位不一致的問題
阿新 • • 發佈:2018-11-17
寫在前面
孤傲蒼狼的部落格: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。