Spring Boot интегрирует MyBatis для реализации универсального Mapper

Spring Boot задняя часть база данных MyBatis

MyBatis

Что касается MyBatis, то с ним знакомо большинство людей. MyBatis — это превосходная структура уровня сохраняемости, которая поддерживает пользовательский SQL, хранимые процедуры и расширенное сопоставление. MyBatis избегает почти всего кода JDBC и ручной настройки параметров и выборки наборов результатов. MyBatis может использовать простой XML или аннотации для настройки и сопоставления исходной информации, а также сопоставления интерфейсов и Java POJO (обычные старые объекты Java, обычные объекты Java) с записями в базе данных.

Будь то DDD (Domain Driven Design, Domain Driven Design) или стиль многоуровневой архитектуры, он будет включать в себя работу слоя сохранения базы данных.В этой статье объясняется, как Spring Boot интегрирует MyBatis для реализации общего Mapper.

Spring Boot интегрирует MyBatis

импортировать зависимости

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

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

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>

Вы можете видеть, что введение Mybatis, как указано вышеmybatis-spring-boot-starter, стартер, предоставленный Mybatis.

Конфигурация базы данных

Добавьте следующую конфигурацию в application.yml:

spring:
  datasource:
    hikari:
      connection-test-query: SELECT 1
      minimum-idle: 1
      maximum-pool-size: 5
      pool-name: dbcp1
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=utf-8
    username: user
    password: pwd
    type: com.zaxxer.hikari.HikariDataSource
    schema[0]: classpath:/init.sql
    initialize: true

Как видите, мы настроили основную информацию о хикари и базе данных. Когда служба приложения запускается, сценарий sql в пути к классам автоматически инициализируется.

CREATE TABLE IF NOT EXISTS `test` (
  `id` bigint(20) unsigned NOT NULL,
  `local_name` varchar(128) NOT NULL ,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

В sql-скрипте мы создаемtestповерхность.

На этом этапе нам обычно нужно настроить путь к файлу xml и классу сущностей, сопоставленному Mybatis позже. Автоматически генерировать код в соответствии с генератором mybatis. включаютXXMapper.java,XXEntity.java, XXMapper.xml. Мы не будем его здесь демонстрировать, а сразу перейдем к следующему шагу общей реализации Mapper.

Использование универсального картографа

импортировать зависимости

        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>3.4.0</version>
        </dependency>

Автор универсального картографаabel533, вы можете прочитать исходный код, если вам интересно.

Настройка универсального картографа

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;

import java.util.Properties;

@Configuration
public class MyBatisMapperScannerConfig {
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.blueskykong.mybatis.dao");//扫描该路径下的dao
        Properties properties = new Properties();
        properties.setProperty("mappers", "com.blueskykong.mybatis.config.BaseDao");//通用dao
        properties.setProperty("notEmpty", "false");
        properties.setProperty("IDENTITY", "MYSQL");
        mapperScannerConfigurer.setProperties(properties);
        return mapperScannerConfigurer;
    }
}

В конфигурации задается дао по указанному пути и указывается общий дао. должны знать о том,MapperScannerConfigurerОтtk.mybatis.spring.mapperпод пакет.

BaseDao

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

public interface BaseDao<T> extends Mapper<T>,MySqlMapper<T>{

}

Общий интерфейс Mapper, другие интерфейсы могут наследовать этот интерфейс.

Создать сущность

нам нужно добавитьtestСущность, соответствующая таблице.

@Data
@Table(name = "test")
@AllArgsConstructor
@NoArgsConstructor
public class TestModel {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String localName;
}

в,@Table(name = "test")В аннотации указывается имя таблицы базы данных, соответствующее объекту.

конфигурационный файл

mybatis:
  configuration:
    map-underscore-to-camel-case: true

Чтобы лучше отображать объекты Java и поля базы данных, мы указываем конфигурацию отображения для подчеркивания верблюжьего регистра.

Написано TestDao

public interface TestDao extends BaseDao<TestModel> {


    @Insert("insert into test(id, local_name) values(#{id}, #{localName})")
    Integer insertTestModel(TestModel testModel);
}

TestDaoунаследовано отBaseDao, и укажите общий как соответствующийTestModel.TestDaoСодержит унаследованные методы, такие как:

    int deleteByPrimaryKey(Integer userId);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Integer userId);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);

Вы также можете настроить некоторые методы, мы настроили один из них выше.insertTestModelметод.

Сервисный уровень и уровень управления

В этой статье эти два уровня пропущены, что относительно просто Читатели могут обратиться к адресу исходного кода, соответствующему этой статье.

Проверка результата

После вставки части данных мы запрашиваем соответствующую сущность. Соответствующие результаты выполнения также успешны, и вы можете увидеть следующую информацию журнала на консоли:

c.b.mybatis.dao.TestDao.insertTestModel  : ==>  Preparing: insert into test(id, local_name) values(?, ?) 
c.b.mybatis.dao.TestDao.insertTestModel  : ==> Parameters: 5953(Integer), testName(String)
c.b.mybatis.dao.TestDao.insertTestModel  : <==    Updates: 1
c.b.m.dao.TestDao.selectByPrimaryKey     : ==>  Preparing: SELECT id,local_name FROM test WHERE id = ? 
c.b.m.dao.TestDao.selectByPrimaryKey     : ==> Parameters: 5953(Integer)
c.b.m.dao.TestDao.selectByPrimaryKey     : <==      Total: 1

Spring Boot интегрирует MyBatis для реализации универсального Mapper, и все готово.

резюме

MyBatis является очень распространенным компонентом уровня сохраняемости, Spring Boot выступает за соглашение, а не за конфигурацию, особенно для многих конфигураций xml. Конечно, многие студенты используют Spring Data. Для сравнения, я думаю, что SQL MyBatis более гибок, чем Spring Data, и конкретное сравнение здесь обсуждаться не будет.

Адрес исходного кода, соответствующий этой статье:
GitHub.com/Доступный ETS2012/S…

Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер

微信公众号

Ссылаться на

  1. abel533/Mapper
  2. Настройте Spring Boot для интеграции MyBatis, Universal Mapper, Quartz, PageHelper