MyBatis入门让它跑起来!!!

101 阅读5分钟

目录

环境说明

创建Maven项目

创建数据库表 

创建实体类

配置jar包坐标

连接数据库

创建dao层接口

创建dao层接口的配置文件 

建立dao层与数据库的联系

创建SqlSession工厂

创建SqlSession实例测试


 

环境说明

在讲解MyBatis之前,首先说一下JDBC,我相信你一定不陌生吧,JDBC就是用来对数据库进行增删改查操作的,依然记得那些繁琐的SQL语句带来的困扰,而今天的MyBatis就是为简化SQL语句而生的,这里讲解MyBatis的入门,就是让它能在你的编译器上跑起来,这里需要做一些准备,首先就是MySQL8.0,然后是JDK8,编译器这里以IDEA为例,构建项目用的是Maven3.6.1

好了,环境统一好了之后,就开始步入正题吧,如果环境不一致,应该问题不大,但不确定一定能跑起来

创建Maven项目

首先用IDEA构建Maven项目,这里不用勾选Maven提供的模板,GroupId和ArtifactId如下

直接一路next即可,构建好之后,如下图

创建数据库表 

当构建好一个空的Maven项目之后,就可以开始搭建MyBatis的操作了,因为我们是要进行数据库的操作,所以这里我们先在MySQL中建一个数据库,并创建一个user表

创建数据库

create database mybatis;

使用该数据库

use mybatis;

创建user表

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入三条用户信息

insert into user values(1,'张三','123');
insert into user values(2,'李四','456');
insert into user values(3,'王二','789');

创建实体类

到此,数据库中的表就建好了,然后我们需要去项目中创建相应的类,也就是我们的user实体类,放在java下的com.zhiying.pojo包下,如下图

实体类如下

package com.zhiying.pojo;

public class User {
    private int id;
    private String username;
    private String password;

    public User() {
        
    }

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

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

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

配置jar包坐标

接下来就是去Maven中的pop.xml文件,导入相应的jar包,这里导入一个mybatis的jar包,然后是mysql-connector-java的jar包,这里给出pop.xml文件,不要照搬,因为咱们的包名类名未必相等

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zhiying</groupId>
    <artifactId>speakmybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>
    </dependencies>
</project>

连接数据库

当jar包导好之后,我们开始对数据库进行建立连接,建立连接的时候,需要在resource目录下新建一个file文件,最好命名为

mybatis-config.xml,如下图

其中的内容如下,这里需要我们注意的是四个参量,分别是driver,url,username,password,具体如下

<?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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?
                userSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;
                serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

创建dao层接口

数据库也连好了,然后我们就开始进行dao层的处理了,也就是写dao层的接口,这里在com.zhiying.dao下建一个UserMapper类截图和代码如下:

package com.zhiying.dao;

import com.zhiying.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> getUserList();
}

创建dao层接口的配置文件 

写好这个接口之后,按我们的JDBC就是写这个接口的实现类,但是这里不用写实现类了,写一个对应的配置文件即可,这里在resources资源目录下建一个UserMapper.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="com.zhiying.dao.UserMapper">
        <select id="getUserList" resultType="com.zhiying.pojo.User">
            select * from user
        </select>
</mapper>

建立dao层与数据库的联系

配置好这个之后,你刚刚配置的resources目录下的mybatis-config.xml文件就要修改一下了,原因就是你配置的mapper它需要知道呀,毕竟人家这配置的都是与数据库打交道的东西嘛,好了,改完后的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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?
                userSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;
                serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

创建SqlSession工厂

好了,接下来就需要配置我们的SqlSessionFactory了,这个工厂故名思意就是用来创建SqlSession的,而这个SqlSession实例就是包含了执行sql命令所需的所有方法,好了,先说工厂怎么建吧,建工厂嘛,首先我们在java下建一个com.zhiying.utils包,并在这里建一个MybatisUtils类,该类就是用来创建SqlSession实例的,目录和源码如下

package com.zhiying.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 {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            //获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取SqlSession实例,其包含了面向数据库执行SQL命令所需的所有方法
    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession();
    }
}

创建SqlSession实例测试

到这里,工厂也建好了是不是要生产实例了,生产实例,这里我们在test目录下进行生产测试,包和源码如下

package com.zhiying.dao;

import com.sun.org.apache.xpath.internal.SourceTree;
import com.zhiying.pojo.User;
import com.zhiying.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserMapperTest {

    public static void main(String[] args) {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
}

结果如下

这里是查询操作,不需要提交事务,在进行增删改操作的时候,记得提交事务,sqlSession.commit

都到这了,简单演示一下吧,在dao层的UserMapper类下,创建一个接口,如下

package com.zhiying.dao;

import com.zhiying.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> getUserList();

    int addUser(User user);
}

当然了需要配置UserMapper.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="com.zhiying.dao.UserMapper">
        <select id="getUserList" resultType="com.zhiying.pojo.User">
            select * from user
        </select>

    <insert id="addUser" parameterType="com.zhiying.pojo.User">
        insert into user values (#{id},#{username},#{password});
    </insert>
</mapper>

好了开始测试吧,测试代码如下

package com.zhiying.dao;

import com.sun.org.apache.xpath.internal.SourceTree;
import com.zhiying.pojo.User;
import com.zhiying.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserMapperTest {

    public static void main(String[] args) {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//        List<User> userList = userDao.getUserList();
//        for (User user : userList) {
//            System.out.println(user);
//        }
        int num = userMapper.addUser(new User(4,"hzy","123"));
        sqlSession.commit(); //这句话在增删改中不能少,
        System.out.println(num);
        sqlSession.close();
    }
}

结果如下,有点看不出来什么,再执行一下查询如右图