Использование Mybatis (интеграция Spring, SpringBoot)

база данных Spring MyBatis SQL
Использование Mybatis (интеграция Spring, SpringBoot)

Вчера, когда я изучал проектирование, я обнаружил, что в проекте используется много mybatis.MybatisЭто структура уровня доступа к данным. Как и большинство подобных платформ, Mybatis экономит разработчикам большую часть кода, используя базовую базу данных операций jdbc. С mybatis разработчикам нужно только написать SQL в файле конфигурации и объявить возвращаемое значение SQL И отображение типа java может быть. Конечно, mybatis также поддерживает программирование для интерфейсов.Если вы интегрируете mybatis и spring, вы обнаружите, что можете работать с базой данных, не объявляя класс реализации для интерфейса.Все, что вам нужно сделать, это объявить его в файле xml.Mybatis достаточно, и нижний слой mybatis поможет нам справиться с такими операциями, как связывание с базой данных.

Ниже я не буду объяснять соответствующие теоретические знания mybatis, потому что официальный сайт на самом деле очень понятен, и что мне нужно сделать, так это объяснить с трех прикладных уровней.Эти три уровня:编程方式使用mybatis,基于注解使用mybatis,spring集成mybatis, все проекты создаются с помощью maven.

Для удобства демонстрации здесь я размещаю соответствующие скрипты базы данных и некоторые общие компоненты, такие как (mapperинтерфейс):

create database test;
CREATE TABLE `test`.`student` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `NAME` VARCHAR(45) NULL,
  `AGE` INT NULL,
  `ADDRESS` VARCHAR(45) NULL,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `id_UNIQUE` (`id` ASC));

StudentMapper.java接口

package com.wokao666.mappers;

import java.util.List;
import java.util.Map;

import com.wokao666.entity.Student;

/**
 * 
 * The class StudentMapper.
 *
 * Description:学生mapper
 *
 * @author: huangjiawei
 * @since: 2018年6月7日
 * @version: $Revision$ $Date$ $LastChangedBy$
 *
 */
public interface StudentMapper {

    public Student getById(Map<String, Object> param);

    public List<Student> listStudents();
}

实体类Student.java

package com.wokao666.entity;

/**
 * 
 * The class Student.
 *
 * Description:学生实体类
 *
 * @author: huangjiawei
 * @since: 2018年6月7日
 * @version: $Revision$ $Date$ $LastChangedBy$
 *
 */
public class Student {

    private int id;
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    private String name;
    private String address;
    private int age;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getAddress() {
        return address;
    }
    
    public void setAddress(String address) {
        this.address = address;
    }
    
    public int getAge() {
        return age;
    }
    
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", address=" + address + ", age=" + age + "]";
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    public Student(int id, String name, String address, int age) {
        super();
        this.id = id;
        this.name = name;
        this.address = address;
        this.age = age;
    }
    
    public Student() {
    }
}

StudentMapper.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,为了更好的进行区别,我们通常会将该值设置为包名的全限定路径 -->
<mapper namespace="com.wokao666.mappers.StudentMapper">
    
    <!-- 表示你的sql查询结果和java类型的一个映射,java类型通常是java bean -->
    <resultMap type="com.wokao666.entity.Student" id="studentMap">
        <result property="id" column="ID"/>
        <result property="name" column="NAME" />
        <result property="age" column="AGE" />
        <result property="address" column="ADDRESS" />
    </resultMap>
    
    <!-- select语句 ,根据条件进行查询,指定参数类型为map类型-->
    <select id="getById" resultMap="studentMap" parameterType="java.util.Map">
        select * from Student where id = #{id};
    </select>	
    
    <select id="listStudents" resultMap="studentMap">
        select * from Student;
    </select>
</mapper>

mybatis-config.xml

<?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>
    <!-- 属性配置,类似于全局变量   -->
    <properties>
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <property name="url"
            value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </properties>
    <!-- 在此,你可以定义多个环境,表示开发、测试、预生产、生产 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- mapper文件路径配置,默认会加载类路径下的资源,更多配置可以参见官方文档 -->
    <mappers>
        <mapper resource="StudentMapper.xml" />
    </mappers>
</configuration>

Во-первых, используйте mybatis программно для работы с базой данных.

В mybatis построение программыSqlSessionFactoryначалось,SqlSessionFactoryв состоянии пройтиSqlSessionFactoryBuilderстроить,SqlSessionFactoryBuilderПоддержка сборки из потока файла конфигурации.

pom.xml

<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>mybatisTest</groupId>
    <artifactId>mybatisTest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>mybatisTest</name>
    
    <properties>
        <java.version>1.8</java.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
    </dependencies>
</project>

Test.java

package com.wokao666.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.wokao666.entity.Student;
import com.wokao666.mappers.StudentMapper;

/**
 * 
 * The class Test.
 *
 * Description:编程方式使用mybatis
 *
 * @author: huangjiawei
 * @since: 2018年6月8日
 * @version: $Revision$ $Date$ $LastChangedBy$
 *
 */
public class Test {

public static void main(String[] args) throws IOException {
    //	读取我们的配置文件
    InputStream input = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input);
    
    // 打开一个会话session
    SqlSession session = factory.openSession();
    
    // 构建查询参数
    Map<String, Object> paramMap = new HashMap<String, Object>();
    paramMap.put("id", 2);
    
    //	测试使用id获取一条记录
    Student stu = session.selectOne("getById", paramMap);
    System.err.println(stu.toString());
    
    // 测试使用命名空间查询一条记录(接口)
    StudentMapper mapper = session.getMapper(StudentMapper.class);
    System.err.println(mapper.getById(paramMap));
    
    // 测试获取一个列表
    List<Student> stuList = session.selectList("listStudents");
    System.err.println(Arrays.toString(stuList.toArray()));
    }
}

вывод программы

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Fri Jun 08 14:50:11 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Student [id=2, name=Mike, address=浙江省, age=24]
Student [id=2, name=Mike, address=浙江省, age=24]
[Student [id=1, name=HUANGJIAWEI, address=广东省, age=23], Student [id=2, name=Mike, address=浙江省, age=24]]

2. Mybatis на основе аннотаций

В этом блоге демонстрируется только использование простого sql, такого как сложный sql (например, связанное соединение запросов) и т. д. Официальный веб-сайт сделал соответствующие пояснения, и редактор может также резюмировать их позже. Поскольку все мы знаем, mybatis рекомендует писать операторы sql для различныхmapper.xml,когда наш бизнес очень большой то в системе несомненно будет много новых xml файлов.Конечно мы предпочитаем как можно меньше xml файлов.Поэтому mybatis поддерживает разработчиков используя интерфейсы и аннотации.mybatis,для некоторых простых sql , нам не нужно писать его в файле xml, наоборот, мы рекомендуем писать простой sql в аннотации, а сложный sql управляется файлом xml.

Ниже я продемонстрирую два способа использования mybatis на основе аннотаций, один заключается в том, чтобы переписать первый метод на основе программирования, а второй будет использовать spring-boot для интеграции mybatis, Конечно, второй способ будет более практичным и близким. разработки, или как его используют многие разработчики, ха-ха!

1. Использование аннотаций на основе программных методов

существуетStudentMapper.java接口Новый метод добавляется к , как показано ниже:

package com.wokao666.mappers;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Select;

import com.wokao666.entity.Student;

/**
 * 
 * The class StudentMapper.
 *
 * Description:学生mapper
 *
 * @author: huangjiawei
 * @since: 2018年6月7日
 * @version: $Revision$ $Date$ $LastChangedBy$
 *
 */
public interface StudentMapper {
    
    // 此处将sql写在接口的注解上,简单粗暴
    @Select("select * from Student where id=1")
    public Student get();
    
    public Student getById(Map<String, Object> param);
    
    public List<Student> listStudents();

}

Тогда в первом резюмеTest.javaДобавьте эту строку кода в конец.

System.err.println(mapper.get());
2. Использование mybatis на основе spring-boot

Адрес загрузки кода:GitHub.com/smallercode…

Схема структуры проекта выглядит следующим образом:

Проект разделен на три уровня, а именноcontroller,serviceиdaoслой, традиционныйmvcМодель.

Начать после импорта проектаMybatisDemoApplication.javaкласс, затем тип браузераhttp://localhost:7000/get.json?id=1Вот и все!

3. Интегрируйте Spring

В любое время, когда мы работаем с базой данных на уровне кода приложения, первое, что нам нужно сделать, это настроить подходящий источник данных.Источник данных может просто настроить такие параметры, как URL-адрес jdbc, драйвер, имя пользователя, пароль и т. д. ., конечно. Более продвинутый подход заключается в том, что мы можем использовать что-то вродеc3p0,druidТакой пул соединений с базой данных используется для управления нашими источниками данных.Здесь Xiaobian использует пул соединений, предоставленный Alibaba.druid.

Самое важное для Spring для интеграции mybatis — добавить пакет зависимостей, а именно:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.1</version>
</dependency>

Адрес официального сайта проекта:Уууу. Не поставил boost.org/spring/this/i…

Адрес загрузки примера кода в первом и третьем подразделах выше:GitHub.com/smallercode…

Если этот пример кода полезен для вас, дайте младшему брату начать~~~

В конце концов, mybatis — это фреймворк доступа к данным.В целом его характеристики заключаются в максимально возможном сокращении кода для написания базовой ссылки jdbc.В то же время mybatis также помогает нам завершить сопоставление между сущностями базы данных и java объекты. Конечно, если вы хотите подробно изучить mybatis, я предлагаю вам перейти на официальный веб-сайт системы mybatis, чтобы узнать, mybatis очень мощный, если вам нужно делать условные суждения в вашем sql, mybatis запускает вас в sql картографа файл с использованием, например<if>Тег, чтобы судить, давай, Сан Нянь, друзья, добро пожаловать, чтобы общаться больше!