Mybatis之安装构建以及执行第一个mybatis程序!

1、什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2、如何配置mybaits?
在idea工具里新建一个maven项目作为parent,在pom.xml导入依赖

 <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

3、配置mybatis核心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>

这里注意,每一个Mapper文件都需要放在核心文件mapper标签内

4、从 XML 中构建 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。由于是重复代码,所以封装成一个utils方便使用。

public static SqlSessionFactory sqlSessionFactory = null;
    static {
        try {
            //第一步,获取SqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

5、创建entity实体类

package cn.kexing.mybatis.entity;

public class Emp {
    public int eid;
    public String ename;
    public String esex;
    public String esalry;

    public Emp(int eid, String ename, String esex, String esalry) {
        this.eid = eid;
        this.ename = ename;
        this.esex = esex;
        this.esalry = esalry;
    }

    public Emp() {
    }

    public int getEid() {
        return eid;
    }

    public void setEid(int eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getEsex() {
        return esex;
    }

    public void setEsex(String esex) {
        this.esex = esex;
    }

    public String getEsalry() {
        return esalry;
    }

    public void setEsalry(String esalry) {
        this.esalry = esalry;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "eid=" + eid +
                ", ename='" + ename + '\'' +
                ", esex='" + esex + '\'' +
                ", esalry='" + esalry + '\'' +
                '}';
    }
}

6、创建mapper接口(这里的mapper和dao一个意思,只不过更规范)

public interface EmpMapper {
    List<Emp> getEmpForList();
}

注意,以往的dao中创建接口后都继续创建实现类来实现方法,在方法中重复写大量jdbc代码,劳财伤神,而mybatis中只需将sql写在配置文件里,避免了所有的jdbc代码。

7、创建mapper映射文件

<?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="cn.kexing.mybatis.dao.EmpMapper">
<select id="getEmpForList" resultType="cn.kexing.mybatis.entity.Emp">
    select * from emp;
  </select>
</mapper>

我们只需要改mapper内容,namespace参数是你的mapper接口,id指的是mapper接口中的方法名,resultType指的是方法返回的实体类型,mapper中则是sql代码,我这里是查询所有并返回List集合。

8、编写测试类

首先获取SqlSession对象

SqlSession sqlSession = MybatisUtils.getSqlSession();

调用getMapper方法返回接口引用

EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);

调用方法并输出

for (Emp emp : empMapper.getEmpForList()) {
            System.out.println(emp);
        }

最后关闭SqlSession

sqlSession.close();

输出:

Emp{eid=1, ename='张三', esex='女', esalry='2000'}
Emp{eid=2, ename='李四', esex='男', esalry='20000'}
Emp{eid=4, ename='赵六', esex='男', esalry='8000'}
Emp{eid=5, ename='可星', esex='男', esalry='40000'}
Emp{eid=8, ename='可可1', esex='男', esalry='299999'}
Emp{eid=9, ename='可可2', esex='男', esalry='299999'}
Emp{eid=10, ename='可可3', esex='男', esalry='299999'}
Emp{eid=11, ename='可可4', esex='男', esalry='299999'}

9、途中可能会遇到的问题

1、配置文件没有注册,也就是你的映射文件没有添加到核心配置的mapper标签中
2、绑定接口错误,注意要写包类路径
3、方法名不对
4、返回类型不对,如果是返回的集合,返回类型写泛型即可
5、maven导出资源问题

如果遇到第5点错误,请在pom.xml加入:

<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>

mybatis其内部是如何运作的,待我之后学习了源码再来给大家分享!

最后修改:2021 年 11 月 15 日
如果觉得我的文章对你有用,请随意赞赏