mybatis的AutoMapping自动注入和ResultMap自定义注入

文章目录

    • 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标签:	声明集合对象的注入规则
	 注意:
		 	如果是单表查询的 自定义注入可以只声明字段名和属性名不同的注入方法	
		 	但如果是多表联合查询 不管字段名和属性名是否一致都要全部自定义注入方式


  
  <mapper namespace="com.i.mapper.FlowerMapper">
 	
 	
 		
 		<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);
	}

mybatis的AutoMapping自动注入和ResultMap自定义注入_第1张图片

你可能感兴趣的:(自动注入)