Springboot简单整合---mybatis

SpringBoot整合mybatis


前言

简单介绍mybatis 1对1 1对多 多对多 的xml与注解实现


一、前期环境搭建

一个teacher表
student表中含有teacher的id
两张很简单表,student表有teacher的id


然后分别创建对应的PO(数据库对象)和DTO(业务对象)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TeacherDTO {
    private String id;
    private String name;
    private List<StudentPO> studentPO;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {
    private String id;
    private String name;
}

//一个是数据库对象,一个是业务对象,放在一起好看清楚
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private String id;
    private String name;
    private Teacher teacher;
)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentPO {
    private String id;
    private String name;
}

接下来一些mybatis与springboot的搭建

mybatis:
  mapper-locations: classpath:mybatis/mapper/*.xml
  type-aliases-package: pojo包位置 #mapper缩写
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/school?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.jdbc.Driver
    username: 本地mysql账号
    password: 本地mysql密码

其他细节:略,请去百度自行搜索学习

二、1对1 1对多简单配置

1.mapper.xml配置

代码如下(示例):

@Repository
@Mapper
public interface TeacherMapper {
    List<TeacherDTO> findAllTeacher();
}

//都是全部查询
@Repository
@Mapper
public interface StudentMapper {
    List<Student> findAllStudent();
}

接下配置StudentMapper.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.heng.dao.StudentMapper">

    <resultMap id="student_teacher" type="student">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <!--将查询出来的新表属性,拼入Teacher属性中-->
        <association property="teacher" column="teacher_id" javaType="com.heng.pojo.Teacher">
            <id property="id" column="tea_id"/>
            <result property="name" column="tea_name"/>
        </association>
    </resultMap>
    
    <select id="findAllStudent" resultMap="student_teacher">
        select
        stu.id as id,
        stu.name as name,
        tea.id as tea_id,
        tea.name as tea_name
        from student stu
        inner join teacher tea
        on stu.teacher_id = tea.id
    </select>
</mapper>

TeacherMapper.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.heng.dao.TeacherMapper">

    <resultMap id="TeacherToStudent" type="teacherDTO">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <!-- 查询出的新表属性进行拼接, ofType泛型类型 -->
        <collection property="studentPO" ofType="StudentPO" javaType="ArrayList" column="stu_id">
            <result property="id" column="stu_id"/>
            <result property="name" column="stu_name"/>
        </collection>
    </resultMap>

    <select id="findAllTeacher" resultMap="TeacherToStudent">
        select
        tea.id as id,
        tea.name as name,
        stu.name as stu_name,
        stu.id as stu_id
        from teacher tea,student stu
        where tea.id = stu.teacher_id
    </select>
</mapper>

使用MVC测试

 @RequestMapping("/studentlist")
    public List findAllStudent(){
        List<Student> list = studentMapper.findAllStudent();
        return list;
    }
    
@RequestMapping("/teacherlist")
    public List findAllTeacherDTO(){
        List<TeacherDTO> list = teacherMapper.findAllTeacher();
        return list;
    }

结果如下
在这里插入图片描述
在这里插入图片描述

2.使用mybatis注解

mybatis注解实现其实本质就是二次查询

Student对象查询

//Studnet中需要Teacher类,所以就去TeacherMapper接口中,二次查询放入
//如果对应属性名与字段名不同,用@Result手动对应装配
@Select("select * from `student`")
@Results(
        @Result(property = "teacher",column = "teacher_id",//column:查询出来的teacher_id当作条件二次查询
        one = @One(
            select = "自己的包.TeacherMapper.findTeacherById"
        ))
)
List<Student> findStuentWithTeacher();



// 通过id查询Teacher,而查询出来的对象,就是Student中的属性
@Select("select * from `teacher` where id = #{id}")
Teacher findTeacherById(int id);

Teacher对象查询


//Teacher中需要List<StudentPO>属性,所以就去StudentMapper接口中二次查询装配
@Select("select * from `teacher`")
    @Results({
            @Result(property = "id",column = "id"), //装配查询出的id到属性中
            @Result(property = "studentPO",column = "id", //column:查询出来的id当作条件二次查询
               many = @Many(
                       select = "com.heng.dao.StudentMapper.findStudentPOByTeacherid",
                       fetchType = FetchType.EAGER
                )
            )
    })
List<TeacherDTO> findTeacherWithStudent();
//

@Select("select * from `student` where teacher_id = #{teacher_id}")
List<StudentPO> findStudentPOByTeacherid(int teacher_id);

一样使用MVC测试

@RequestMapping("/studentwith")
public List findAllStudentByWith(){
    List<Student> list = studentMapper.findStuentWithTeacher();
    return list;
}


@RequestMapping("/teacherwith")
public List findAllTeacherDTOByWith(){
   List<TeacherDTO> list = teacherMapper.findTeacherWithStudent();
   return list;
}

结果成功
在这里插入图片描述
在这里插入图片描述


总结

以上就是springboot简单整合使用mybatis两种方式,其中XML的ResultMap映射associationcollection也可以使用二次查询装配,就是属性select配置,但是在这里就不介绍了,因为本来就是简单学习,读者需要自行搜索学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值