ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot+Mybatis(2)

2022-03-02 22:03:09  阅读:183  来源: 互联网

标签:xml Mapper SpringBoot mapper PO Mybatis id TestPO


上一篇写了SpringBoot+Mybatis项目创建,以及注解方式实现查询功能。

这篇我们讲一下使用xml方式实现查询功能,以及一些常用的功能和配置。

这样,我们先创建一个Mapper接口,不写对应的xml,调用一下看会不会报错。

1. 创建TestMapper02
package com.example.mybatistest01.demo.mapper;

import org.apache.ibatis.annotations.Mapper;

/**
 * @author 木子的昼夜编程
 */
@Mapper
public interface TestMapper02 {
     int count();
}

2. 不配置xml 直接使用
    @Autowired
    TestMapper02 testMapper02;

    @Test
    void test02() {
        int count = testMapper02.count();
        System.out.println("表aaaa总共有记录数:"+count);
    }

这个时候就报错了,这个错误我们肯能都见过:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

在这里插入图片描述

这个错是什么意思呢,意思就是你调用我干什么,我都不知道执行什么,你倒是给我指定一个SQL呀!!也就是Mybatis接口找不到指定的statement

3. 给他指定一个

首先我们要在配置文件中指定mapper文件所在路径

我们一般放到resources下边,用Mapper结尾(例如testMapper.xml)

mybatis:
  mapper-locations: classpath:mybatis/*Mapper.xml
4. 编写一个xml

Test02Mapper.xml

这里基本语法我们不说了,之前将Mybatis的时候已经讲过了

最主要的是注意一点:namespaceid

namespace 一定是对应Mapper接口地址(com.example.mybatistest01.demo.mapper.TestMapper02.java)

id 是接口中方法的名字

至于为什么这样,其实我们解析Mybatis源码的时候有讲到过 (可以想象成Map的key值)

<?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">
<mapper namespace="com.example.mybatistest01.demo.mapper.TestMapper02">

    <select id="count"  resultType="integer">
        select count(1) from `aaaa`
    </select>


</mapper>
5. 再次测试

成功了 我们就不演示了

6. 我们返回类型用PO对象
6.1 看一下我们表结构和表数据

在这里插入图片描述

创建PO对象

package com.example.mybatistest01.demo.po;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * @author 木子的昼夜编程
 */
public class TestPO {
    private Long id;
    private String name;
    private BigDecimal money;
    private LocalDateTime time;

    @Override
    public String toString() {
        return "TestPO{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                ", time=" + time +
                '}';
    }
}
6.3 编写一个查询方法

接口方法:

TestPO getById(Long id);

xml方法:

注意我们这里用的是PO全路径,我们可以配置一下type-aliases-package 然后用别名就行了

<select id="getById" resultType="com.example.mybatistest01.demo.po.TestPO">
    select * from aaaa where id = #{id}
</select>
6.4 测试
@Test
void test03() {
    TestPO po = testMapper02.getById(1L);
    System.out.println("查询结果:"+po);
}

输出结果:

查询结果:TestPO{id=1, name='张三', money=10001, time=2021-01-29T11:04:25
6.4 配置PO别名
mybatis:
  # mapper映射
  mapper-locations: classpath:mybatis/*Mapper.xml
  # 别名
  type-aliases-package: com.example.mybatistest01.**.po
6.6 配置别名后直接使用别名即可

说是不区分大小写 TESTPO、TestPO、testPO 都可以

我猜他在找对应PO的时候把resultType转换为全小写(或全大写)进行使用的

<select id="getById" resultType="testPO">
    select * from aaaa where id = #{id}
</select>
插曲

遇到了一个错误:org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1

好像遇到过,但是忘记是因为什么了,搜了一下解决方案:因为yml文件格式不对了,不知道为什么直接成了GBK,可能是因为我有中文注释,改成UTF-8就好了 ,怎么改?

自己百度吧,每个人编辑器都不一样,我是直接右下角有一个编码下拉框,直接改了就好了。

在这里插入图片描述

插曲02

我们看输出可以知道默认用的是com.zaxxer.hikari.HikariDataSource

hikari

唠唠

xml方式也很简单,一般我们配置写好了,就不需要关注这些,只需要关注业务即可。

我们生产中大部分用的都是返回PO的方式,这样结合一些框架比较好实现,比如MybatisPlus、tk.mybatis等

这些我们后边会写简单使用示例,如果项目中有什么问题可以到我公众号留言:木子的昼夜编程

好好学习吧,有一句话说的好:打败你的不是天真,是不会还不学。


欢迎关注公众号:
在这里插入图片描述

标签:xml,Mapper,SpringBoot,mapper,PO,Mybatis,id,TestPO
来源: https://blog.csdn.net/qq_36291682/article/details/123241334

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有