|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- # spring-boot-demo-orm-mybatis
-
- > 此 demo 演示了 Spring Boot 如何与原生的 mybatis 整合,使用了 mybatis 官方提供的脚手架 `mybatis-spring-boot-starter `可以很容易的和 Spring Boot 整合。
-
- ## pom.xml
-
- ```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/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>spring-boot-demo-orm-mybatis</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <packaging>jar</packaging>
-
- <name>spring-boot-demo-orm-mybatis</name>
- <description>Demo project for Spring Boot</description>
-
- <parent>
- <groupId>com.xkcoding</groupId>
- <artifactId>spring-boot-demo</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </parent>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- <mybatis.version>1.3.2</mybatis.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>${mybatis.version}</version>
- </dependency>
-
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
-
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- </dependency>
-
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <build>
- <finalName>spring-boot-demo-orm-mybatis</finalName>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>
- ```
-
- ## SpringBootDemoOrmMybatisApplication.java
-
- ```java
- /**
- * <p>
- * 启动类
- * </p>
- *
- * @author yangkai.shen
- * @date Created in 2018-11-08 10:52
- */
- @MapperScan(basePackages = {"com.xkcoding.orm.mybatis.mapper"})
- @SpringBootApplication
- public class SpringBootDemoOrmMybatisApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(SpringBootDemoOrmMybatisApplication.class, args);
- }
- }
- ```
-
- ## application.yml
-
- ```yaml
- spring:
- datasource:
- url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
- username: root
- password: root
- driver-class-name: com.mysql.cj.jdbc.Driver
- type: com.zaxxer.hikari.HikariDataSource
- initialization-mode: always
- continue-on-error: true
- schema:
- - "classpath:db/schema.sql"
- data:
- - "classpath:db/data.sql"
- hikari:
- minimum-idle: 5
- connection-test-query: SELECT 1 FROM DUAL
- maximum-pool-size: 20
- auto-commit: true
- idle-timeout: 30000
- pool-name: SpringBootDemoHikariCP
- max-lifetime: 60000
- connection-timeout: 30000
- logging:
- level:
- com.xkcoding: debug
- com.xkcoding.orm.mybatis.mapper: trace
- mybatis:
- configuration:
- # 下划线转驼峰
- map-underscore-to-camel-case: true
- mapper-locations: classpath:mappers/*.xml
- type-aliases-package: com.xkcoding.orm.mybatis.entity
- ```
-
- ## UserMapper.java
-
- ```java
- /**
- * <p>
- * User Mapper
- * </p>
- *
- * @author yangkai.shen
- * @date Created in 2018-11-08 10:54
- */
- @Mapper
- @Component
- public interface UserMapper {
-
- /**
- * 查询所有用户
- *
- * @return 用户列表
- */
- @Select("SELECT * FROM orm_user")
- List<User> selectAllUser();
-
- /**
- * 根据id查询用户
- *
- * @param id 主键id
- * @return 当前id的用户,不存在则是 {@code null}
- */
- @Select("SELECT * FROM orm_user WHERE id = #{id}")
- User selectUserById(@Param("id") Long id);
-
- /**
- * 保存用户
- *
- * @param user 用户
- * @return 成功 - {@code 1} 失败 - {@code 0}
- */
- int saveUser(@Param("user") User user);
-
- /**
- * 删除用户
- *
- * @param id 主键id
- * @return 成功 - {@code 1} 失败 - {@code 0}
- */
- int deleteById(@Param("id") Long id);
-
- }
- ```
-
- ## UserMapper.xml
-
- ```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 namespace="com.xkcoding.orm.mybatis.mapper.UserMapper">
-
- <insert id="saveUser">
- INSERT INTO `orm_user` (`name`,
- `password`,
- `salt`,
- `email`,
- `phone_number`,
- `status`,
- `create_time`,
- `last_login_time`,
- `last_update_time`)
- VALUES (#{user.name},
- #{user.password},
- #{user.salt},
- #{user.email},
- #{user.phoneNumber},
- #{user.status},
- #{user.createTime},
- #{user.lastLoginTime},
- #{user.lastUpdateTime})
- </insert>
-
- <delete id="deleteById">
- DELETE
- FROM `orm_user`
- WHERE `id` = #{id}
- </delete>
- </mapper>
- ```
-
- ## UserMapperTest.java
-
- ```java
- /**
- * <p>
- * UserMapper 测试类
- * </p>
- *
- * @author yangkai.shen
- * @date Created in 2018-11-08 11:25
- */
- @Slf4j
- public class UserMapperTest extends SpringBootDemoOrmMybatisApplicationTests {
- @Autowired
- private UserMapper userMapper;
-
- @Test
- public void selectAllUser() {
- List<User> userList = userMapper.selectAllUser();
- Assert.assertTrue(CollUtil.isNotEmpty(userList));
- log.debug("【userList】= {}", userList);
- }
-
- @Test
- public void selectUserById() {
- User user = userMapper.selectUserById(1L);
- Assert.assertNotNull(user);
- log.debug("【user】= {}", user);
- }
-
- @Test
- public void saveUser() {
- String salt = IdUtil.fastSimpleUUID();
- User user = User.builder().name("testSave3").password(SecureUtil.md5("123456" + salt)).salt(salt).email("testSave3@xkcoding.com").phoneNumber("17300000003").status(1).lastLoginTime(new DateTime()).createTime(new DateTime()).lastUpdateTime(new DateTime()).build();
- int i = userMapper.saveUser(user);
- Assert.assertEquals(1, i);
- }
-
- @Test
- public void deleteById() {
- int i = userMapper.deleteById(1L);
- Assert.assertEquals(1, i);
- }
- }
- ```
-
- ## 参考
-
- - Mybatis官方文档:http://www.mybatis.org/mybatis-3/zh/index.html
-
- - Mybatis官方脚手架文档:http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
-
- - Mybatis整合Spring Boot官方demo:https://github.com/mybatis/spring-boot-starter/tree/master/mybatis-spring-boot-samples
|