Mybatis持久层框架 | Lombok搭建

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


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类型,泛型中的约束类型

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


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/5340.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自然语言大模型介绍

1 简介 最近一直被大语言模型刷屏。本文是周末技术分享会的提纲&#xff0c;总结了一些自然语言模型相关的重要技术&#xff0c;以及各个主流公司的研究方向和进展&#xff0c;和大家共同学习。 2 Transformer 目前的大模型基本都是Transformer及其变种。本部分将介绍Transf…

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(上)

前言 HTML 是一切Web开发的基础&#xff0c;本文专门为小白整理&#xff0c;针对前端零基础的朋友们&#xff0c;手把手教你学习HTML&#xff0c;让你轻松迈入WEB开发的行列。 首先&#xff0c;感谢 橙子_ 在HTML学习以及本文编写过程中对我的帮助。 文章目录前言一.HTML简介1.…

【NLP经典论文阅读】Efficient Estimation of Word Representations in Vector Space(附代码)

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

二值mask转polygon/RLE (coco segment格式)

coco数据集annotation的segmentation并不是二值mask&#xff0c;而是polygon格式&#xff0c; 看一个annotation. {"segmentation": [[510.66,423.01,511.72,420.03,510.45......]], #两两组成(x,y)坐标&#xff0c;polygon格式"area": 702.1057499999998…

腾讯自研万亿级NLP大模型,自动生成和衍生广告文案

编者按&#xff1a;随着大数据与AI技术的不断发展&#xff0c;人们越来越看见AI大模型在数据理解、运算以及诸多泛化能力上的潜力&#xff0c;时下&#xff0c;大模型已然成为学术界与工业界探索的重点方向。然而&#xff0c;随着模型规模与容量的不断扩大&#xff0c;其所需训…

mac 把word公式默认字体Cambria Math换成LaTex字体以及带章节自动编号

word默认是Cambria Math&#xff0c;想用latex那种公式的字体&#xff0c;这里使用的是XITS Math字体 搜了很多地方&#xff0c;都是用ab Text这个方法先转成文本&#xff0c;再换字体&#xff0c;然后设置斜体 可是公式多起来的话这种办法很麻烦&#xff0c;而且一个公式里常…

PyTorch深度学习实战 | 典型卷积神经网络

在深度学习的发展过程中&#xff0c;出现了很多经典的卷积神经网络&#xff0c;它们对深度学习的学术研究和工业生产都起到了巨大的促进作用&#xff0c;如VGG、ResNet、Inception和DenseNet等&#xff0c;很多投入实用的卷积神经都是在它们的基础上进行改进的。初学者应从试验…

C语言实现堆

注&#xff1a;这里我们所实现的是大根堆&#xff08;即父节点不小于子节点的堆&#xff09; 目录 一&#xff0c;堆的介绍 二&#xff0c;堆结构的创建 三&#xff0c;接口实现 1&#xff0c;初始化与销毁 2&#xff0c;数据的插入与删除 3&#xff0c;其他接口 一&…

力扣:最后一个单词的长度(详解)

前言&#xff1a;内容包括&#xff1a;题目&#xff0c;代码实现&#xff0c;大致思路&#xff0c;代码解读 题目&#xff1a; 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组…

基于springboot实现留守儿童爱心网站平台【源码+论文】

基于springboot实现留守儿童爱心网站演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&…

qt 关于QtXlsx的编译 使用

版本&#xff1a;qt 5.14.0 qt creator4.11.0 平时用mingw编译器 QtXlsx源码下载地址&#xff1a;QtXlsxWriter&#xff1a;https://github.com/dbzhang800/QtXlsxWriter 在Qt的XLSX模块提供了一组类来读写Excel文件。它不需要 Microsoft Excel&#xff0c;可以…

EM7电磁铁的技术参数

电磁铁可以通过更换电磁铁极头在一定范围内改善磁场的大小和磁场的均匀度 &#xff0c;并且可以通过调整极头间距改变磁场的大小。主要用于磁滞现象研究、磁化系数测量、霍尔效应研究、磁光实验、磁场退火、核磁共振、电子顺磁共振、生物学研究、磁性测量、磁性材料取向、磁性产…

期货黄金交易平台重要吗?有哪些显著的期货黄金交易平台优势?

黄金交易平台就是可以在其上面做黄金买卖交易的系统&#xff0c;是一种依靠行业应用软件而搭建的平台&#xff0c;里面会包含一些交易指标、趋势图表、K线。市场上的黄金交易平台很多&#xff0c;只有正规的期货黄金交易平台才值得信任。主要还是因为期货黄金交易平台优势所决定…

【五】线程安全VS线程不安全

1. Java内存模型的特征 Java内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立。下面逐个看下哪些操作实现这三个特性&#xff1a; 1.1 原子性&#xff08;Atomicity&#xff09; 由Java内存模型来直接保证的原子性变量操作包括 read、load、assig…

【机器学习】线性回归

文章目录前言一、单变量线性回归1.导入必要的库2.读取数据3.绘制散点图4.划分数据5.定义模型函数6.定义损失函数7.求权重向量w7.1 梯度下降函数7.2 最小二乘法8.训练模型9.绘制预测曲线10.试试正则化11.绘制预测曲线12.试试sklearn库二、多变量线性回归1.导入库2.读取数据3.划分…

Linux--抓包-连接状态

目录 一、TCP&#xff1a; 1.抓包&#xff1a; 2.工具&#xff1a; 3.状态&#xff1a; 4.命令&#xff1a; 三次握手&#xff1a; 应答确认&#xff1a; 四次挥手 一、TCP&#xff1a; 面向连接、可靠的、流式服务 1.抓包&#xff1a; 三次握手、四次挥手 2.工具&…

数据库:Redis数据库

目录 一、数据库类型 1、关系型数据库 2、非关系型数据库 3、关系型非关系型区别 二、Redis数据库 1、什么是Redis 3、Redis特点 4、Redis为什么读写快 5、部署Redis数据库 6、redis管理 7、Redis数据库五大类型 8、Redis数据库基础使用 9、redis五大类型增删查 …

数据库管理-第六十三期 烦(20230327)

数据库管理 2023-03-27第六十三期 烦1 跨版本PDB迁移补遗2 BUGs3 就低不就高总结第六十三期 烦 上个周末呢&#xff0c;因为一些客户的事情整的一个周末都在干活&#xff0c;其中两天还搞到的晚上12点&#xff0c;几乎没咋休息&#xff0c;现在感觉贼累&#xff0c;继续写文章…

为什么我们认为GPT是一个技术爆炸

从23年初&#xff0c;ChatGPT火遍全球&#xff0c;通过其高拟人化的回答模式&#xff0c;大幅提升了人机对话的体验和效率&#xff0c;让用户拥有了一个拥有海量知识的虚拟助手&#xff0c;根据UBS发布的研究报告显示&#xff0c;ChatGPT在1月份的月活跃用户数已达1亿&#xff…

Java实习生------Redis哨兵机制详解⭐⭐⭐

“无数的我们被世界碾压成一缩黑团&#xff0c;无数的我们试图与世界抗争到底”&#x1f339; 参考资料&#xff1a;图解redis 目录 什么是哨兵机制&#xff1f; 哨兵机制主要干了哪三件事&#xff1f; 哨兵监控主节点的过程是怎样的&#xff1f; 判断主节点故障之后&…