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();
    }
}
相关推荐
wuxinyan1232 小时前
Java面试题50:Kubernetes 全栈知识体系之一
java·kubernetes·面试题
空管电小二2 小时前
【低压断路器的选择性配合】低压配电“安全后盾“:后备保护到底是什么?
运维·经验分享·安全·学习方法
不吃肥肉的傲寒2 小时前
Graphify安装与结合claude code使用指南
java·python·ai编程·图搜索
seven97_top2 小时前
Tomcat的架构设计和启动过程详解
java·tomcat
我是无敌小恐龙2 小时前
Java SE 零基础入门 Day05 类与对象核心详解(封装+构造方法+内存+变量)
java·开发语言·人工智能·python·机器学习·计算机视觉·数据挖掘
monkeyhlj2 小时前
AI Agent开发课程笔记记录 - 提升篇 About RAG
人工智能·笔记
苦 涩2 小时前
考研408笔记之操作系统(三)——内存管理
笔记·操作系统·考研408
va学弟2 小时前
Agent入门开发(2):个性化功能添加
java·服务器·ai
8486981192 小时前
Cursor 用 Java + Vue3 做了一个可落地的酒店管理系统(HMS),支持多门店、RBAC、财务结算,源码开源!
java·开发语言·开源