MyBatis学习(一)

一、框架概述

  1. MyBatis是一个优秀的基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。
  2. MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。
  3. 采用了ORM的思想。

二、MyBatis的入门程序

1. 创建数据库和表结构

sql 复制代码
-- 创建数据库
CREATE DATABASE mybatis_db;

-- 使用数据库
USE mybatis_db;

-- 创建用户表
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入测试数据
INSERT INTO `user`(`id`,`username`,`birthday`,`sex`,`address`) 
VALUES 
(1,'老王','2018-02-27 17:47:08','男','北京'),
(2,'熊大','2018-03-02 15:09:37','女','上海'),
(3,'熊二','2018-03-04 11:34:34','女','深圳'),
(4,'光头强','2018-03-04 12:04:06','男','广州');

2.MyBatis的入门步骤

2.1 创建 Maven 项目

创建一个普通的 Maven Java 工程即可。

2.2 引入项目依赖

pom.xml 文件中添加 MyBatis、MySQL 驱动、Junit 和 Log4j 的依赖。

sql 复制代码
<dependencies>
    <!-- MyBatis 核心包 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>

    <!-- MySQL 驱动包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>

    <!-- 单元测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
        <scope>test</scope>
    </dependency>

    <!-- 日志 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>
2.3 编写实体类 User
java 复制代码
package com.qcby.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private static final long serialVersionUID = 525400707336671154L;

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    // ... 省略所有 getter 和 setter 方法 ...

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
2.4 编写 UserMapper 接口和方法
java 复制代码
package com.qcby.mapper;

import com.qcby.domain.User;
import java.util.List;

public interface UserMapper {
    /**
     * 查询所有的用户
     * @return 用户列表
     */
    List<User> findAll();
}
2.5 编写 Mapper 配置文件

resources 目录下创建 mappers 文件夹,并在其中创建 UserMapper.xml 映射文件。

java 复制代码
<?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.qcby.mapper.UserMapper">
    <!-- 
        id: 接口中方法的名称
        resultType: 方法返回值类型(全限定类名)
    -->
    <select id="findAll" resultType="com.qcby.domain.User">
        select * from user;
    </select>
</mapper>
2.6 编写 MyBatis 主配置文件

resources 目录下创建 SqlMapConfig.xml(名称可自定义),配置数据库连接信息和加载映射文件。

java 复制代码
<?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">
        <!-- 配置具体环境 -->
        <environment id="mysql">
            <!-- 配置事务管理类型,JDBC 或 MANAGED -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源,POOLED(连接池)/ UNPOOLED(无连接池) -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis_db"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射配置文件 -->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>
2.7 编写测试类

创建 UserTest 测试类,编写 JUnit 测试方法。

java 复制代码
package com.qcby.test;

import com.qcby.domain.User;
import com.qcby.mapper.UserMapper;
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 org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class UserTest {

    /**
     * 通过 Mapper 代理对象执行 SQL(推荐)
     */
    @Test
    public void testFindAll() throws Exception {
        // 1. 加载主配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        
        // 2. 创建 SqlSessionFactory 对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        
        // 3. 获取 SqlSession 对象
        SqlSession session = factory.openSession();
        
        // 4. 获取 Mapper 接口的代理对象
        UserMapper mapper = session.getMapper(UserMapper.class);
        
        // 5. 执行查询方法
        List<User> list = mapper.findAll();
        
        // 6. 遍历结果
        for (User user : list) {
            System.out.println(user);
        }
        
        // 7. 释放资源
        session.close();
        in.close();
    }
}
相关推荐
ps酷教程12 分钟前
jackson学习
java·学习
问心无愧051320 分钟前
ctf show web入门90
前端·笔记
NULL指向我22 分钟前
STM32 F103C8T6学习笔记20:SPI驱动W25Qxx
笔记·stm32·学习
行走的蜗牛23 分钟前
一文搞懂 Spring AI 核心接口,轻松对接所有大模型
java
吃好睡好便好32 分钟前
汽车行驶原理
学习·汽车
吃好睡好便好33 分钟前
Matlab中三种三维图的对比
开发语言·人工智能·学习·算法·matlab·信息可视化
倒流时光三十年38 分钟前
PostgreSQL 中的 NULL 陷阱:从一次排除过滤说起
java·数据库·postgresql
代码改善世界41 分钟前
【C++进阶】二叉搜索树
java·数据结构·c++
学习3人组41 分钟前
业务主表+JSON自定义字段
java·spring boot·json
雨落在了我的手上43 分钟前
初识java(六):方法的使用
java·开发语言