一、数据库准备

数据库语句

  1. CREATE DATABASE springboot_demo_db;
  2. CREATE TABLE `user` (
  3. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  4. `name` varchar(20) NOT NULL COMMENT '用户名',
  5. `age` int(4) NOT NULL DEFAULT '0' COMMENT '年龄',
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户基础信息表';

二、项目结构介绍

image.png
说明:

com.wells.demo.mybatis.annotations.controller - Controller 层
com.wells.demo.mybatis.annotations.mapper - 数据操作层
com.wells.demo.mybatis.annotations.entity - 实体类
com.wells.demo.mybatis.annotations.service - 业务逻辑层
MyBatisAnnotationsApplication - 应用启动类
application.properties - 应用配置文件,应用启动会自动读取配置,在resources目录下

三、工程配置详解

3.1、pom文件如下

<?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">
    <parent>
        <artifactId>spring-boot</artifactId>
        <groupId>com.wells.demo</groupId>
        <version>1.0.1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mybatis-annotations</artifactId>

    <dependencies>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <!-- Spring Boot Mybatis 依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!-- MySQL 连接驱动依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
    </dependencies>
</project>

3.2、application.properties文件如下

server.port=8081

# datasource config
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_demo_db?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root1234!
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

四、关键代码

4.1、Mapper

  • @Mapper 声明Mapper文件
  • @Select、@Insert、@Update、@Delete 声明操作 ```java package com.wells.demo.mybatis.annotations.mapper;

import com.wells.demo.mybatis.annotations.entity.User; import org.apache.ibatis.annotations.*;

import java.util.List; import java.util.Map;

/**

  • Created by Wells on 2019年02月18日 */

@Mapper public interface UserMapper { /**

 * 使用Param 注入参数
 */
@Select(value = "SELECT * FROM user WHERE id = ${id}")
User getUserById(@Param("id") Long id);

@Insert(value = "INSERT INTO user(name, age) VALUES('${name}', ${age})")
int insertUserByParam(@Param("name")String name, @Param("age")int age);

/**
 * 使用Map 注入参数
 */
@Insert(value = "INSERT INTO user(name, age) VALUES(#{name, jdbcType=VARCHAR}, #{age, jdbcType=INTEGER})")
int insertUserByMap(Map<String, Object> map);

/**
 * 使用对象 注入参数
 */
@Insert(value = "INSERT INTO user(name, age) VALUES('${name}', ${age})")
int insertUserByObj(User user);

/**
 * 使用Result封装结果
 */
@Results({
        @Result(property = "name", column = "name"),
        @Result(property = "age", column = "age")
})
@Select(value = "SELECT * FROM user")
List<User> findUserAll();

}


<a name="GIBEa"></a>
# 五、传参方式
<a name="VCJT8"></a>
## 5.1、使用@Param
```java
/**
 * 使用Param 注入参数
 */
@Select(value = "SELECT * FROM user WHERE id = ${id}")
User getUserById(@Param("id") Long id);

5.2、使用Map

// Mapper
/**
 * 使用Map 注入参数
 */
@Insert(value = "INSERT INTO user(name, age) VALUES(#{name, jdbcType=VARCHAR}, #{age, jdbcType=INTEGER})")
int insertUserByMap(Map<String, Object> map);


// Service
Map<String, Object> map = new HashMap<>();
map.put("name", user.getName());
map.put("age", user.getAge());
userMapper.insertUserByMap(map);

5.3、使用对象

// Mapper
/**
 * 使用对象 注入参数
 */
@Insert(value = "INSERT INTO user(name, age) VALUES('${name}', ${age})")
int insertUserByObj(User user);

// Service
User user = JSON.parseObject(userInfo, User.class);
userMapper.insertUserByObj(user);

六、返回结果

对于增、删、改操作相对变化较小。而对于“查”操作,我们往往需要进行多表关联,汇总计算等操作,那么对于查询的结果往往就不再是简单的实体对象了,往往需要返回一个与数据库实体不同的包装类,那么对于这类情况,就可以通过 @Results 和 @Result 注解来进行绑定,具体如下:

@Results({
    @Result(property = "name", column = "name"),
    @Result(property = "age", column = "age")
})
@Select(value = "SELECT * FROM user")
List<User> findUserAll();

在上面代码中,@Result中的property属性对应User对象中的成员名,column对应SELECT出的字段名。在该配置中故意没有查出id属性,只对User对应中的name和age对象做了映射配置。

更多的参考:https://mybatis.org/mybatis-3/zh/java-api.html