初见MyBatis的理解与认知 三

MyBatis

上期讲了用MyBatis来解决硬编码问题,但其实在测试用例里还是有硬编码的问题。

 List brands = sqlSession.selectList("com.happyfan.mapper.BrandMapper.selectAll");//com.happyfan.mapper.BrandMapper.selectAll 依然是字符串,锁死在代码里了。

而我们用mapper代理开发,就能解决这个硬编码问题。


mapper 代理

  1. 定义一个与 SQL 映射文件同名的 Mapper 接口,并将 Mapper 接口和 SQL 映射文件放置在同一目录下
  2. 设置 SQL 映射文件的 namespace 属性为 Mapper 接口全限定名(就是类的全称,带包的要用 . 隔开)
  3. 在 Mapper 接口中定义方法,方法名就是 SQL 映射文件中 sql 语句的 id ,并保持参数类型和返回值类型一致
  4. 编码

    1. 通过 SqlSession 的 getMapper 方法获取 Mapper 接口的代理对象
    2. 调用对应方法完成 sql 执行

1、定义一个与 SQL 映射文件同名的 Mapper 接口,并将 Mapper 接口和 SQL 映射文件放置在同一目录下

类似这样:

注意,在resource包下创建的Directory命名要用分隔符 / 而不能用 . ,用 . 会发生一些奇怪的事情(他可能会认为这个Directory就叫做com.happyfan.mapper).

2、设置 SQL 映射文件的 namespace 属性为 Mapper 接口全限定名(就是类的全称,带包的要用 . 隔开)

3、在 Mapper 接口中定义方法,方法名就是SQL映射文件中 sql 语句的 id,并保持参数类型和返回值类型一致





    

在SQL映射文件中我们的 id="selectAll" 那么在 Mapper 接口定义的方法就一定是 selectAll 。这个sql语言查询的是一个集合,所以返回类型也要是个集合。

public interface BrandMapper {
    List selectAll();
}

4、编码

public static void main(String[] args) throws IOException {
    //1. 加载mybatis的核心配置文件,获取SqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    //2.获取SqlSession对象,用它来执行sql
    SqlSession sqlSession = sqlSessionFactory.openSession();

    //3.执行sql语句
    //List brands = sqlSession.selectList("com.happyfan.mapper.BrandMapper.selectAll");
    //通过 SqlSession 的 getMapper 方法获取 Mapper 接口的代理对象
    BrandMapper brandmapper = sqlSession.getMapper(BrandMapper.class);
    //调用对应方法完成 sql 执行
    List brands = brandmapper.selectAll();

    System.out.println(brands);
    //4.释放资源
    sqlSession.close();
    }

执行!

成功!硬编码问题就这样解决啦!

补充:如果 Mapper 接口名称和 SQL 映射文件名称相同,并且在同一目录下,可以用包扫描的方式简化 SQL 映射文件的加载

在 mybatis-config.xml 下修改


    
    
    
    

当然我们还能在 mybatis-config.xml 中添加


    

可以简化 SQL 映射文件中 resultType 的写法( Brand 也可以写成 brand 不区分大小写)。





    

执行!

依旧成功!

配置文档的顶层结构可以上官方文档浏览
官方文档:https://mybatis.org/mybatis-3...

你可能感兴趣的:(mybatis)