简介

在 Spring+SpringMVC 中整合 MyBatis 步骤需要在配置文件里配置多个 Bean,比如MapperScannerConfigurer,SqlSessionFactoryBean 等,步骤还是比较复杂的,Spring Boot 中对此做了进一步的简化,使 MyBatis 基本上可以做到开箱即用,也就是搭建SSM环境 。
Spring Boot中整合mybatis,主要有两种方式:①xml文件;②注解方式

SpringBoot整合Mybatis方式2:使用注解方式整合Mybatis

方式2和方式1相比,主要是mapper文件的区别,所以除了第4和第7步有点不一样以外,其它步骤相同。

1.先用idea创建一个添加mybatis需要的相关依赖的工程。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建出来的项目结构如下:
在这里插入图片描述

2.准备数据库和表

在这里插入图片描述

3.创建表映射类

之前创建表映射类时,我们是手动添加set,get,toString方法和构造方法等,比如像这样
在这里插入图片描述
现在,我们可以添加一个Lombok 依赖来简化这些代码
在这里插入图片描述
添加需要的注解,通过注解来实现自动帮我们加入get,set,构造方法等。

4.创建mapper代理接口

注意:不需要创建UsersMapper.xml文件,只需要创建UsersMapper接口就可以,将之前xml文件中的sql语句通过注解的方式写到接口中。
在这里插入图片描述

5.创建Service层和Service的实现层

在这里插入图片描述
在这里插入图片描述

6.创建控制层(也就是web层)

在这里插入图片描述

7.添加配置信息

7.1添加数据库链接信息和设置mybatis中的别名信息

数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.datasource.username=root 
spring.datasource.password=root 
spring.datasource.url=jdbc:mysql://localhost:3306/boot?characterEncoding=utf8&serverTimezone=GMT%2B8

mybatis配置
mybatis.type-aliases-package=com.test.ssm.pojo ```

7.2在应用程序入口类上配置@MapperScan扫描mapper接口文件所在包!

在这里插入图片描述

8.运行

在这里插入图片描述
在这里插入图片描述

扩展1(增删改查)

(可以删去UserMapper.xml)
在这里插入图片描述
在这里插入图片描述

扩展2(注解方式一对一 @One)

一个人拥有一张金卡或银卡
表一:id uname pwd card_id
表二:id category(1 金卡、2 银卡)
表一的card_id与表二的id对应,card定义为对象 (private Card card)

当我们创建的表映射类中的映射字段与数据库中的字段不一致时(如映射字段为uname,数据库字段为u_name),需要我们自己组装。(xml方式中通过resultMap,注解方式中通过@Result)
如果不进行组装,那么进行反射的时候,无法通过u_name找到对应的名字。

@Result({
        @Result(property = "id",column = "id " , id = true),
        @Result(property = "uname",column = "u_name " ),   // 可以使用javaType=""后可以转换一下数据类型
        @Result(property = "pwd",column = "pwd " )
        @Result(property = "card",column = "card_id " ,one=@one(select=com.tst.ssm.mapper.CardMapper.selectCardById))
})

UserMapper.java
在这里插入图片描述
在这里插入图片描述
CardMapper.java
在这里插入图片描述
视图层(user.card.category )
在这里插入图片描述

补充1:xml的方式组装映射字段与数据库字段

// association表示单个对象(一对一、多对一)
// association中属性一定要设置javaType,用来指定对象类型
<resultMap type="Userinfo" id="userinfoMap">
    <id property="uid" column="uid">
    <result property="uname" column="u_name">
    <result property="pwd" column="pwd">
    // 代表一个学生有一个班级
    <association property="Grade" javaType="Grade">
        <id property="cid" column="cid" />
        <result property="cname" column="cname" />
    </association>
</resultMap>

// collection表示集合(一对多)
<resultMap type="Grade" id="gradeMap">
    <id property="uid" column="uid">
    <result property="uname" column="u_name">
    <result property="pwd" column="pwd">
    <collection property="userlist" ofType="Userinfo">
        <id property="cid" column="cid" />
        <result property="cname" column="cname" />
        <result property="cage" column="cage" />
    </collection>
</resultMap>

补充2:javaType与ofType的区别

共同点:JavaType和ofType都是用来指定对象类型的。
不同点:JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型。
javaType是< association >(一对一/多对一)中的属性,用于指定从表方的引用实体类。
ofType 是< collection > (用于建立一对多中集合属性的对应关系)的属性,用于指定集合元素的数据类型。

扩展3(注解方式一对多查询 @Many)

一个用户对应多个地址
表一:id uname pwd card_id addressList
表二:id detail(1 肥东、2 肥西、3 长丰、4 瑶海) userid(1 1 1 2)
表一的id与表二的userid对应,addressList定义为集合 (private List

addressList;)

User.class(地址不止一个,使用集合)
在这里插入图片描述
AddressMap.java
在这里插入图片描述
UsersMapper.java
在这里插入图片描述
在这里插入图片描述
视图层
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐