您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
07-查询-查询所有&结果映射(POJO驼峰属性与数据库字段值不同步问题、sql标签(sql片段)、resultMap)
发布时间:2024-11-20 19:00:16编辑:雪饮阅读()
-
statement的提示
在mapper中select标签内部编写sql时候直接输入sel然后回车就会有sql提示(理论上),实际上我这里发现没有出现。
mapper的namespace与select的resultType
<mapper namespace="com.mapper.BrandMapper">
<select id="selectAll" resultType="Brand">
select * from tb_brand;
</select>
</mapper>
在mapper中namespace的包路径必须完整名称空间路径
select标签的resultType值可以是类型别名,也可以是含完整包路径的类型
类型别名在mybatis主配置文件中的configuration中定义
<typeAliases>
<package name="POJO"/>
</typeAliases>
这里可以为select的resultType进行别名。
mapper配置文件可以使用包扫描
<mappers>
<package name="com.mapper"/>
</mappers>
这里是直接相当于匹配resource下面的com/mapper下面的所有mapper文件,这个很容易和上面typeAliases的包扫描弄混,千万要记住这里只是关联文件,上面那个是关联java的类。
查询所有
现在可以利用之前usermapper的实践,我们也可以自己新增比如BrandMapper的配置文件、接口类,Brand的POJO类,然后实现一个查询所有的示例。
但你会发现数据库中比如brand_name这种下划线命名的字段值,在Brand的POJO类中是以驼峰命名时候,所以获取不到值的。
解决方案1:同步驼峰命名
像是这样
<mapper namespace="com.mapper.BrandMapper">
<select id="selectAll" resultType="Brand">
select *,brand_name as brandName,company_name as companyName from tb_brand;
</select>
</mapper>
这是在sql层面实现的。
这样sql看起来有点臃肿,那么其实也可以将sql使用sql片段进行封装,例如
解决方案2:sql片段的实现:
<mapper namespace="com.mapper.BrandMapper">
<sql id="brand_column">
brand_name as brandName,company_name as companyName
</sql>
<select id="selectAll" resultType="Brand">
select *,<include refid="brand_column"/> from tb_brand;
</select>
</mapper>
解决方案3:resultMap
用resultMap的时候select标签就不需要resultType属性了,直接用resultMap属性关联已定义的resultMap的id。
实现如:
<mapper namespace="com.mapper.BrandMapper">
<!--
resultMap的type也支持普通类名包到类的完整路径或类型别名
-->
<resultMap id="brandResultMap" type="brand">
<!--
这东西支持主键字段映射,还支持普通字段映射,普通字段映射就是result
-->
<result column="company_name" property="companyName" />
<result column="brand_name" property="brandName" />
</resultMap>
<select id="selectAll" resultMap="brandResultMap">
select * from tb_brand;
</select>
</mapper>
本期词汇
alias (文件、互联网地址等用的)别名
Aliases 别名(alias 的复数)
mapper 映射;制图人
关键字词:驼峰,数据库,字段,同步,POJO,sql,resultMap