MyBatis入门使用

概要

基于Java的持久层框架

MyBatis特征

1. 它是一个半自动的ORM框架。

2. 轻便、灵活;功能强大、使用简单、扩展性极强。

3. 支持定制化 SQL、存储过程以及高级映射。

4. 避免了几乎所有的 JDBC 代码和手工操作。

5. 可使用XML或注解将接口和 POJO映射成数据库中的记录。

ORM模型

  简单地说,ORM模型就是数据库的表与简单Java对象(Plain Ordinary Java Object,简称 POJO)的对象关系映射模型(Object Relational Mapping,简称ORM)。在该模型中,“对象”指的是Java的实体类对象,“关系”指的是关系型数据库(例如MySQL等),“映射”指的是两者之间的对应关系。在该“映射”中,Java类与数据库中的表相对应,类的对象与表中的一条记录相对应,对象的属性与表的字段相对应。

            ORM工作原理

使用MyBatis

基础环境检查

  请检查并确保开发设备已经正确安装了JDK、IDEA、Maven、MySQL数据库并能够正常使用。

创建项目

  首先创建新项目用于存放之后的每个Module,具体步骤:打开开发工具IDEA,在工具栏中依次选择“File”→“New”→“Project”选项,在弹出的“New Project”对话框中选择“Empty Project”创建新的空项目。

配置Maven

为了便于项目中各Module的统一管理与配置,我们需要在项目中对Maven进行配置。请在IDEA工具栏中依次选择“File”→“Settings”→“Build, Execution, Deployment”→“Build Tools”→“Maven”选项,打开Maven配置界面并设置Maven的home路径、配置文件路径以及本地仓库位置。如图:

 入门案例

  准备好开发环境后,通过一个完整案例详细介绍其基本使用方法。在该案例中,对每一步操作都进行详尽描述并交代其注意事项,借此为后续开发打下坚实基础。为了便于初学者进行编码实践,在此给出项目开发完成后的总体结构。

 

 开发准备

首先,我们准备案例所需的数据库及数据表。请在MySQL中创建名为mybatisdb的数据库,并在其中创建用户表user。

 id:自增长的用户主键。

 username:用户姓名。

 password:用户密码。

 gender:用户性别。

创建数据库及表的相关SQL语句如下:

 

复制代码
-- 创建数据库mybatisdb
DROP DATABASE IF EXISTS mybatisdb;
CREATE DATABASE mybatisdb;
use mybatisdb;
-- 创建用户表user
CREATE TABLE user(
  id INT primary key auto_increment,
  username VARCHAR(50),
  password VARCHAR(50),
  gender VARCHAR(10)
);
-- 向用户表user中插入数据
INSERT INTO user(username,password,gender) VALUES("lucy","123456","female");
INSERT INTO user(username,password,gender) VALUES("momo","234567","female");
INSERT INTO user(username,password,gender) VALUES("xixi","345678","female");
INSERT INTO user(username,password,gender) VALUES("pepe","456123","female");
复制代码

创建Module

在IDEA的工具栏中依次选择“File”→“New”→“Module”→“Maven”选项,以Maven方式创建新Module。

 设置打包方式

在Module的pom.xml文件中,使用packaging标签设置打包方式为jar,相关代码如下:

复制代码
<groupId>com.cn</groupId>

<artifactId>MyBatis_HelloWorld</artifactId>

<version>1.0-SNAPSHOT</version>

<!-- 设置打包方式 -->

<packaging>jar</packaging>
复制代码

添加依赖

在Module的pom.xml文件中,使用dependency标签添加Module所需依赖,例如, MyBatis依赖、JUnit依赖、MySQL依赖、log4j依赖,相关代码如下:
复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cn</groupId>
    <artifactId>MyBatis_HelloWorld</artifactId>
    <version>1.0-SNAPSHOT</version>
<!-- 设置打包方式 -->
    <packaging>jar</packaging>

    <dependencies>
        <!-- MyBatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>

        <!-- JUnit依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- MySQL依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>

<!-- log4j依赖 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
</dependencies>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>
复制代码

添加日志配置文件

在Module的resources包下创建log4j的日志配置文件log4j.properties,以便观察MyBatis的输出日志信息,相关代码如下:

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

创建实体类

public class User {

    private Integer id;
    private String username;
    private String password;
    private String gender;
}

//省略构造函数、各属性的set和get方法、toString方法

创建接口文件

在src/main/java目录下创建com.cn.mapper包,通常情况下该包用于存放接口文件。在该包中创建接口文件UserMapper.java。

public interface UserMapper {
    User selectUserById(String id);
}

创建映射文件

在src/main/resources目录下以com/cn/mapper的方式创建专门存放映射文件的包。一般而言,接口文件和映射文件是成对出现的,两者的文件名一样但后缀不同。例如接口文件UserMapper.java对应的映射文件为UserMapper.xml。

复制代码
<?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.cn.mapper.UserMapper">
    <select id="selectUserById" parameterType="String" resultType="com.cn.pojo.User">
        select * from user where id = #{id}
    </select>
</mapper>
复制代码

<mapper/>标签的namespace属性表示该mapper的命名空间,其取值为xxxMapper.java接口的全类名。所以,此处namespace属性的值为com.cn.mapper.UserMapper。通过此配置,把xxxMapper.xml映射文件与xxxMapper.java接口文件进行了绑定。

 编写全局配置文件

在src/main/resources目录下创建MyBatis的核心配置文件mybatis-config.xml,该文件主要用于配置连接数据库的信息以及MyBatis的全局配置信息。

复制代码
<?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/mybatisdb"/>
                <!-- 连接数据库所需的用户名 -->
                <property name="username" value="root"/>
                <!-- 连接数据库所需的密码 -->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 配置mapper -->
    <mappers>
        <!-- 设置mapper的完整路径 -->
        <mapper resource="com/cn/mapper/UserMapper.xml"/>
    </mappers>

</configuration>
复制代码

测试

在src/test/java/com/cn/MyBatisTest中对数据库查询操作进行单元测试

复制代码
public class MyBatisTest {

    @Test
    public void testSelectUserById() {
        SqlSession sqlSession = null;
        try {
            // 读取MyBatis核心配置文件mybatis-config.xml
            String fileName = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(fileName);
            // 创建SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            // 通过SqlSessionFactoryBuilder解析配置文件获取sqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
            // 通过SqlSessionFactory对象创建SqlSession对象
            sqlSession = sqlSessionFactory.openSession(true);
            // 通过sqlSession获取UserMapper.java接口的代理实现类的对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 调用UserMapper中的方法执行查询
            String userID = "1";
            User user = userMapper.selectUserById(userID);
            // 打印查询结果
            System.out.println(user);
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            // 关闭SqlSession
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}
复制代码

控制台输出:

DEBUG [main] - ==>  Preparing: select * from user where id = ?

DEBUG [main] - ==> Parameters: 1(String)

DEBUG [main] - <==      Total: 1

User [id=1, username=lucy, password=123456, gender=female]

 分析:

通过Resources读取MyBatis的配置文件mybatis-config.xml。

通过sqlSessionFactoryBuilder对象生成sqlSessionFactory对象。

通过sqlSessionFactory对象的openSession()方法创建sqlSession对象,该对象用于操作数据库或者获取Mapper。调用openSession()方法时可传入boolean类型的参数(它表示是否自动提交事务),通常情况下传入true即可。

通过sqlSession的getMapper()方法获取Mapper。在此过程中,getMapper()会通过动态代理动态生成UserMapper.java接口的代理实现类。

利用Mapper进行查询操作。

执行完查询操作后关闭sqlSession。






 

posted @   因为在乎  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示