Mybatis 02

1 课程计划
1、输入映射和输出映射
a) 输入参数映射
b) 返回值映射
2、动态sql
a) If标签
b) Where标签
c) Sql片段
d) Foreach标签
3、关联查询
a) 一对一关联
b) 一对多关联
4、Mybatis整合spring
a) 如何整合spring
b) 使用原始的方式开发dao
c) 使用Mapper接口动态代理
5、Mybatis逆向工程(了解)

2 输入映射和输出映射
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。
2.1. 环境准备
1. 复制昨天的工程,按照下图进行

这里写图片描述

  1. 如下图粘贴,并更名

这里写图片描述

  1. 只保留Mapper接口开发相关的文件,其他的删除
    最终效果如下图:

这里写图片描述

  1. 如下图修改SqlMapConfig.xml配置文件。Mapper映射器只保留包扫描的方式

这里写图片描述

2.2. parameterType(输入类型)
2.2.1. 传递简单类型
参考第一天内容。
使用#{}占位符,或者${}进行sql拼接。

2.2.2. 传递pojo对象
参考第一天的内容。
Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。

2.2.3. 传递pojo包装对象
开发中通过可以使用pojo传递查询条件。
查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
包装对象:Pojo类中的一个属性是另外一个pojo。

需求:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中。

2.2.3.1. 编写QueryVo

public class QueryVo {
    // 包含其他的pojo
    private User user;

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
}

2.2.3.2. Sql语句

SELECT * FROM user WHERE username LIKE '%张%'

2.2.3.3. Mapper.xml文件
在UserMapper.xml中配置sql,如下图。

这里写图片描述

2.2.3.4. Mapper接口
在UserMapper接口中添加方法,如下图:

这里写图片描述

2.2.3.5. 测试方法
在UserMapeprTest增加测试方法,如下:

@Test
public void testQueryUserByQueryVo() {
    // mybatis和spring整合,整合之后,交给spring管理
    SqlSession sqlSession = this.sqlSessionFactory.openSession();
    // 创建Mapper接口的动态代理对象,整合之后,交给spring管理
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    // 使用userMapper执行查询,使用包装对象
    QueryVo queryVo = new QueryVo();
    // 设置user条件
    User user = new User();
    user.setUsername("张");
    // 设置到包装对象中
    queryVo.setUser(user);

    // 执行查询
    List<User> list = userMapper.queryUserByQueryVo(queryVo);
    for (User u : list) {
        System.out.println(u);
    }

    // mybatis和spring整合,整合之后,交给spring管理
    sqlSession.close();
}

2.2.3.6. 效果
测试结果如下图:

这里写图片描述

2.3. resultType(输出类型)
2.3.1. 输出简单类型
需求:查询用户表数据条数

sql:SELECT count(*) FROM user

2.3.1.1. Mapper.xml文件
在UserMapper.xml中配置sql,如下图:

这里写图片描述

2.3.1.2. Mapper接口
在UserMapper添加方法,如下图:

这里写图片描述

2.3.1.3. 测试方法
在UserMapeprTest增加测试方法,如下:

@Test
public void testQueryUserCount() {
    // mybatis和spring整合,整合之后,交给spring管理
    SqlSession sqlSession = this.sqlSessionFactory.openSession();
    // 创建Mapper接口的动态代理对象,整合之后,交给spring管理
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    // 使用userMapper执行查询用户数据条数
    int count = userMapper.queryUserCount();
    System.out.println(count);

    // mybatis和spring整合,整合之后,交给spring管理
    sqlSession.close();
}

2.3.1.4. 效果
测试结果如下图:

这里写图片描述

注意:输出简单类型必须查询出来的结果集有一条记录,最终将第一个字段的值转换为输出类型。

2.3.2. 输出pojo对象
参考第一天内容
2.3.3. 输出pojo列表
参考第一天内容。
2.4. resultMap
resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

需求:查询订单表order的所有数据

sql:SELECT id, user_id, number, createtime, note FROM `order`

2.4.1. 声明pojo对象
数据库表如下图:

这里写图片描述

Order对象:

public class Order {
    // 订单id
    private int id;
    // 用户id
    private Integer userId;
    // 订单号
    private String number;
    // 订单创建时间
    private Date createtime;
    // 备注
    private String note;
get/set。。。
}

2.4.2. Mapper.xml文件
创建OrderMapper.xml配置文件,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值