Mybatis---配置文件完成增删改查(查询所有)

查询-----查询所有数据

  1. 编写接口方法: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>

 

posted @ 2022-05-02 23:30  踏上星辰  阅读(116)  评论(0编辑  收藏  举报