resultMap結果集是用來定義sql查詢的結果與java對象的映射關系。它主要解決2大問題:
1)可以解決POJO屬性名和表結構的字段名不一致問題(甚至是 不是標准的駝峰命名法)
2)可以完成高級查詢,例如:一對一,一對多,多對多
其中還有一個比較重要的屬性:autoMapping自動映射 默認為true。
注意:1.如果true,並且列名稱和字段名稱一致,是可以完成映射。
2.如果為true,名稱不一致,但是符合駝峰命名,但必須開啟駝峰命名匹配。
下面簡單介紹一個案列:
接口:UserMapper.java
package com.inter; import java.util.List; import org.apache.ibatis.annotations.Param; import com.pojo.User; public interface UserMapper { // 查詢數據 public List<User> selectAll(); }
Mybatis配置文件:Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 加載外部配置文件 --> <properties resource="jdbc.properties"></properties>
/* <settings> <!--開啟駝峰命名法--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> */
<!-- 起別名 --> <typeAliases> <typeAlias alias="User" type="com.pojo.User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!-- 指定mapper的配置文件 --> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>
映射文件:UserMapper.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.inter.UserMapper"> <resultMap type="User" id="userResult" autoMapping="true"> <id property="id" column="id"/> </resultMap> <!-- 查詢所有的數據 --> <select id="selectAll" resultMap="userResult"> select * from tb_user </select> </mapper>
實體類:User.java
package com.pojo; public class User { private int id; private String name; private String age; private String sex; 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; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]"; } }
測試類:
package com.test; import static org.junit.Assert.*; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import com.inter.UserMapper; import com.pojo.User; public class TestMybatisoneTest { private UserMapper userMapper; InputStream inputStream; SqlSessionFactory sqlSessionFactory; SqlSession sqlSession; @Before public void setUp() throws Exception { String resource = "mybatis-config.xml"; inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); // 動態代理實現 userMapper = sqlSession.getMapper(UserMapper.class); } @Test public void test4(){ List<User> list = userMapper.selectAll(); for (User user : list) { System.out.println(user+" "); } } }