梁恒嘉的技术专栏 全栈之路

Mybatis基本使用

2022-08-16
NanKe

记录Java后端框架,持久层MyBatis框架的基本使用,使用Maven对依赖进行管理,使用两种方式使用Mybatis访问MySQL数据库,简化MySQL代码,包含完整代码

前言

提示:本文要记录的大概内容

框架是对基础功能进行封装,程序员在此基础上进行业务开发。本文主要记录使用Mybatis去构建访问MySQL数据库的简单项目。(本文使用的是云数据库,已经创建ssmdb用户,作为学习Mybatis的数据库账户,读者可以直接按照此博客创建项目)


提示:以下是本篇文章正文内容

一、MyBatis 是什么

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

二、使用步骤

项目文件树如下所示:

项目文件树

1.安装

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。

如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

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

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.35</version>
</dependency>

2.配置mybatisConfig.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="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://IP地址:3306/数据库名?serverTimezone=Asia/Shanghai"/>
                <property name="username" value="用户名"/>
                <property name="password" value="用户密码"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mappers/AdminMapper.xml"/>
    </mappers>
</configuration>

3.创建JavaBean对象

package cn.crazymen.mybatis_project.model;

public class Admin {
    private int id;
    private String account;
    private String password;
    private String gender;

    public Admin() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "Admin{" +
                "id=" + id +
                ", account='" + account + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                '}';
    }
}

4.创建数据库映射文件AdminMapper.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="cn.crazymen">
    <select id="findAdminById" parameterType="int" resultType="cn.crazymen.mybatis_project.model.Admin">
    select * from admin where id = #{id}
  </select>
</mapper>

5.创建测试方法

package cn.crazymen.mybatis_project.test;

import cn.crazymen.mybatis_project.model.Admin;
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 TestOne {
    public static void main(String[] args) throws IOException {
        String resource = "mybatisConfig.xml";
        //读取配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建SqlSession 使用此对象与数据库进行会话 相当于Connection
        SqlSession sqlSession = sqlSessionFactory.openSession();
        Admin admin = sqlSession.selectOne("cn.crazymen.findAdminById", 1);
        System.out.println(admin);
        sqlSession.close();

    }
}

TestOne运行结果如下:

运行结果

6.Mybatis推荐的构建步骤

Mybatis推荐的构建步骤主要是在对象关系映射这里与先前介绍的不同。

我们现在使用接口的方式去构建。

创建数据访问层的接口AdminDao:

package cn.crazymen.mybatis_project.dao;

import cn.crazymen.mybatis_project.model.Admin;

public interface AdminDao {
    Admin findAdminById(int id);
}

AdminMapper.xml修改的地方主要是在命名空间这里,将命名空间更改为我们刚才创建的数据访问层AdminDao接口地址。

具体修改AdminMapper.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="cn.crazymen.mybatis_project.dao.AdminDao">
    <select id="findAdminById" parameterType="int" resultType="cn.crazymen.mybatis_project.model.Admin">
    select * from admin where id = #{id}
  </select>
</mapper>

TestOne也需要修改,具体修改如下:

package cn.crazymen.mybatis_project.test;

import cn.crazymen.mybatis_project.dao.AdminDao;
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 TestOne {
    public static void main(String[] args) throws IOException {
        String resource = "mybatisConfig.xml";
        //读取配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建SqlSession 使用此对象与数据库进行会话 相当于Connection
        SqlSession sqlSession = sqlSessionFactory.openSession();
        AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        System.out.println(adminDao.findAdminById(1));
        sqlSession.close();
    }
}

总结

本文记录通过Mybatis访问MySQL数据库的两种方法。两者相比较,我更倾向于使用后一种(通过接口去创建对象关系映射)使用接口,让代码显得更加简洁,在接口里面只需要定义方法名称,返回值类型,形参列表。当我们有了新的需求的时候,我们通过接口去再次定义新的方法,对于项目的更迭很友好。


上一篇 Servlet初体验

 

Content