目录
二十六、MyBatis_映射文件_select_返回List
二十七、MyBatis_映射文件_select_记录封装map
二十八、MyBatis_映射文件_select_resultMap_自定义结果映射规则
二十九、MyBatis_映射文件_select_resultMap_关联查询_环境搭建
三十、MyBatis_映射文件_select_resultMap_关联查询_级联属性封装结果
三十一、MyBatis_映射文件_select_resultMap_关联查询_association定义关联对象封装规则
三十二、MyBatis_映射文件_select_resultMap_关联查询__association分布查询
三十三、MyBatis_映射文件_select_resultMap_关联查询_分步查询&延迟加载
三十四、MyBatis_映射文件_select_resultMap_关联查询_collection定义关联集合封装规则
三十五、MyBatis_映射文件_select_resultMap_关联查询_collection分步查询&延迟加载
三十六、MyBatis_映射文件_select_resultMap_分步查询传递多列值&fetchType
三十七、MyBatis_映射文件_select_resultMap_discriminator鉴别器
二十六、MyBatis_映射文件_select_返回List
第一步、EmployeeMapper .java文件
package com.nanjing.mybatis.dao;
import com.nanjing.mybatis.bean.Employee;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
//接口与配置文件动态绑定
public interface EmployeeMapper {
public List<Employee> getEmpsByLastNameLike(String lastName);
}
第二步:EmployeeMapper .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.nanjing.mybatis.dao.EmployeeMapper">
<!--public List<Employee> getEmpsByLastNameLike(String lastName);-->
<!--resultType:如果返回的是一个集合,要写集合中元素的类型 -->
<select id="getEmpsByLastNameLike" resultType="com.nanjing.mybatis.bean.Employee">
select * from tbl_employee where last_name like #{lastName}
</select>
</mapper>
第三步:MyBatisTest.java文件
@Test
public void test04() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
List<Employee> like = mapper.getEmpsByLastNameLike("%e%");
for (Employee employee : like) {
System.out.println(employee);
}
}finally{
openSession.close();
}
}
二十七、MyBatis_映射文件_select_记录封装map
第一步:EmployeeMapper .java文件
//接口与配置文件动态绑定
public interface EmployeeMapper {
//多条记录封装一个map,Map<Integer,Employee>:键是这条记录的主键,值是记录封装后的javaBean
//告诉mybatis封装这个map的时候使用哪个属性作为map的key
@MapKey("id")
public Map<Integer,Employee> getEmpByLastNameLikeReturnMap(String lastName);
//返回一条记录的map,key就是列名,值就是对应的值
public Map<String, Object> getEmpByIdReturnMap(Integer id);
}
第二步:EmployeeMapper .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.nanjing.mybatis.dao.EmployeeMapper">
<!--public Map<Integer,Employee> getEmpByLastNameLikeReturnMap(String lastName);-->
<select id="getEmpByLastNameLikeReturnMap" resultType="com.nanjing.mybatis.bean.Employee">
select * from tbl_employee where last_name like #{lastName}
</select>
<!--public Map<String, Object> getEmpByIdReturnMap(Integer id);-->
<select id="getEmpByIdReturnMap" resultType="map">
select * from tbl_employee where id=#{id}
</select>
</mapper>
第三步:MyBatisTest.java文件
@Test
public void test04() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Map<String, Object> map = mapper.getEmpByIdReturnMap(1);
System.out.println(map);
Map<Integer, Employee> map = mapper.getEmpByLastNameLikeReturnMap("%r%");
System.out.println(map);
}finally{
openSession.close();
}
}
二十八、MyBatis_映射文件_select_resultMap_自定义结果映射规则
resultType:它是跟我们自动封装有关的,我们查出数据以后,指定你要封装成什么类型,这个数据就会给你封装成对应的Java类型
但是如果说,在我们查出的数据中,列名跟JavaBean的属性名不一样,那么一开始是封装不成功的
我们的解决办法:第一种:别名;第二种:如果列名跟JavaBean的属性名符合驼峰命名,那么就开启驼峰命名;第三种:就是使用resultMap,自定义结果集,我来自己来定义Employee里面每一个属性对应哪个列
第一步:EmployeeMapperPlus.java文件
package com.nanjing.mybatis.dao;
import com.nanjing.mybatis.bean.Employee;
public interface EmployeeMapperPlus {
public Employee getEmpById(Integer id);
}
第二步:EmployeeMapperPlus.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.nanjing.mybatis.dao.EmployeeMapperPlus">
<!--自定义某个javaBean的封装规则
type:自定义规则的Java类型
id:唯一id方便引用
-->
<resultMap id="MyEmp" type="com.nanjing.mybatis.bean.Employee">
<!--指定主键列的封装规则
id定义主键底层有优化
column:指定哪一列
property:指定对应的javaBean属性
-->
<id column="id" property="id"/>
<!--定义普通列封装规则-->
<result column="last_name" property="lastName"/>
<!--其它不指定的列会自动封装,我们只要写resultMap就把全部的映射规则都写上-->
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</resultMap>
<!--resultMap:自定义结果集映射规则;-->
<!--public Employee getEmpById(Integer id);-->
<select id="getEmpById" resultMap="MyEmp">
select * from tbl_employee where id=#{id}
</select>
</mapper>
第三步:MyBatisTest.java文件
@Test
public void test05() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
Employee empById = mapper.getEmpById(1);
System.out.println(empById);
}finally{
openSession.close();
}
}