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…