SpringBoot2.0系列--05--通用Mybatis.md

Posted by lizhao on 07-09,2019

SpringBoot2.0系列--05--通用Mybatis

[toc]

前言

JDK出11了,SpringBoot出2.0了,还没有系统的学习过,刚好最近项目中有使用到,就把一些关键的东西列出来,避免忘记 SpringBoot2.0系列--00--目录

介绍

这样连接成功了数据库,刚开始还好,如果经常开发业务的话,就会写挺多dao的,所以很多通用dao框架就出现了,这些框架一般都包含了一些常用的方法,比如增删改查计数等

数据库连接池

在这篇里面讲过这个类似的,东西都一模一样,代码可以从里面拷贝 https://blog.csdn.net/cmqwan/article/details/80910361

下面直接看下怎么集成吧

总流程

  1. 添加需要依赖的包
  2. 添加CrudMapper、CrudProvider、CrudSqlProvider、CrudSqlSource、Entity、EntityUtils
  3. 在org.apache.ibatis.builder.annotation包路径下添加MapperAnnotationBuilder (这2步都是固定的操作,中间会提示一些引入的包错误,删掉重新引入就好)
  4. 在entity中添加2个注解,一个是表名,一个是id字段
  5. XXXDao需要继承CrudMapper<XXX, Integer>
  6. 这时候要确保XXX.xml文件中的resultMap有一个的id需要是resultMap
  7. 项目启动测试,这时候大家就可以通过dao来调用CrudMapper里面的方法:findOne、listAll、update、delete等

示例

这里以User表为例,分别对上面的过程进行解释

添加需要依赖的包

<?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.lizhaoblog</groupId>
  <artifactId>pro005-common-mybatis</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>pro005-common-mybatis</name>
  <description>common-mybatis project for Spring Boot</description>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <mysql.version>5.1.38</mysql.version>
    <druid.version>1.0.16</druid.version>
    <fastjson.version>1.2.7</fastjson.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <!-- jdbc、mybatis 需要-->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!-- jdbc、mybatis 需要-->

    <!--jdbc连接池 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>${druid.version}</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.33</version>
    </dependency>

    <dependency>
      <groupId>org.hibernate.javax.persistence</groupId>
      <artifactId>hibernate-jpa-2.1-api</artifactId>
      <version>1.0.0.Final</version>
    </dependency>


  </dependencies>


  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>


</project>

添加CrudMapper、CrudProvider、CrudSqlProvider、CrudSqlSource、Entity、EntityUtils

在org.apache.ibatis.builder.annotation包路径下添加MapperAnnotationBuilder

这些内容可以从这里获取https://blog.csdn.net/cmqwan/article/details/80910361 (这2步都是固定的操作,中间会提示一些引入的包错误,删掉重新引入就好)

在entity中添加2个注解,一个是表名,一个是id字段

/*
 * Copyright (C), 2015-2018
 * FileName: User
 * Author:   zhao
 * Date:     2018/10/11 17:51
 * Description: User实体类
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.lizhaoblog.pro005commonmybatis.entity;

import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 〈一句话功能简述〉<br>
 * 〈User实体类〉
 *
 * @author zhao
 * @date 2018/10/11 17:51
 * @since 1.0.1
 */
@Table(name = "user")
public class User {
  @Id
  private Integer id;
  private String name;
  private Integer age;

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  @Override
  public String toString() {
    return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}';
  }
}

XXXDao需要继承CrudMapper<XXX, Integer>

/*
 * Copyright (C), 2015-2018
 * FileName: UserDao
 * Author:   zhao
 * Date:     2018/10/11 17:50
 * Description: User数据库连接类
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.lizhaoblog.pro005commonmybatis.dao.mysql;


import com.lizhaoblog.pro005commonmybatis.base.mybatis.CrudMapper;
import com.lizhaoblog.pro005commonmybatis.entity.User;

import java.util.List;

/**
 * 〈一句话功能简述〉<br>
 * 〈User数据库连接类〉
 *
 * @author zhao
 * @date 2018/10/11 17:50
 * @since 1.0.1
 */
public interface UserDao extends CrudMapper<User, Integer> {
  List<User> findAll();
}

这时候要确保XXX.xml文件中的resultMap有一个的id需要是resultMap

<?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.lizhaoblog.pro005commonmybatis.dao.mysql.UserDao">
  <!-- 这个id就是其他标签暴露的一个key,这样返回的数据就是这个resultMap,比如findAll标签就用到了这个 -->
  <resultMap type="com.lizhaoblog.pro005commonmybatis.entity.User" id="resultMap">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
  </resultMap>


  <select id="findAll" resultMap="resultMap">
		select * from user
	</select>

</mapper>

项目启动测试,这时候大家就可以通过dao来调用CrudMapper里面的方法:findOne、listAll、update、delete等

/*
 * Copyright (C), 2015-2018
 * FileName: MybatisController
 * Author:   zhao
 * Date:     2018/10/11 18:01
 * Description: MybatisController
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 */
package com.lizhaoblog.pro005commonmybatis.controller;

import com.lizhaoblog.pro005commonmybatis.dao.mysql.UserDao;
import com.lizhaoblog.pro005commonmybatis.entity.User;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 〈一句话功能简述〉<br>
 * 〈MybatisController〉
 *
 * @author zhao
 * @date 2018/10/11 18:01
 * @since 1.0.1
 */
@RestController
@RequestMapping("/mybatis")
public class MybatisController {
  @Autowired
  private UserDao userDao;

  @RequestMapping(value = "/find-all")
  public String findAll() {
    List<User> all = userDao.findAll();
    return all.toString();
  }
  @RequestMapping(value = "/list-all")
  public String listAll() {
    List<User> all = userDao.findAll();
    return all.toString();
  }
}

这样子就是连接成功了

联系方式

项目代码路径码云:https://gitee.com/lizhaoandroid/Springboot-Learning-lz

联系方式:QQ3060507060

查看下一篇或者其他文章,可点击目录或者专栏查看