Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)

01:Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)

02:Mybatis-Plus:快速开始(Spring + Mybatis + Mabatis-Plus)

03:Mybatis-Plus:快速开始(SpringBoot + Mybatis + Mybatis)

文章目录

  • 1. 了解Mybatis-Plus
    • 1.1 Mybatis-Plus介绍
    • 1.2 Mybatis-Plus特性:摘自官网
    • 1.3 Mybatis-Plus架构
    • 1.4 Mybatis-Plus作者介绍
  • 2. 快速开始 环境准备
    • 2.1 创建数据
    • 2.2 创建工程 导入依赖
  • 3. Mybatis + Mybatis-Plus
    • 3.1 创建子Module
    • 3.2 编写log4j的日志文件
    • 3.3 编写mybatis配置文件
    • 3.4 编写User实体对象
    • 3.5 编写UserMapper接口
    • 3.6 编写UserMapper.xml映射文件
    • 3.7 Mybatis+MP实现查询User
    • 3.8 简单说明
  • 4. 附录 BaseMapper 源码

1. 了解Mybatis-Plus


1.1 Mybatis-Plus介绍

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

Mybatis-Plus官网
Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第1张图片

我们打开官方的指南
Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第2张图片


1.2 Mybatis-Plus特性:摘自官网

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第3张图片


1.3 Mybatis-Plus架构

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第4张图片


1.4 Mybatis-Plus作者介绍

Mybatis-Plus是由 baomidou(苞米豆)组织开发并且开源的,目前该组织大概有16人左右。
Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第5张图片


2. 快速开始 环境准备

对于Mybatis整合MP有常常有三种用法,分别是Mybatis+MPSpring+Mybatis+MPSpring Boot+Mybatis+MP


2.1 创建数据

Navicat执行下列SQL语句

CREATE DATABASE mp;
USE mp;

-- 创建测试表
CREATE TABLE `tb_user` (
	`id` BIGINT ( 20 ) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
	`user_name` VARCHAR ( 20 ) NOT NULL COMMENT '用户名',
	`password` VARCHAR ( 20 ) NOT NULL COMMENT '密码',
	`name` VARCHAR ( 30 ) DEFAULT NULL COMMENT '姓名',
	`age` INT ( 11 ) DEFAULT NULL COMMENT '年龄',
	`email` VARCHAR ( 50 ) DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY ( `id` ) 
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;

-- 插入测试数据
INSERT INTO `tb_user` ( `id`, `user_name`, `password`, `name`, `age`, `email` )
VALUES
	( '1', 'zhangsan', '123456', '张三', '18', 'test1@itcast.cn' );
INSERT INTO `tb_user` ( `id`, `user_name`, `password`, `name`, `age`, `email` )
VALUES
	( '2', 'lisi', '123456', '李四', '20', 'test2@itcast.cn' );
INSERT INTO `tb_user` ( `id`, `user_name`, `password`, `name`, `age`, `email` )
VALUES
	( '3', 'wangwu', '123456', '王五', '28', 'test3@itcast.cn' );
INSERT INTO `tb_user` ( `id`, `user_name`, `password`, `name`, `age`, `email` )
VALUES
	( '4', 'zhaoliu', '123456', '赵六', '21', 'test4@itcast.cn' );
INSERT INTO `tb_user` ( `id`, `user_name`, `password`, `name`, `age`, `email` )
VALUES
	( '5', 'sunqi', '123456', '孙七', '24', 'test5@itcast.cn' );

执行结果:

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第6张图片


2.2 创建工程 导入依赖

创建工程:

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第7张图片

导入依赖:

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第8张图片

pom.xml


<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.0modelVersion>

    <groupId>com.tiangroupId>
    <artifactId>mybatis_plus_projectartifactId>
    <version>1.0-SNAPSHOTversion>

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

    <dependencies>
        
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plusartifactId>
            <version>3.3.2version>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.25version>
        dependency>
        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druidartifactId>
            <version>1.2.6version>
        dependency>
        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
            <version>1.18.20version>
        dependency>
        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.12version>
        dependency>
        
        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
            <version>1.7.30version>
        dependency>
    dependencies>

    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                configuration>
            plugin>
        plugins>
    build>
project>

3. Mybatis + Mybatis-Plus

下面演示,通过纯Mybatis与Mybatis-Plus整合。


3.1 创建子Module

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第9张图片


3.2 编写log4j的日志文件

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第10张图片
log4j.properties

log4j.rootLogger=DEBUG,A1

log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%t] [%c]-[%p] %m%n

3.3 编写mybatis配置文件

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第11张图片

mybatis-config.xml


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://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="317525"/>
            dataSource>
        environment>
    environments>
    <mappers>
        <mapper resource="UserMapper.xml"/>
    mappers>
configuration>

3.4 编写User实体对象

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第12张图片
User.java

package pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data // get / set 方法
@NoArgsConstructor // 无参构造函数
@AllArgsConstructor // 有参构造函数
public class User {

    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
}

3.5 编写UserMapper接口

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第13张图片
UserMapper.java

package mapper;

import pojo.User;

import java.util.List;

public interface UserMapper {
// 接口中方法默认为public
    List<User> findAll();
}

3.6 编写UserMapper.xml映射文件

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第14张图片

UserMapper.xml


DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.UserMapper">

    <select id="findAll" resultType="pojo.User">
        select id, user_name as 'userName', password, name, age, email
        from mp.tb_user
    select>

mapper>

运行结果:

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第15张图片


3.7 Mybatis+MP实现查询User

第一步,将UserMapper继承BaseMapper,将拥有了BaseMapper中的所有方法:

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第16张图片

UserMapper.java

package mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import pojo.User;

import java.util.List;

public interface UserMapper extends BaseMapper<User> {
    List<User> findAll();
}

第二步,使用MP中的MybatisSqlSessionFactoryBuilder进程构建:

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第17张图片

TestMybatisPlus.java

import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
import mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import pojo.User;

import java.io.InputStream;
import java.util.List;

public class TestMybatisPlus {

    @Test
    public void testFindAll() throws Exception {

        String config = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(config);
        // 这里使用的是MP中的MybatisSqlSessionFactoryBuilder
        SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        //测试查询 可以使用原来的方法 完全没有问题
//        List users = userMapper.findAll();

        // 现在我们使用MP给我们提供的方法 null就表示没有查询条件 查询所有的数据出来
        List<User> users = userMapper.selectList(null);
        for (User user : users) {
            System.out.println(user);
        }
    }
}

运行结果:

发现运行报错了
Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第18张图片

解决:在User对象中添加@TableName,指定数据库表名
Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第19张图片
x现在的运行结果:
Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第20张图片


3.8 简单说明

Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis + Mybatis-Plus,Mybatis-Plus自动做了属性映射)_第21张图片
由于使用了MybatisSqlSessionFactoryBuilder进行了构建,继承的BaseMapper中的方法就载入到了SqlSession中,所以就可以直接使用相关的方法;


4. 附录 BaseMapper 源码

/*
 * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at *

* https://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.baomidou.mybatisplus.core.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; /* :` .:, :::,,. :: `:::::: ::` `,:,` .:` `:: `::::::::.:` `:';,` ::::, .:::` `@++++++++: `` :::` @+++++++++++# :::, #++++++++++++++` ,: `::::::;'##++++++++++ .@#@;` ::::::::::::::::::::; #@####@, :::::::::::::::+#;::. @@######+@:::::::::::::. #@:; , @@########':::::::::::: .#''':` ;##@@@+:##########@::::::::::: @#;.,:. #@@@######++++#####'::::::::: .##+,:#` @@@@@#####+++++'#####+::::::::` ,`::@#:` `@@@@#####++++++'#####+#':::::::::::@. @@@@######+++++''#######+##';::::;':,` @@@@#####+++++'''#######++++++++++` #@@#####++++++''########++++++++' `#@######+++++''+########+++++++; `@@#####+++++''##########++++++, @@######+++++'##########+++++#` @@@@#####+++++############++++; ;#@@@@@####++++##############+++, @@@@@@@@@@@###@###############++' @#@@@@@@@@@@@@###################+: `@#@@@@@@@@@@@@@@###################'` :@#@@@@@@@@@@@@@@@@@##################, ,@@@@@@@@@@@@@@@@@@@@################; ,#@@@@@@@@@@@@@@@@@@@##############+` .#@@@@@@@@@@@@@@@@@@#############@, @@@@@@@@@@@@@@@@@@@###########@, :#@@@@@@@@@@@@@@@@##########@, `##@@@@@@@@@@@@@@@########+, `+@@@@@@@@@@@@@@@#####@:` `:@@@@@@@@@@@@@@##@;. `,'@@@@##@@@+;,` ``...`` _ _ /_ _ _/_. ____ / _ / / //_//_//_|/ /_\ /_///_/_\ Talk is cheap. Show me the code. _/ / */ /** * Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能 *

这个 Mapper 支持 id 泛型

* * @author hubin * @since 2016-01-23 */
public interface BaseMapper<T> extends Mapper<T> { /** * 插入一条记录 * * @param entity 实体对象 */ int insert(T entity); /** * 根据 ID 删除 * * @param id 主键ID */ int deleteById(Serializable id); /** * 根据 columnMap 条件,删除记录 * * @param columnMap 表字段 map 对象 */ int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); /** * 根据 entity 条件,删除记录 * * @param wrapper 实体对象封装操作类(可以为 null) */ int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper); /** * 删除(根据ID 批量删除) * * @param idList 主键ID列表(不能为 null 以及 empty) */ int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); /** * 根据 ID 修改 * * @param entity 实体对象 */ int updateById(@Param(Constants.ENTITY) T entity); /** * 根据 whereEntity 条件,更新记录 * * @param entity 实体对象 (set 条件值,可以为 null) * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) */ int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper); /** * 根据 ID 查询 * * @param id 主键ID */ T selectById(Serializable id); /** * 查询(根据ID 批量查询) * * @param idList 主键ID列表(不能为 null 以及 empty) */ List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); /** * 查询(根据 columnMap 条件) * * @param columnMap 表字段 map 对象 */ List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); /** * 根据 entity 条件,查询一条记录 * * @param queryWrapper 实体对象封装操作类(可以为 null) */ T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** * 根据 Wrapper 条件,查询总记录数 * * @param queryWrapper 实体对象封装操作类(可以为 null) */ Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** * 根据 entity 条件,查询全部记录 * * @param queryWrapper 实体对象封装操作类(可以为 null) */ List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** * 根据 Wrapper 条件,查询全部记录 * * @param queryWrapper 实体对象封装操作类(可以为 null) */ List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** * 根据 Wrapper 条件,查询全部记录 *

注意: 只返回第一个字段的值

* * @param queryWrapper 实体对象封装操作类(可以为 null) */
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** * 根据 entity 条件,查询全部记录(并翻页) * * @param page 分页查询条件(可以为 RowBounds.DEFAULT) * @param queryWrapper 实体对象封装操作类(可以为 null) */ <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); /** * 根据 Wrapper 条件,查询全部记录(并翻页) * * @param page 分页查询条件 * @param queryWrapper 实体对象封装操作类 */ <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); }


你可能感兴趣的:(SSM,SSM整合,Mybatis-plus,--,黑马,java,spring,boot,spring,mybatis,mybatis-plus)