Mybatis持久层框架 | Lombok搭建

简介: Mybatis持久层框架 | Lombok搭建


Lombok

Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量……

使用步骤:

  • IDEA中安装Lombok插件
  • 项目中导入Lombok的jar包
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
    </dependency>
</dependencies>
  • 实体类中添加注解
import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String password;
}
  • @Data:无参构造、get/set方法、toString、hashCode、equals
  • @AllArgsConstructor:带参构造方法
  • @NoArgsConstructor:无参构造方法
  • @ToString:toString方法
  • @EqualsAndHashCode:equals和hashCode方法
  • @Getter:get方法
  • @Setter:set方法

复杂查询环境搭建

  • 导入lombok
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
    </dependency>
</dependencies>
  • 新建实体类Teacher、Student

Teacher类

package com.wei.pojo;
import lombok.Data;
@Data
public class Teacher {
    private int id;
    private String name;
    //学生关联一个老师
    private Teacher teacher;
}

Student类

package com.wei.pojo;
import lombok.Data;
//多对一
@Data
public class Student {
    private int id;
    private String name;
    //学生需要关联一个老师
    private Teacher teacher;
}
  • 建立Mapper接口

TeacherMapper接口

package com.wei.dao;
import com.wei.pojo.Teacher;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface TeacherMapper {
    @Select("select * from mybatis_03.teacher where id = #{tid}")
    Teacher getTeacher(@Param("tid") int id);
}

StudentMapper接口

package com.wei.dao;
public interface StudentMapper {
}
  • 建立Mapper.xml文件

TeacherMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.wei.dao.TeacherMapper">
</mapper>

StudentMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.wei.dao.StudentMapper">
</mapper>
  • 核心配置文件mybatis-config.xml绑定注册接口
<!--绑定接口-->
<mappers>
    <mapper resource="com/wei/dao/StudentMapper.xml"/>
    <mapper resource="com/wei/dao/TeacherMapper.xml"/>
</mappers>
  • 测试
public class MyTest {
    @Test
    public void test(){
        //取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //获得TeacherMapper接口类
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.getTeacher(1);
        System.out.println(teacher);
        //关闭SqlSession,避免造成内存出现问题
        sqlSession.close();
    }
}

多对一处理

环境搭建

  • Student实体类
package com.wei.pojo;
import lombok.Data;
//多对一
@Data
public class Student {
    private int id;
    private String name;
    //学生需要关联一个老师
    private Teacher teacher;
}
  • Teacher实体类
package com.wei.pojo;
import lombok.Data;
@Data
public class Teacher {
    private int id;
    private String name;
    //学生关联一个老师
    private Teacher teacher;
}
查询嵌套处理
  • Mapper.xml映射文件
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.wei.dao.StudentMapper">
<!--    - resultType:Sql语句执行的返回值-->
<!--    - parameterMap:参数类型-->
    <!--
    子查询思路:
    1.查询所有的学生信息
    2.根据查询出来的学生的tid,寻找对应的老师
    -->
    <select id="getStudent" resultMap="StudentTeacher">
        select * from mybatis_03.student;
    </select>
    <resultMap id="StudentTeacher" type="Student">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <!--
        复杂的属性,我们需要单独处理
        对象:association
        集合:collection
        column:数据库中的字段
        property:实体类中的属性
        javaType:设置对象类型
        -->
        <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
    </resultMap>
    <select id="getTeacher" resultType="Teacher">
        select * from mybatis_03.teacher where id=#{tid};
    </select>
</mapper>
  • Test测试类
@Test
    public void testStudent() {
        //取SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //获得StudentMapper接口类
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        //获取getStudent学生信息
        List<Student> studentList = mapper.getStudent();
        for (Student student : studentList) {
            System.out.println(student);
        }
        //关闭SqlSession,避免造成内存出现问题
        sqlSession.close();
    }
}
结果嵌套查询
  • Mapper.xml映射文件
<!--按照结果嵌套处理-->
<select id="getStudent2" resultMap="StudentTeacher2">
    select s.id sid, s.name sname,t.name tname from mybatis_03.student s , mybatis_03.teacher t where t.id=s.tid;
</select>
<resultMap id="StudentTeacher2" type="Student">
    <result property="id" column="sid"/>
    <result property="name" column="sname"/>
    <association property="teacher" javaType="Teacher">
        <result property="name" column="tname"/>
    </association>
</resultMap>
  • Test测试类
@Test
public void testStudent2() {
    //取SqlSession对象
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    //获得StudentMapper接口类
    StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    //获取getStudent学生信息
    List<Student> studentList = mapper.getStudent2();
    for (Student student : studentList) {
        System.out.println(student);
    }
    //关闭SqlSession,避免造成内存出现问题
    sqlSession.close();
}

一对多处理

环境搭建

  • Student实体类
package com.wei.pojo;
import lombok.Data;
//多对一
@Data
public class Student {
    private int id;
    private String name;
    private int tid;
}
  • Teacher实体类
package com.wei.pojo;
import lombok.Data;
import java.util.List;
@Data
public class Teacher {
    private int id;
    private String name;
    //一个老师拥有多个学生
    private List<Student> students;
}
查询嵌套处理
  • StudentMapper类
package com.wei.dao;
import com.wei.pojo.Student;
import java.util.List;
public interface StudentMapper {
    //查询所有的学生信息,以及对应的老师的信息
    public List<Student> getStudent2();
}
  • TeacherMapper.xml映射文件
<select id="getTeacher2" resultMap="TeacherStudent2">
    select * from mybatis_03.teacher where id=#{tid};
</select>
<!--resultMap结果映射-->
<resultMap id="TeacherStudent2" type="Teacher">
    <result property="id" column="tid"/>
    <result property="name" column="tname"/>
    <!--
    复杂的属性,我们需要单独处理
    对象:association
    集合:collection
    javaType:指定的属性类型
    集合中的泛型信息,使用ofType获取
   -->
    <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/>
</resultMap>
<select id="getStudentByTeacherId" resultType="Student">
    select * from mybatis_03.student where tid=#{tid};
</select>
  • 测试
@Test
public void test2() {
    //获取sqlSession对象
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    //获取TeacherMapper接口类
    TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
    Teacher teacher = mapper.getTeacher2(1);
    System.out.println(teacher);
    //关闭SqlSession,避免造成内存出现问题
    sqlSession.close();
}
结果嵌套查询
  • StudentMapper类
package com.wei.dao;
import com.wei.pojo.Student;
import java.util.List;
public interface StudentMapper {
    //查询所有的学生信息,以及对应的老师的信息
    public List<Student> getStudent();
}
  • TeacherMapper.xml映射文件
<!--按照结果嵌套查询-->
<select id="getTeacher" resultMap="TeacherStudent">
    select s.id sid, s.name sname, t.name tname, t.id tid from mybatis_03.student s,mybatis_03.teacher t where t.id = s.tid and t.id=#{tid};
</select>
<!--resultMap结果映射-->
<!--
column:数据库中的字段
property:实体类中的属性
-->
<resultMap id="TeacherStudent" type="Teacher">
    <result property="id" column="tid"/>
    <result property="name" column="tname"/>
    <!--
    复杂的属性,我们需要单独处理
    对象:association
    集合:collection
    javaType:指定的属性类型
    集合中的泛型信息,使用ofType获取
    -->
    <collection property="students" ofType="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <result property="tid" column="tid"/>
    </collection>
</resultMap>
  • 测试
public class MyTest {
    @Test
    public void test() {
        //获取sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //获取TeacherMapper接口类
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.getTeacher(1);
        System.out.println(teacher);
        //关闭SqlSession,避免造成内存出现问题
        sqlSession.close();
    }

总结:

collection & association区别:

  • 关联 - association [多对一]
  • 集合 - collection [一对多]

javatype & oftype区别:

  • javatype:指定实体类中属性的类型
  • oftype:指定映射到List或者集合的pojo类型,泛型中的约束类型

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝冲冲冲🤞


目录
相关文章
|
4月前
|
Java 数据库连接 Maven
后端框架学习-----mybatis(使用mybatis框架遇到的问题)
这篇文章总结了在使用MyBatis框架时可能遇到的几个常见问题及其解决方法,包括配置文件注册、接口绑定、方法名匹配、返回类型匹配、Maven资源导出、时区设置和字符编码问题。
|
1月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
48 1
持久层框架MyBatisPlus
|
2月前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
59 0
|
4月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
4月前
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
4月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
4月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
4月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
4月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
5月前
|
Java 数据库连接 Spring
搭建 spring boot + mybatis plus 项目框架并进行调试
搭建 spring boot + mybatis plus 项目框架并进行调试
104 4