Mybatis基础知识学习(一)

陌路散爱 提交于 2020-03-05 18:33:04

本文主要简单的介绍了mybatis以及简单使用,很浅显,相关内容并不深入,也并未深究其原理,着重点在于如何使用,有些地方可能还有一些小问题,请多多包涵,谢谢~

一、Mybatis简介

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
Mybatis

Mybatis是一个持久层框架,支持定制化SQL、存储过程以及高级映射。借助Mybatis可以简化开发过程中有关持久层的工作量,进而提高编码效率。
通俗地说,借助Mybatis可以简化有关数据库操作的代码,Mybatis本质上就是实现一些功能代码的集合,在使用它时所减轻的工作量实际是由Mybatis自动完成的。

二、使用Mybatis的准备工作

(1)新建项目

使用IDEA新建一个maven项目。(可以简单地把maven理解为是一个包的管理工具,实际上其功能远不止这个,有关maven的使用,这里不进行介绍,可参考网上大佬的博客)
项目建立后,会自动生成pom.xml文件,这是maven的配置文件,并且有关Mybatis的配置也是在这里面完成的。初始如下所示
在这里插入图片描述
在pom.xml文件里面添加依赖(dependency)
导入mybatis jar包,可参考官方的教程Mybatis Getting started
在这里插入图片描述
由于要对数据库进行操作,则导入mysql-connector-java
另外根据需要导入一些与日志或者单元测试等等有关的文件(这些并不是必须的,而mybatis和mysql-connector-java是必须的)
具体导入代码如下所示,另外注意自行选择版本,一般推荐选择最新的。

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

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

       
   </dependencies>
 

注意添加好依赖后要进行导入,具体如下
在这里插入图片描述

(2)建立数据库

建立一个test数据库,里面有一张用户表user,user表里面有id和username两个字段。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'xiaoming');
INSERT INTO `user` VALUES (2, 'xiaohong');

SET FOREIGN_KEY_CHECKS = 1;

在这里插入图片描述

三、Mybatis的简单使用

在上面准备工作的基础上,开始进行代码的编写。

(1)建立数据库表对应的实体类

数据库里面存在user表,因此建立一个user类,

package com.example.domain;

import java.io.Serializable;

/**
 * @className: User
 * @description: 用户类
 */
public class User implements Serializable {
    //用户id
    private Integer id;
    //用户名
    private String username;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

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

(2)创建user实体对象对应的数据访问对象(DAO)接口IUser

在这里我们还写一个根据用户id查询用户的方法。

package com.example.dao;

import com.example.domain.User;


/**
 * @className: IUserDao
 * @description: 用户持久层接口
 */
public interface IUserDao {

    /**
     * 通过用户名查询用户
     * @return
     */
    User findByUsername(String username);
}

(3)配置IUserDao对应的映射关系

在mybatis中使用==映射(mapper)==处理数据库,通俗来说就是在mapper里面写sql语句并执行.
创建IUserDao.xml文件(注意在mybatis里面,一般是写mapper,即应是UserMapper.xml,这两者是一样的,只是前面创建的是DAO类而与之对应罢了)

<?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.example.dao.IUserDao">

    <!--根据用户名查询用户-->
    <select id="findByUsername" resultType="com.example.domain.User">
        select * from user where username=#{username}
    </select>
</mapper>

(4)配置mybatis

新建一个配置文件config.xml(名字随意),主要是配置有关数据库的内容,注意本机上mysql的账号和数据库。

<?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="mysql">
        <!--配置mysql环境-->
        <environment id="mysql">
            <!--配置事务类型-->
            <transactionManager type="JDBC"/>
            <!--配置数据源(连接池)-->
            <dataSource type="POOLED">
                <!--配置连接数据库的基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--配置映射文件  注意位置-->
    <mappers>
        <mapper class="com.example.dao.IUserDao"/>
    </mappers>

</configuration>

(5)创建测试用例

在test目录下创建一个测试类MybatisTest,用来测试该mybatis案例是否可以成功运行。

package com.example;

import com.example.dao.IUserDao;
import com.example.domain.User;
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;

/**
 * @className: MybatisTest
 * @description:
 */
public class MybatisTest {

    public static void main(String[] args) throws IOException {
        //读取配置文件
        InputStream inputStream= Resources.getResourceAsStream("config.xml");

        //创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(inputStream);

        //创建sqlSession对象
        SqlSession sqlSession=sqlSessionFactory.openSession();

        //使用sqlSession创建dao接口的代理对象
        IUserDao userDao=sqlSession.getMapper(IUserDao.class);

        //使用代理对象执行方法 由于只是测试,所以就自己确定一个用户名进行查询
        User user=userDao.findByUsername("xiaoming");

        //输出测试
        System.out.println(user);

        //释放资源
        sqlSession.close();
        inputStream.close();

    }
}

运行该测试用例,结果如下:
在这里插入图片描述
与预期一致。
另外整个项目的主要目录结构如下所示(以供参考):
在这里插入图片描述

四、总结

使用Mybatis可以很方便处理有关数据库的操作,然后就是需要注意配置mybatis以及mapper的路径,一定要一一对应。
一般情况下,不会单独使用Mybatis,而是在spring里面使用,这样开发会更便捷一些。不过单独学习一下mybatis也是很有必要的,可以为以后学习spring打下基础。

在这里插入图片描述
2020.03.05

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!