resultType
1.select返回一个List集合
在映射文件中配置返回List集合的方法的sql映射
resultType:依旧是写需要封装的javaBean,而不是写List集合
<!--public List<Employee> getEmplsNameLike(String lastName); --> <select id="getEmplsNameLike" resultType="emp"> select * from tbl_employee where last_name like #{lastName} </select>
测试代码:
@Test void test06() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); // 模糊查找名字为s开头的员工信息 List<Employee> empls = mapper.getEmplsNameLike("s%"); for (Employee employee : empls) { System.out.println(employee); } } finally { openSession.close(); } }
查找结果:
2.select封装Map
①单条数据封装成Map
映射文件配置:
<!-- public Map<String, Object> getEmpByMapOne(Integer id); --> <select id="getEmpByMapOne" resultType="map"> select * from tbl_employee where id = #{id} </select>
测试代码:
@Test void test07() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); // 查询id为4的员工信息,返回一个map Map<String, Object> empByMap = mapper.getEmpByMapOne(4); System.out.println(empByMap); } finally { openSession.close(); } }
查询结果:
②多条记录封装一个成Map
<!-- public Map<Integer, Employee> getEmpsByNameLikeReturnMap(String lastName); --> <select id="getEmpsByNameLikeReturnMap" resultType="map"> select * from tbl_employee where last_name like #{lastName} </select>
测试代码:
使用MapKey指定key
@MapKey("id") public Map<Integer, Employee> getEmpsByNameLikeReturnMap(String lastName);
@Test void test08() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); Map<Integer, Employee> map = mapper.getEmpsByNameLikeReturnMap("ss%"); System.out.println(map); } finally { openSession.close(); } }
查询结果:
resultMap:自定义结果集映射规则
结构:
<resultMap type id/> :自定义某个javaBean的封装规则
type:该javaBean的类型
id:唯一标识,方便引用
<resultMap type="cn.it.mybatis.bean.Employee" id="MyEmp"> <id column="" property=""/> <result column="" property=""/> </resultMap>
<id column property/>:id标签用于主键列,因为MyBatis的底层会优化id标签的主键
column :哪一列
property:这列封装为JavaBean的哪个属性
<result column property/>:用于其他列
推荐:只要写resultMap就把全列都映射(如果其他列不写的话,会自动映射)
测试:
映射文件配置:
<!-- 自定义结果集映射规则--> <resultMap type="cn.it.mybatis.bean.Employee" id="MyEmp"> <!-- id:主键的映射规则 --> <id column="id" property="id"/> <!-- result:其他列的映射规则 --> <result column="last_name" property="lastName"/> <result column="email" property="email"/> <result column="gender" property="gender"/> </resultMap> <!-- public Employee getEmpById(Integer id); --> <select id="getEmpById" resultMap="MyEmp"> select * from tbl_employee where id = #{id} </select>
测试代码:
@Test void test09() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class); Employee employee = mapper.getEmpById(2); System.out.println(employee); } finally { openSession.close(); } }
查询结果: