项目结构
1.构建maven项目 pom.xml添加依赖
<
dependency
>
<
groupId
>org.mybatis.spring.boot</
groupId
>
<
artifactId
>mybatis-spring-boot-starter</
artifactId
>
<
version
>1.3.1</
version
>
</
dependency
>
<
dependency
>
<
groupId
>mysql</
groupId
>
<
artifactId
>mysql-connector-java</
artifactId
>
<
scope
>runtime</
scope
>
</
dependency
>
|
2.application.yml配置
mybatis:
type-aliases-package: com.example.mybatis_test.domain
mapper-locations: classpath:mapper/*.xml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: 123456
server:
port: 8088
|
- type-aliases-package :指定包名用来搜素类型别名
mapper-locations :指定mapper.xml所在的位置
3.mysql建表
CREATE
TABLE
`addresses` (
`addr_id`
INT
(11)
NOT
NULL
AUTO_INCREMENT,
`street`
VARCHAR
(50)
NOT
NULL
,
`city`
VARCHAR
(50)
NOT
NULL
,
`state`
VARCHAR
(50)
NOT
NULL
,
`zip`
VARCHAR
(10),
`country`
VARCHAR
(50),
PRIMARY
KEY
(`addr_id`)
);
|
4.创建实体类
@Data
@Alias(
"address"
)
public
class
Address implements Serializable{
private
static
final Long serialVersionUID=1L;
private
Integer addrId;
private
String street;
private
String city;
private
String state;
private
String zip;
private
String country;
}
|
5.编写mapper接口
在mapper接口上标注@Mapper注解
或者通过使用@MapperScan指定要扫描的Mapper类的包的路径
注入mapper接口时会报找不到bean的警告 但是不影响使用 可以在mapper接口上加@Component消除警告
@Insert注解来定义一个INSERT映射语句
@Options(useGeneratedKeys = true,keyColumn = "addr_id",keyProperty = "addrId")
表明addr_id列值将会通过MySQL数据库自动生成。并且生成的值将会被设置到address对象的addrId属性中。
@Insert(
"insert into addresses(street,city,state,country,zip)"
+
" values(#{street},#{city},#{state},#{country},#{zip})"
)
@Options(useGeneratedKeys =
true
,keyColumn =
"addr_id"
,keyProperty =
"addrId"
)
int
addAddress(Address address);
|
@Select注解来定义一个SELECT映射语句。
我们可以将查询结果通过别名或者是 @Results注解与Java Bean属性映射起来。 @Results注解和映射器XML配置文件元素<resultMap> 对应。 然而,My Batis3.2.2不能为 @Results注解赋予一个ID。所以,不像<resultMap>元素,我们不应在不同的映射语句中重用 @Results声明。这意味着即使 @Results注解完全相同,我们也需要(在不同的映射接口中)重复 @Results声明。
@Select
(
"select * from addresses where city=#{city}"
)
@Results
(id =
"addressMap"
, value = {
@Result
(id =
true
, column =
"addr_id"
, property =
"addrId"
),
@Result
(column =
"street"
, property =
"street"
),
@Result
(column =
"city"
, property =
"city"
),
@Result
(column =
"zip"
, property =
"zip"
),
@Result
(column =
"state"
, property =
"state"
)
})
List<Address> findByCity(
@Param
(
"city"
) String city);
|
当两个语句的@Results配置完全相同时,我们可以创建一个映射器Mapper配置文件,然后配置<resultMap>元素,然后使用 @ResultMap注解引用此<resultMap>。在AddressMapper.xml中定义一个ID为AddressMap的<resultMap>。这样就可以实现复用了。
mapper.xml
namespace: 对应映射接口
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"<a href="http://mybatis.org/dtd/mybatis-3-mapper.dtd" "="" style="color: rgb(50, 108, 166); border-radius: 0px !important; background: none !important; border: 0px !important; bottom: auto !important; float: none !important; height: auto !important; left: auto !important; line-height: 20px !important; margin: 0px !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; right: auto !important; top: auto !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;">http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<
mapper
namespace
=
"com.example.mybatis_test.mapper.AddressMapper"
>
<
resultMap
id
=
"AddressMap"
type
=
"address"
>
<
id
column
=
"addr_id"
property
=
"addrId"
/>
<
result
column
=
"city"
property
=
"city"
/>
<
result
column
=
"state"
property
=
"state"
/>
<
result
column
=
"street"
property
=
"street"
/>
<
result
column
=
"zip"
property
=
"zip"
/>
<
result
column
=
"country"
property
=
"country"
/>
</
resultMap
>
</
mapper
>
|
@Select(
"select * from addresses where city=#{city}"
)
/* @Results(id = "addressMap", value = {
@Result(id = true, column = "addr_id", property = "addrId"),
@Result(column = "street", property = "street"),
@Result(column = "city", property = "city"),
@Result(column = "zip", property = "zip"),
@Result(column = "state", property = "state")
})*/
@ResultMap(
"AddressMap"
)
List<Address> findByCity(@Param(
"city"
) String city);
@Select(
"select * from addresses where addr_id=#{id }"
)
@ResultMap(
"AddressMap"
)
Address findAddressById(@Param(
"id"
) Integer id);
|
@Update注解来定义一个UPDATE映射语句
@Update(
"update addresses set street=#{A.street},city=#{A.city},state=#{A.state},country=#{A.country},zip=#{A.zip} where addr_id=#{addrId}"
)
int
updateAddress(@Param(
"addrId"
) Integer id,@Param(
"A"
) Address address);
|
@Delete注解来定义一个DELETE映射语句
@Delete(
"delete from addresses where addr_id=#{id}"
)
int
removeAddress(@Param(
"id"
) Integer id);
|
6.测试