入坑Mybatis

mybatis步骤

1、创建一个maven工程作为父工程
2、删除src目录
3、新建一个模块,作为子工程
4、在父工程的pom文件中导入需要用到的依赖

自此,第一步算是完成了,接下来就是怎么去连接数据库了

mybatis连接数据库步骤

最基础的搭建:获取sqlSessionFactory对象,永远的死代码,新建一个工具类MybatisUtils工具类,将以下代码丢进去

package com.miao.utils;

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 java.io.IOException;
import java.io.InputStream;


public class MybatisUtils {
    // 获取sqlSessionFactory对象
    // 用到的是哪个资源
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try{
            System.out.println(1);
            String resource = "mybatis-config.xml";
            System.out.println(2);
            InputStream inputStream = Resources.getResourceAsStream(resource);
            System.out.println(Resources.getResourceAsStream(resource).available());

            System.out.println(3);


            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            System.out.println(4);
        }catch(IOException e){
            System.out.println(5);
            e.printStackTrace();
        }
    }
    // 编写方法获取创建好的sqlSessionFactory对象
    public static SqlSession getSqlSession(){
        System.out.println("utils");
        return sqlSessionFactory.openSession();
    }
}

1、配置mybatis核心配置文件

在java下的resources文件夹下面编写mybatis的核心配置文件:mybatis-config.xml并在核心配置文件中添加以下代码

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

写完这段代码之后就是连接数据库了,需要自己把driver、url、username和password都写好。

2、注册数据层的所有的xml信息

这个步骤需要在上面这段代码中的mappers下进行注册操作,我的数据层下面的所有的xml文件都要通过这种方式来进行注册,否则会报以下错误(绑定异常)在这里插入图片描述

具体的配置过程就是在中嵌入一个新的。值得注意的是是一个单标签。我们只需要在里面添加resource属性就好,属性值就是我们对应的“xxxMapper.xml”的完整路径。例如下面这样(切记:包名用反斜线分开!!)在这里插入图片描述

那么问题来了,我们的“xxxMapper.xml”中写的是什么东西呢?

3、xxxMapper.xml 的文件内容

在xxxMapper.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">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

先举个例子来说在这里插入图片描述

浅浅的分析一波这里面的内容,排除前面的自带的东西,

3.1 Mapper标签中的namespace属性

首先映入眼帘的就是一对标签,我们也知道了,这是一对数据标签,其中的内容当然是数据库的操作了,标签中的namespace属性有什么作用呢,自问自答了,namespace的作用就是绑定一个对应的Mapper接口,属性值是该接口的完整类名

值得注意的是namespace的值一定要是在mybatis核心配置文件中出现的,如果报这方面的错,那就要好好看看有没有可能是哪个地方敲错了。

3.2 Mapper标签下的子标签

在这里插入图片描述

我们可以看出来,这里面只有这几种标签可用,眨眼一看这里面的大部分不就是数据库的增删改查语句的关键字嘛!我也是初学,所以只能站在初学者的角度来看这个东西,我的理解是:这些关键字标签中我们必须有的属性就是id属性就是我的接口中需要实现的方法的方法名,在编写好数据库语句之后呢,若是查找语句,我们要做的就是获取到我们的查找到的数据集,在mybatis中,数据集不再用我们手动去写ResultSet实现,我们只需要继续在关键字标签中添加结果标签就可以了,比如上述中我们使用resultType作为获取到的结果集合。

4、编写Test测试程序

到了这一步,我们的环境配置才算是真的完成了,那么接下来就是我们的测试程序了。测试程序我们都会写在test测试包下面,通过junit来测试,也要用到@Test注释来搞,我们的测试包因该跟main包有着同样的目录结构。具体例子如下在这里插入图片描述

4.1 编写测试方法

编写测试方法的时候我们用到了注释@Test来进行

4.2 获取到SqlSession对象

通过我们上面写过的获取SqlSessionFactory对象获取,切记要用完后之后要释放资源

4.3 获取查询结果集getMapper();

使用getMapper方法可以获取到查询的结果集,这个方法来源于SqlSession类里面,所以在此之前我们一定是要搞到sqlSession对象的。

对于参数来说getMapper()中要添加的参数是指定接口的类,所以要通过反射来实现;

最后通过接口调用接口中的方法就可以查询到我们的指定的数据了。

5、重中之重–build文件

好的,如果你是按照上面的步骤写下来,那么恭喜你,会发现红彤彤的好运气如下:在这里插入图片描述

这是为什么呢?

我们都知道,java程序在执行的时候是执行的class文件,而我们在maven当中就学到过,一个maven项目在运行之后合成的class文件是在一个叫做target的红色文件夹下面的,我们不妨走进去看看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yYbFB1hR-1651906325807)(C:\Users\苗苗的小破机\AppData\Roaming\Typora\typora-user-images\image-20220507133536844.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tdTFadB4-1651906325809)(C:\Users\苗苗的小破机\AppData\Roaming\Typora\typora-user-images\image-20220507133559109.png)]

对比之下惊奇的发现,原来是我们的配置文件没有出现在target目录下,那么在运行的时候当然就不会成功了,我们应该怎么做呢??如果你是个铁头娃,就想每一次都复制粘贴进去的话,那我算你恨,我称你为大哥!

好了,我们来说正经的,这里我们需要在我们的工程的pom文件下编写以下的代码:

<build>
        <resources>
            <resource>
                <directory>
                    src/main/resources
                </directory>
                <includes>
                    <include>
                        **/*.properties
                    </include>
                    <include>
                        **/*.xml
                    </include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

关于这段代码,起始做的就是将每次运行的时候,把所有的xml文件或者是prroperties文件都一起拷贝到target目录下,至此问题解决。

翻车总结

当测试中出现 “Cause: com,sun.org.apache.xerces.internal.impl.io.
MalformedByteSequenceException: 1 字节的 UTF-8 序列的字节 1 无效” 错误的时候,我们就需要设置文件的编码格式为utf-8。具体操作就不讲解了。

我们明天再见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值