mybatis的AutoMapping自动注入和ResultMap自定义注入
AutoMapping自动注入和ResultMap自定义注入
解释: 在单表查询中,mybatis会根据实体类的属性名和字段名 相同的方式将查询结果自定的注入到实体类的对象中。就不 需要我们像以前一样书写while循环遍历赋值了。 注意: Mybatis默认按照字段名和属性名一致的规则将查询的数据注入 到实体类的对象中 问题: 如果实体类的属性名和字段名不一致,怎么办? 解决: 自定义注入规则。
实体类属性
private Integer id; private String name2; private Double price; private String production; get...set...tostring...
`
AutoMapping自动注入(默认): 实体类的属性名和字段名一致
`
自动注入:联合查询 |单表查询但是字段名和属性名不一致 概念: 提前声明查询结果和实体类之间的注入规则,就是高数Mybatis讲哪个字段值赋值给实体类的那个属性 使用: 在查询标签上使用ResultMap属性声明要引入的注入规则 在mapper配置文件中使用ResultMap标签声明规则 ResultMap标签的使用: 子标签: Id标签: 声明主键的注入规则 result标签: 声明普通字段的注入规则 联合查询使用 association标签: 声明普通对象的注入规则 collection标签: 声明集合对象的注入规则 注意: 如果是单表查询的 自定义注入可以只声明字段名和属性名不同的注入方法 但如果是多表联合查询 不管字段名和属性名是否一致都要全部自定义注入方式
<?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.i.mapper.FlowerMapper"> <!-- 根据ID查询花卉信息 --> <!-- AutoMapping自动注入(默认): 实体类的属性名和字段名一致 --> <select id="selById" resultType="flower"> SELECT * FROM flower WHERE id=#{0} </select> <!-- 自定义注入:联合查询 |单表查询但是字段名和属性名不一致--> <resultMap type="flower" id="rm"> <result property="name2" column="name"/> </resultMap> <select id="selById2" resultMap="rm"> SELECT * FROM flower WHERE id=#{0} </select> </mapper>
public static void main(String[] args) throws IOException { //获取SqlSession对象 InputStream in = Resources.getResourceAsStream("mybatis.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); SqlSession session = factory.openSession(); //getMapper():动态代理 传过去一个接口,返回一个代理对象 FlowerMapper flower = session.getMapper(FlowerMapper.class); //AutoMapping自动注入实体类对象-->实体类的属性和字段名一致 Flower f = flower.selById(1); System.out.println(f); //ResultMap自定义注入 Flower selById2 = flower.selById2(1); System.out.println(selById2); }