5、mybatis-基本使用

2019-08-17  本文已影响0人  唯老

一、基本使用

  1. 导入相关jar包
  2. 全局配置文件
  3. 编写Mapper接口
  4. xml映射文件(mapper,xml)
  5. 编写实体类
  6. 编写测试文件

二、导入相关包

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.2</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.17</version>
</dependency>

三、全局配置文件

1、主要参数配置

  1. properties加载(非必要)
  2. settings配置(非必要)
  3. 别名配置(非必要)
  4. environments配置(必要)
  5. mappers配置(必要)

2、配置模板

<?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>
    <!--    1.加载外部配置文件-->
    <properties resource="db.properties"/>
    <!--    2. mybatis 参数配置  -->
    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="multipleResultSetsEnabled" value="true"/>
        <setting name="useColumnLabel" value="true"/>
        <setting name="useGeneratedKeys" value="false"/>
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <setting name="defaultStatementTimeout" value="25"/>
        <setting name="defaultFetchSize" value="100"/>
        <setting name="safeRowBoundsEnabled" value="false"/>
        <setting name="mapUnderscoreToCamelCase" value="false"/>
        <setting name="localCacheScope" value="SESSION"/>
        <setting name="jdbcTypeForNull" value="OTHER"/>
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
    </settings>
    <!--3.别名-->
    <typeAliases>
        <package name="com.vip.mybatis.entity"/>
    </typeAliases>
    <!-- 4.数据库环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- MySQL数据库驱动 -->
                <property name="driver" value="${driver}"/>
                <!-- 连接数据库的URL -->
                <property name="url"
                          value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 5.将mapper文件加入到配置文件中 -->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>
# resources/db.properties
# msyql8驱动
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username=root
password=root

四、编写接口

1、UserMapper接口

package com.vip.mybatis.mapper;
import com.vip.mybatis.entity.User;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
    /**
     * 通过uid查询用户
     * @param uid
     * @return
     */
    User findById(int uid);
    /**
     * 保存用户
     * @param user
     * @return
     */
    int insert(@Param("user") User user);
}

2、User实体类

public class User implements Serializable {
    private Integer uid;
    private String name;
    private String password;
    private String phone;
    private String email;
    private Date joinDate;
    private Integer status;
}

3、SQL

CREATE TABLE `user`
(
    `uid`      BIGINT AUTO_INCREMENT NOT NULL COMMENT '主键ID',
    `name`     VARCHAR(30)  DEFAULT NULL COMMENT '姓名',
    `password` VARCHAR(128) DEFAULT NULL COMMENT '密码',
    `phone`    CHAR(11)     DEFAULT NULL COMMENT '手机',
    `email`    VARCHAR(50)  DEFAULT NULL COMMENT '邮箱',
    join_date  TIMESTAMP    DEFAULT current_timestamp() COMMENT '创建时间',
    status     INT          DEFAULT 1 COMMENT '0 表示删除 1 表示正常',
    CONSTRAINT pk_user PRIMARY KEY (`uid`),
    CONSTRAINT uk_user_name UNIQUE KEY ('name'),
    CONSTRAINT uk_user_phone UNIQUE KEY ('password'),
    CONSTRAINT uk_user_email UNIQUE KEY ('email')
);

五、编写接口

<?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.vip.mybatis.mapper.UserMapper">
    <select id="findById" resultType="User">
        SELECT u.uid, u.name, u.password, u.phone, u.email FROM user u
        WHERE u.uid=#{uid}
    </select>
    <insert id="insert">
        INSERT INTO user(name, password, phone, email)
        VALUES (#{user.name},#{user.password},#{user.phone},#{user.email})
    </insert>
</mapper>

六 编写测试文件

测试

public class App {
    public static void main(String[] args) {
        // 第一步 根据配置文件创建SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder()
                .build(App.class
                        .getClassLoader()
                        .getResourceAsStream("mybatis-config.xml"));
        // 第二步 通过SqlSessionFactory实例化SqlSession对象
        SqlSession sqlSession = factory.openSession();
        // 第三步 通过SqlSession对象实例化Mapper对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 第四步  调用调用接口方法获取数据
        User user = mapper.findById(1);
        System.out.println(user);
    }
}

执行流程图

image

核心类介绍

SqlSessionFactoryBuilder(构造器)

它会根据配置或者代码来生成 SqlSessionFactory,采用的是分步构建的 Builder 模式。

SqlSessionFactory(工厂接口)

依靠它来生成 SqlSession,使用的是工厂模式。

SqlSession(会话)

一个既可以发送 SQL 执行返回结果,也可以获取 Mapper 的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是 MyBatis 提供的 SQL Mapper 接口编程技术,它能提高代码的可读性和可维护性。

SQL Mapper(映射器)

MyBatis 新设计存在的组件,它由一个 Java 接口和 XML 文件(或注解)构成,需要给出对应的 SQL 和映射规则。它负责发送 SQL 去执行,并返回结果。

上一篇下一篇

猜你喜欢

热点阅读