一、数据库准备
数据库语句
CREATE DATABASE springboot_demo_db;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL COMMENT '用户名',
`age` int(4) NOT NULL DEFAULT '0' COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户基础信息表';
二、项目结构介绍
说明:
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对象做了映射配置。