1. 程式人生 > >MyBatis學習(四)--解決實體屬性和資料庫欄位不一致的問題

MyBatis學習(四)--解決實體屬性和資料庫欄位不一致的問題

寫在前面
孤傲蒼狼的部落格: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解決

  1. 新建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>
  1. 註冊StudentMapper.xml
<mappers>
	<mapper resource="com/project/xml/StudentMapper.xml" />
</mappers>
  1. 測試方法
	@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。