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();
    }
}
相关推荐
qq_337763201921 分钟前
国际期货资管系统开发方案|内外盘交易平台源码授权与二次开发支持
java·c语言·开发语言·c++·c#
不定积分要+C_yyy32 分钟前
Java关键字final三种用法、核心特性与高频易错点
java·开发语言
不一样的故事12642 分钟前
军工行业合规与基础认知
数据结构·经验分享·算法
xexpertS2 小时前
队列积压治理:如何避免异步系统出现难以恢复的消息积压
java·开发语言
踏月的造梦星球9 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
阿维的博客日记10 小时前
MultipartFile 是不是表示仅仅是一个分片?
java·后端·spring·multipartfile
程序员无隅10 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
Python+9910 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
二炮手亮子11 小时前
浅记java线程池
java·开发语言
一路向北North11 小时前
Spring Security OAuth2.0(23):分布式系统授权-转发明文给微服务
java·spring·微服务