MyBatis-Plus初步使用


在使用mybatis的過程中,我們會發現需要自己寫很多的mapper和mapper.xml配置文件,很多時候會寫到相當多的重復代碼,特別是普通的增刪改查,這樣不僅會影響我們的開發效率,也會使得代碼變的冗余且可讀性較差。雖然前面使用了mybatis的自動生成插件generator,但是generator對基類繼承顯得不太友好。而mybatis-plus對此會有非常友好的支持,使用也很方便簡單

簡單的說,Mybatis-Plu(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

這個測試案例使用的是SpringBoot的示例,配置方式使用yml文件格式,項目的Git地址為: git@gitee.com:zhoutao825638/mybatisplus_usage_method.git(或者直接訪問網址:https://gitee.com/zhoutao825638/mybatisplus_usage_method) 使用Intelij IDEA 直接打開即可。

POM文件引入依賴

  • spring-boot-starter-web
  • mysql-connector-java
  • spring-boot-starter-test
  • mybatisplus-spring-boot-starter
  • mybatis-plus
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--Mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatisplus-spring-boot-starter</artifactId>
            <version>1.0.5</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>2.1.9</version>
        </dependency>
    </dependencies>

創建數據庫

為了演示常見的功能,我們這里創建了一個數據庫

表結構

DROP TABLE IF EXISTS `tb_area`;
CREATE TABLE `tb_area` (
  `area_id` int(2) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `area_name` varchar(200) NOT NULL COMMENT '區域名稱',
  `priority` int(2) NOT NULL DEFAULT '0' COMMENT '優先級',
  `create_time` datetime DEFAULT NULL COMMENT '創建時間',
  `update_time` datetime DEFAULT NULL COMMENT '最后修改時間',
  PRIMARY KEY (`area_id`),
  UNIQUE KEY `UK_AREA` (`area_name`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

插入數據

BEGIN;
INSERT INTO `tb_area` VALUES (1, '蕪湖', 10, NULL, NULL);
INSERT INTO `tb_area` VALUES (2, '合肥', 1, NULL, NULL);
INSERT INTO `tb_area` VALUES (3, '亳州', 2, NULL, NULL);
INSERT INTO `tb_area` VALUES (4, '安慶', 3, NULL, NULL);
COMMIT;

配置application.yml文件

# 配置數據源
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=true
    username: root
    password: administrator
    driver-class-name: com.mysql.jdbc.Driver

#    Mybatis-plus配置內容
mybatis-plus:
	#掃描resource目錄下的mapper文件夾中的xml文件
  mapper-locations: classpath:/mapper/*.xml
  global-config:
  #主鍵類型  0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 3
	#字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
    field-strategy: 2
	#駝峰下划線轉換
    db-column-underline: true
    refresh-mapper: true
	#邏輯刪除配置
    logic-delete-value: 0
    logic-not-delete-value: 1

Bean配置文件

  • MapperScan注解配置了Mapper文件的地址
@Configuration
@MapperScan("com.tao.mybatis_plus.mapper*")
public class MybatisPlusConfig {

    /**
     * mybatis-plus SQL執行效率插件【生產環境可以關閉】
     */
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        return new PerformanceInterceptor();
    }

    /**
     * mybatis-plus分頁插件<br>
     * 文檔:http://mp.baomidou.com<br>
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 開啟 PageHelper 的支持
        paginationInterceptor.setLocalPage(true);
        return paginationInterceptor;
    }

    /**
     * 注入主鍵生成器
     */
    @Bean
    public IKeyGenerator keyGenerator() {
        return new H2KeyGenerator();
    }

    /**
     * 注入sql注入器
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }

}

三層架構模式

Bean實體對象

  • 首先創建了一個實體基類,里面保存了一些基本的數據類型,比如創建時間,更新時間等
public class BaseEntity<T extends Model> extends Model<T> {


    private Date createTime;
    private Date updateTime;


    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    @Override
    public String toString() {
        return "BaseEntity{" +
                "createTime=" + createTime +
                ", updateTime=" + updateTime +
                '}';
    }

    @Override
    protected Serializable pkVal() {
        return null;
    }
}
  • 然后創建新的實體繼承,注意需要使用注解標注表名
@TableName("tb_area")
public class Book extends BaseEntity<Book> implements Serializable {
    @TableId
    private int areaId;
    private String areaName;
    private int priority;

    public int getAreaId() {
        return areaId;
    }

    public void setAreaId(int areaId) {
        this.areaId = areaId;
    }

    public String getAreaName() {
        return areaName;
    }

    public void setAreaName(String areaName) {
        this.areaName = areaName;
    }

    public int getPriority() {
        return priority;
    }

    public void setPriority(int priority) {
        this.priority = priority;
    }

    @Override
    public String toString() {
        return "Book{" +
                "areaId=" + areaId +
                ", areaName='" + areaName + '\'' +
                ", priority=" + priority +
                '}';
    }
}

DAO數據持久層

  • 數據持久層創建了兩個文件 SuperMapper,作為基類Mapper
import com.baomidou.mybatisplus.mapper.BaseMapper;

public interface SuperMapper<T>  extends BaseMapper<T>{
}

  • 另外一個BookMapper,繼承了SuperMapper
public interface BookMapper extends SuperMapper<Book> {
}

Service層

  • Service層使用接口的方式,創建以下文件
//注意繼承MyBatis-Plus的基類Service   IService<Book>
public interface IBookService extends IService<Book>  {

}

Service實現了上面的接口

@Service
public class BookServerImpl extends ServiceImpl<BookMapper,Book> implements IBookService {
}

Controller層

@RestController
@RequestMapping("/book")
public class IndexController {

    @Autowired
    private IBookService bookServer;

    /**
     * 查詢圖書列表
     * @param index 索引
     * @param page 數量
     * @return String
     */
    @GetMapping("/list/{index}/{page}")
    public String index(@PathVariable("index") int index,@PathVariable("page") int page){
	//已經集成了分頁的功能
        Page<Book> bookPage = bookServer.selectPage(new Page<Book>(index, page));
        return JSONObject.toJSONString(bookPage).toString();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM