Mybatis-简介及入门代码演示

Mybatis

Mybatis简介

官方解释:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
在这里插入图片描述

360百科:

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

Mybatis的特点:

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql

官方链接:

由上述的官方解释,我们可以得到Mybatis是一个持久层的框架,所谓持久层,就是我们通常开发时的dao层,数据持久层,就是将内存中失电即失的数据保存成永久不消失的代码层,就是专门处理数据持久化的,通俗理解就是我们通常操作数据库的dao层,当然,数据的持久化当然不只是存到数据库中这一种方式,比如文件IO,将数据写到文件中,也可以算是数据持久化。

Mybatis的入门程序

该框架是一个操作数据库的框架,我们想要使用它,先准备好数据库的资源:

CREATE DATABASE mybatis;

USE mybatis;

CREATE TABLE `user`(
 `id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键id',
 `name` VARCHAR(30) NOT NULL COMMENT '用户名',
 `password` VARCHAR(30) NOT NULL COMMENT '密码'
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO USER(`name`,`password`) VALUES('Ara_Hu','123456'),('张三','123456'),('李思','123456'),('王武','123456'),('赵柳','123456'),('田七','123456'),('宋坝','123456');

创建一个Maven项目,并导入依赖:

<!--mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

<!--Mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>

<!--测试Junit-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

创建与数据库表相对应的实体类User,这里需要字段名与数据库中的字段名一致。

package com.ara.pojo;

public class User {

    private int id;
    private String name;
    private String password;

    public User() {
    }

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

创建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="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSl=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
    
    </mappers>

</configuration>

这里我们还是仿照我们之前操作JDBC的方式,先创建一个工具类MybatisUtils:

package com.ara.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;

//Mybatis工具类
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //读取配置文件
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

            //通过传入的配置文件,获取SqlSessionFactory对象
            //这里由于SqlSessionFactoryBuilder的作用就是来获取sqlSessionFactory 而且获取到之后就不会再使用 所以一次获取
            //这里就是通过创建者模式来获取一个工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过sqlSessionFactory来获取SqlSession
     * 这里使用了工厂模式
     *
     * @return SqlSession
     */
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }

}

然后创建一个UserDao接口,一般来说是应该创建UserMapper接口的,这里使用UserDao接口或许会更容易理解:

package com.ara.dao;

import com.ara.pojo.User;

import java.util.List;

public interface UserDao {

    /**
     * 查询所有的User
     * @return 查询出的User列表
     */
    List<User> getUsers();

}

一般来说,我们这个时候就该编写UserDao的实现类了,我们使用Mybatis就不需要编写实现类,我们只需要编写UserDao对应的xml配置文件UserMapper.xml,一般来说,将该文件和UserDao接口放在同一级目录下:

<?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:绑定一个对应的Dao接口,可以理解为这里就是实现这个接口的-->
<mapper namespace="com.ara.dao.UserDao">
    <!--id:对应接口中方法的名字,可以理解为接口中该方法的具体实现-->
    <!--resultType:对应接口中方法的返回值类型,我们返回的是List<User>,这里设置为User即可-->
    <select id="getUsers" resultType="com.ara.pojo.User">
        select * from user;
    </select>
</mapper>

注意这里的全限定类名。

这里好像就已经结束了,实际不是,我们还需要对UserMapper.xml做一个登记注册,我们需要在mybatis的配置文件(mybatis-config.xml)中的<mappers></mappers>中添加以下代码:


<!--resource:就是我们需要注册的Mapper.xml的路径(注意这里的路径/和上面路径.的区分)-->
<mapper resource="com/ara/dao/UserMapper.xml"></mapper>

然后我们就可以编写测试代码了:

package com.ara.dao;

import com.ara.pojo.User;
import com.ara.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {

    @Test
    public void getUsersTest(){

        //获取sqlSession
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //执行sql
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> users = userDao.getUsers();

        //遍历结果集
        for (User user : users) {
            System.out.println(user);
        }

        //关闭sqlSession
        sqlSession.close();

    }

}

博主这里的目录结构展示如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
到此,我们的Mybatis的入门就结束了。

如果跟博主一样的操作,可能会遇到找不到UserMapper.xml的错误:

在这里插入图片描述
这就是我们的Maven的pom文件没有配置过滤的问题,我们只需要在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>

添加之后,问题就会得到解决。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值