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();
    }
}
相关推荐
创可贴治愈心灵2 分钟前
AI浪潮下C#就业前景剖析:深耕C#为主,按需选修Java与Python
java·人工智能·c#
元直数字电路验证9 分钟前
云计算实验笔记(四):容器编排(Container Orchestration)
运维·笔记·docker·云计算
huohaiyu16 分钟前
深入解析Java垃圾回收机制
java·开发语言·算法·gc
SunnyDays101131 分钟前
如何在 Java 中实现 OFD 与 PDF 格式互转
java·开发语言
nashane35 分钟前
HarmonyOS 6学习:句柄泄漏(Fd Leak)从“崩溃现场”到“代码行”的精准狙击指南
学习·华为·音视频·harmonyos
卡梅德生物科技小能手36 分钟前
卡美德生物科普:LOXL2(赖氨酰氧化酶样蛋白2)
人工智能·经验分享·生活
自小吃多1 小时前
某志步进电机驱动器故障排查标准流程
笔记
zhangrelay1 小时前
后智能时代智能体推演预测娱乐文-节选-
笔记·学习·娱乐
小江的记录本1 小时前
【Spring全家桶】Spring Cloud 2023.0.x:微服务核心理论、CAP/BASE定理(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·spring·spring cloud·微服务·面试
Solis程序员1 小时前
缓存三剑客预防策略
java·spring·缓存