Mybatis3系列课程6---查询全部

本文介绍了如何在Mybatis中编写映射文件、接口和进行单元测试,包括文件结构、命名规则以及如何配置mappers。重点讲解了查询全部学生信息的示例,涉及到SQL编写和配置mybatis-config.xml。
摘要由CSDN通过智能技术生成

学习目标

上节课 配置好 数据源, 本次课进入深入学习, 重中之重,

1. 会编写映射文件与接口

2. 进行单元测试

操作步骤 

 Mybatis充当的数据访问层, 一般情况下 controller调用service,service调用mapper,mapper进行数据库的相关操作,

既然使用mybatis, 有些注意点 需要遵守

1. 一般 映射文件 为 实体类名+Mapper.xml,   位于 src/main/resources 下, 一般会创建mapper文件夹

2.接口命名: 实体类名+Mapper.java 位于 mapper包下

创建接口

创建映射文件 

需要在  src/main/resources 下 创建文件夹 mapper

接下来 创建  StudentMapper.xml

 

修改接口

本节课任务就是 查询全部学生信息

因此 需要为StudentMapper.java 增加 方法, 用于实现查询全部

package mapper;

import entity.Student;

import java.util.List;

public interface StudentMapper {
    /**
     * 查询全部
     * @return  返回数据库中所有学习信息
     */
    List<Student> findAll();
}

修改映射文件

要想实现查询全部 ,该功能对应的sql 为  select * from student

问题来了, 该sql 写在哪里呢?

当然写在映射文件里了,

接下来 为 映射文件增加文件头定义

映射文件与接口的说明

1.  映射文件 通过 mapper 标签的namespace 指定 与该文件关联的接口

2. 因为要执行 查询全部, 因此 映射文件 选择 <select > 标签

3. <select > 标签 的 id 的值 必须与 接口中 方法名 一致

   接口中方法的返回值为 List, 但 Mybatis认为, 返回一个与多个 都当作一个处理

    

映射文件 内容 如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.StudentMapper">

    <!-- 查询全部-->
    <select id="findAll" resultType="entity.Student">
        select * from student
    </select>
</mapper>

编写测试类

maven工程的好处 就是 测试在单独的地方  src/test/java

import entity.Student;
import mapper.StudentMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestStudent {

    
    @Test
    public void testFindAll() throws IOException {
        // mybatis 配置文件的文件名
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //获得SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        List<Student> list = mapper.findAll();

        System.out.println(list);
    }
}

右键 运行 ,发现 测试没有通过,

原因 是 mybatis 启动后 会读取 映射文件, 但并没有在 mybatis-config.xml 进行配置

解决办法 很简单, 就是 增加 <mappers>标签

 打开mybatis-confgi.xml , 发现 , mappers 在 environments 的后面,  之前已经提醒注意顺序

 <mappers>
          <mapper resource="mapper/StudentMapper.xml"></mapper>
     </mappers>

 

再次 运行测试类, 项目运行成功 

总结

 接口中的方法 必须遵循 以下规定:

  1 方法名  必须与 xxxMapper.xml 中的 标签的 id的值 相同
  2 方法的输入参数 和xxxMapper.xml中的parameterType 类型一致.
      如果 方法没有 输入参数,则不需要配置 parameterType
  3 方法的返回值和 xxxMapper.xml中的resultType 类型一致

     查询结果不管是一个还是多个,xxxMapper.xml中只 按照一个 配置,
         按照主键查询 返回一个对象
         查询全部    返回多个对象
   如果 方法没有返回值 则不需要配置 xml中的resultType

除了 以上 约定外, 要实现接口中的方法和xxxMapper.xml 中的sql标签一一对应,
还需要将 xxxMapper.xml的namespace的值 设置为 接口的全路径的类名

 

实现原理

Mybatis 的实现过程:
1 .根据 接口名,找到 对应的xxxMapper.xml(根据xxxMapper.xml的namespace的值 等于 接口的全路径类名)

2. 根据接口中调用的方法,找到 xxMapper.xml文件中的sql标签,( 方法名  等于  xxxMapper.xml的标签的id的值)

3. 注意: 再mybatis-config.xml 中 配置的事务为 JDBC ,需要手动 提交事务或者回滚事务

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

射手座的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值