Mybatis_01简介

什么是Mybatis

Mybatis中文文档

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

Mybatis优点

  1. 简单易学:没有任何第三方依赖,最简单的安装只需要两个jar文件+配置几个sql映射文件就可以了。
  2. 灵活:不会对应用程序或数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化
  3. 解除sql与代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性

第一个Mybatis程序

  1. 搭建数据库环境
#建库
CREATE DATABASE `mybatis`;

USE `mybatis`;

#建表
CREATE TABLE `user`(
	`id` INT(20) NOT NULL,
	`name` VARCHAR(30) DEFAULT NULL,
	`pwd` VARCHAR(30) DEFAULT NULL,
	PRIMARY KEY(`id`)
	)ENGINE=INNODB DEFAULT CHARSET=utf8;

#插入测试数据
INSERT INTO `user`(`id`,`name`,`pwd`) VALUES(1,'九九','999999999'),(2,'许业炯','123456');

#查询验证上述操作
SELECT * FROM `user`;
  1. 创建maven项目,并导入相关依赖
  • 在pom.xml中导入相关依赖
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>
  • 配置解决静态资源过滤问题,否则后续测试会出错。
    <!--    在build中配置resources,来防止资源导出失败的问题。-->
    <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>
  1. 在resources目录下编写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=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/jiu/dao/userMapper.xml"/>
    </mappers>

</configuration>

  1. 在utils包下编写mybatis工具类
package com.jiu.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 {
            String resources = "mybatis-config.xml";
            InputStream is = Resources.getResourceAsStream(resources);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession(true);
    }
}

  1. 在pojo包下编写数据库对应的实体类
  • 注意字段名与数据库字段保持一致。
package com.jiu.pojo;

/**
 * @CLassName : User
 * @Description : TODO
 * @Author : 九九
 * @Date : 2021/7/6,20:07
 **/
public class User {
    private Long id;
    private String name;
    private String pwd;

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

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

  1. 在dao包下编写Mapper接口类
package com.jiu.dao;

import com.jiu.pojo.User;

import java.util.List;

/**
 * @InterfaceName : UserMapper
 * @Description : TODO
 * @Author : 九九
 * @Date : 2021/7/6,20:09
 **/
public interface UserMapper {
//    获取所有用户
    List<User> getUsers();
}

  1. 在dao包下编写接口对应的Mapper.xml配置文件
  • 注意namespace,应该与xml文件对应的接口类一致。
  • select表示这是一个查询语句,id表示接口中对应的方法,resultType是返回值类型。
<?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.jiu.dao.UserMapper">
    <select id="getUsers" resultType="com.jiu.pojo.User">
        select * from mybatis.user;
    </select>
</mapper>

  1. 测试
  • 有两种方法可以获取结果,方法二看起来更简便。
package com.jiu.dao;

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

import java.util.List;

/**
 * @CLassName : UserMapperTest
 * @Description : TODO
 * @Author : 九九
 * @Date : 2021/7/6,20:14
 **/
public class UserMapperTest {

    @Test
    public void testGetUsers(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
//        System.out.println(sqlSession);
//        方法一
//        List<User> users = sqlSession.selectList("com.jiu.dao.UserMapper.getUsers", User.class);
//        for (User user : users) {
//            System.out.println(user);
//        方法二
        List<User> users = sqlSession.getMapper(UserMapper.class).getUsers();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

测试结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值