Mybatis---配置文件完成增删改查(查询所有)
查询-----查询所有数据
-
编写接口方法:Mapper接口
- 参数:无
查询所有数据功能是不需要根据任何条件进行查询的,所以此方法不需要参数
- 结果:List
我们会将查询出来的每一条数据封装成一个 Brand
对象,而多条数据封装多个 Brand
对象,需要将这些对象封装到List集合中返回。
- 执行方法、测试
2 编写SQL语句
3 编写测试方法
//2. 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 获取Mapper接口的代理对象
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
//4. 执行方法
List<Brand> brands = brandMapper.selectAll();
System.out.println(brands);
//5. 释放资源
sqlSession.close();
有些数据封装成功了,而有些数据并没有封装成功。为什么这样呢?
这个问题可以通过两种方式进行解决:
- 给字段起别名
- 使用resultMap定义字段和属性的映射关系
数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据
- 给字段起别名
<select id="selectAll" resultType="Brand">
select id, brand_name as brandName, company_name as companyName, ordered, description, status
from tb_brand;
</select>
也可用SQL片段
将需要复用的SQL片段抽取到 sql 标签中
xml <sql id="brand_column"> id, brand_name as brandName, company_name as companyName, ordered, description, status </sql>
id属性值是唯一标识,引用时也是通过该值进行引用。
在原sql语句中进行引用
使用 include 标签引用上述的 SQL 片段,而 refid 指定上述 SQL 片段的id值。
xml <select id="selectAll" resultType="brand">
select
<include refid="brand_column" />
from tb_brand;
</select>
使用resultMap解决上述问题
起别名 + sql片段的方式可以解决上述问题,但是它也存在问题。如果还有功能只需要查询部分字段,而不是查询所有字段,那么我们就需要再定义一个 SQL 片段,这就显得不是那么灵活。
那么我们也可以使用resultMap来定义字段和属性的映射关系的方式解决上述问题。
在映射配置文件中使用resultMap定义 字段 和 属性 的映射关系
xml <resultMap id="brandResultMap" type="brand">
<!-- id:完成主键字段的映射
column:表的列名 property:实体类的属性名
result:完成一般字段的映射
column:表的列名 property:实体类的属性名 -->
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
</resultMap>
注意:在上面只需要定义 字段名 和 属性名 不一样的映射,而一样的则不需要专门定义出来。
SQL语句正常编写
xml <select id="selectAll" resultMap="brandResultMap"> select * from tb_brand; </select>
resultMap:
1、定义<resultMap>标签
2、在<select>标签中,使用resultMap属性替换 resultType属性
小结
实体类属性名 和 数据库表列名 不一致,不能自动封装数据
* ==起别名:==在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样
* 可以定义 <sql>片段,提升复用性
* ==resultMap:==定义<resultMap> 完成不一致的属性名和列名的映射
而我们最终选择使用 resultMap的方式。查询映射配置文件中查询所有的 statement 书写如下:
```xml
<resultMap id="brandResultMap" type="brand">5/2/2022 1
<!--
id:完成主键字段的映射
column:表的列名
property:实体类的属性名
result:完成一般字段的映射
column:表的列名
property:实体类的属性名
-->
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
</resultMap>
<select id="selectAll" resultMap="brandResultMap">
select *
from tb_brand;
</select>