1. <resultMap> 是什么?
- 作用:<resultMap> 用来定义数据库表字段和Java实体类属性之间的对应关系。
- 为什么需要?
数据库字段通常用下划线命名(如 brand_name),而Java类属性用驼峰命名(如 brandName)。MyBatis需要知道怎么把数据库查出来的数据,正确地“装配”到Java对象里。
<resultMap id="brandResultMap" type="com.itheima.pojo.Brand"><result column="brand_name" property="brandName"/><result column="company_name" property="companyName"/>
</resultMap>
- id="brandResultMap":这是这个映射的名字,后面会用到。
- type="com.itheima.pojo.Brand":指定要映射到哪个Java类()。
- type 属性需要填写Java类的全限定名(即包名+类名),或者在有别名的情况下可以用别名。
- 推荐写全类名,避免歧义。
- <result column="brand_name" property="brandName"/>:
表示数据库的brand_name字段,对应Java对象的brandName属性。
- <result column="company_name" property="companyName"/>:
表示数据库的company_name字段,对应Java对象的companyName属性。
2. <select> 是什么?
- 作用:定义一个SQL查询语句,并指定用哪个<resultMap>来封装查询结果。
<select id="selectAll" resultMap="brandResultMap">select * from tb_brand; </select>
- id="selectAll":这是这个SQL语句的名字,对应Mapper接口里的方法名。
- resultMap="brandResultMap":指定查询结果要用上面定义的brandResultMap来进行字段和属性的映射。
- select * from tb_brand;:SQL语句,查询tb_brand表的所有数据。
3. 结合起来的作用
- 当你在Java代码里调用selectAll()方法时,MyBatis会执行select * from tb_brand,查出所有数据。
- 查出来的每一行数据,MyBatis会根据brandResultMap的定义,把brand_name字段的值赋给Java对象的brandName属性,把company_name字段的值赋给companyName属性,最终返回一个Brand对象的列表。
4. 总结
| <resultMap>| 定义数据库字段和Java属性的映射关系,解决命名不一致的问题 |
| <select> | 定义SQL查询语句,并指定用哪个resultMap来封装查询结果 |
一句话总结:
<resultMap>让数据库字段和Java属性“对号入座”,<select>用来查数据并用resultMap把结果装进Java对象。