项目场景:
Mybatis链接数据库进行查询操作
问题描述
在使用mybatis链接数据库访问表内容时发现返回数据整体时正常的,但是部分值为null
查询主代码:
List<Brand> brands=brandMapper.selectByCondition(status,companyName,brandName); //散装参数 注意匹配语句中的参数占位符
mapper代理代码:
List<Brand> selectByCondition(@Param("status")int status, @Param("companyName")String companyName, @Param("brandName")String brandName);
对象部分代码:
private Integer id ;
private String brandName ;
private String companyName ;
private Integer ordered ;
private String description ;
private Integer status ;
sql空间代码:
<select id="selectByCondition" resultType="com.fjx.pojo.Brand">
select * from tb_brand
where
status = #{status} and
company_name like #{companyName} and
brand_name like #{brandName}
</select>
原因分析:
数据库表内列名与代码实体属性名称不同无法自动封装:
表中列名分别是 brand_name
和 company_name
,而对象里的名字为 brandName
和 companyName
,两者不同无法自动封装数据,所以为null。
解决方案:
sql语句起别名和使用sql片段:
1.起别名,在sql语句中加入as使表列名与实体对应上:
select id,status,company_name as companyName,brand_name as brandName, ordered,description from tb_brand
2.sql片段,提前设置好需要替换的属性:
<!-- sql片段-->
<sql id="sqlbrand">
id,status,company_name as companyName,brand_name as brandName, ordered,description
</sql>
<!-- 应用sql片段-->
select <include refid="sqlbrand" />
from tb_brand。。。。。。。。