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 namemybatis.mapperLocations = mappers file locationsmybatis.typeAliasesPackage = domain object's packagemybatis.typeHandlersPackage = handler's packagemybatis.check-config-location = check the mybatis configuration existsmybatis.executorType = mode of execution. Default is SIMPLE |
Сконфигурируйте typeAliasesPackage и mapperLocations в application.properties.
|
1
2
|
mybatis.typeAliasesPackage=com.sivalabs.demo.domainmybatis.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() { User user = new User(0, "Siva", "siva@gmail.com"); userMapper.insertUser(user); User newUser = userMapper.findUserById(user.getId()); assertEquals("Siva", newUser.getName()); assertEquals("siva@gmail.com", newUser.getEmail()); }} |
- Вы можете прочитать больше об интеграции MyBatis и Spring на http://blog.mybatis.org/p/products.html и
http://www.mybatis.org/spring/ .
| Ссылка: | SpringBoot: Работа с MyBatis от нашего партнера по JCG Сивы Редди в блоге « Мои эксперименты по технологии» . |