MyBatis — это платформа SQL Mapping с поддержкой пользовательских SQL, хранимых процедур и расширенных отображений.
SpringBoot не предоставляет официальной поддержки интеграции с MyBatis, но сообщество MyBatis создало стартовую версию SpringBoot для MyBatis.
Вы можете прочитать об объявлении о выпуске SpringBoot MyBatis Starter по адресу http://blog.mybatis.org/2015/11/mybatis-spring-boot-released.html, а также изучить исходный код на GitHub https://github.com. / mybatis / mybatis-spring-boot .
Создайте проект SpringBoot Maven и добавьте следующую зависимость MyBatis Starter.
1
2
3
4
5
|
< dependency > < groupId >org.mybatis.spring.boot</ groupId > < artifactId >mybatis-spring-boot-starter</ artifactId > < version >1.0.0</ version > </ dependency > |
Мы будем повторно использовать файлы User.java, schema.sql и data.sql, созданные в моей предыдущей статье SpringBoot: Работа с JdbcTemplate
Создайте MyBatis SQL Mapper интерфейс UserMapper.java с несколькими операциями с базой данных следующим образом:
1
2
3
4
5
6
7
8
|
package com.sivalabs.demo.domain; public interface UserMapper { void insertUser(User user); User findUserById(Integer id); List<User> findAllUsers(); } |
Нам необходимо создать XML-файлы Mapper, чтобы определить запросы для сопоставленных операторов SQL для соответствующих методов интерфейса Mapper.
Создайте файл UserMapper.xml в каталоге src / main / resources / com / sivalabs / demo / mappers / :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<! DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" < mapper namespace = "com.sivalabs.demo.mappers.UserMapper" > < resultMap id = "UserResultMap" type = "User" > < id column = "id" property = "id" /> < result column = "name" property = "name" /> < result column = "email" property = "email" /> </ resultMap > < select id = "findAllUsers" resultMap = "UserResultMap" > select id, name, email from users </ select > < select id = "findUserById" resultMap = "UserResultMap" > select id, name, email from users WHERE id=#{id} </ select > < insert id = "insertUser" parameterType = "User" useGeneratedKeys = "true" keyProperty = "id" > insert into users(name,email) values(#{name},#{email}) </ insert > </ mapper > |
Несколько вещей, чтобы наблюдать здесь:
- Пространство имен в Mapper XML должно совпадать с полным именем (FQN) для интерфейса Mapper
- Значения идентификатора оператора должны совпадать с именами методов интерфейса Mapper.
- Если имена столбцов результата запроса отличаются от имен свойств бина, мы можем использовать конфигурацию <resultMap> для обеспечения соответствия между именами столбцов и соответствующими им именами свойств бина.
MyBatis также предоставляет конфигурации запросов на основе аннотаций без необходимости использования Mapper XML.
Мы можем создать интерфейс UserMapper.java и настроить сопоставленные SQL с помощью аннотаций следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
public interface UserMapper { @Insert ( "insert into users(name,email) values(#{name},#{email})" ) @SelectKey (statement= "call identity()" , keyProperty= "id" , before= false , resultType=Integer. class ) void insertUser(User user); @Select ( "select id, name, email from users WHERE id=#{id}" ) User findUserById(Integer id); @Select ( "select id, name, email from users" ) List<User> findAllUsers(); } |
SpringBoot MyBatis Starter предоставляет следующие параметры конфигурации MyBatis, которые мы можем использовать для настройки параметров MyBatis.
1
2
3
4
5
6
|
mybatis.config = mybatis config file name mybatis.mapperLocations = mappers file locations mybatis.typeAliasesPackage = domain object's package mybatis.typeHandlersPackage = handler's package mybatis.check-config-location = check the mybatis configuration exists mybatis.executorType = mode of execution. Default is SIMPLE |
Сконфигурируйте typeAliasesPackage и mapperLocations в application.properties.
1
2
|
mybatis.typeAliasesPackage=com.sivalabs.demo.domain mybatis.mapperLocations=classpath*:**/mappers/*.xml |
Создайте класс точки входа SpringbootMyBatisDemoApplication.java.
1
2
3
4
5
6
7
8
9
|
@SpringBootApplication @MapperScan ( "com.sivalabs.demo.mappers" ) public class SpringbootMyBatisDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringbootMyBatisDemoApplication. class , args); } } |
Обратите внимание, что мы использовали аннотацию @MapperScan («com.sivalabs.demo.mappers»), чтобы указать, где искать интерфейсы Mapper.
Теперь создайте тестовый класс JUnit и протестируйте наши методы UserMapper.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
@RunWith (SpringJUnit4ClassRunner. class ) @SpringApplicationConfiguration (SpringbootMyBatisDemoApplication. class ) public class SpringbootMyBatisDemoApplicationTests { @Autowired private UserMapper userMapper; @Test public void findAllUsers() { List<User> users = userMapper.findAllUsers(); assertNotNull(users); assertTrue(!users.isEmpty()); } @Test public void findUserById() { User user = userMapper.findUserById( 1 ); assertNotNull(user); } @Test public void createUser() { userMapper.insertUser(user); User newUser = userMapper.findUserById(user.getId()); assertEquals( "Siva" , newUser.getName()); } } |
- Вы можете прочитать больше об интеграции MyBatis и Spring на http://blog.mybatis.org/p/products.html и
http://www.mybatis.org/spring/ .
Ссылка: | SpringBoot: Работа с MyBatis от нашего партнера по JCG Сивы Редди в блоге « Мои эксперименты по технологии» . |