Mybatis持久层框架 | Lombok搭建

news/2024/11/8 18:48:20/

在这里插入图片描述

💗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 mapperPUBLIC "-//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 mapperPUBLIC "-//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 {@Testpublic 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集合:collectioncolumn:数据库中的字段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测试类
    @Testpublic 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集合:collectionjavaType:指定的属性类型集合中的泛型信息,使用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集合:collectionjavaType:指定的属性类型集合中的泛型信息,使用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 {@Testpublic 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类型,泛型中的约束类型

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


在这里插入图片描述


http://www.ppmy.cn/news/428318.html

相关文章

SF授权系统源码 V3.7全开源无加密版本

&#x1f389; 有需要的朋友记得关赞评&#xff0c;文章底部来交流&#xff01;&#xff01;&#xff01; &#x1f389; ✨ 源码介绍 2023全新SF授权系统源码 V3.7全开源无加密版本。网站搭建很简单&#xff0c;大致看来一下应该域名解析后上传源码解压&#xff0c;访问域名/i…

【微服务架构设计和实现】4.3 服务之间的通信和API设计

第一章&#xff1a;【云原生概念和技术】 第二章&#xff1a;【容器化应用程序设计和开发】 第三章&#xff1a;【基于容器的部署、管理和扩展】 第四章&#xff1a;【4.1 微服务架构概述和设计原则】 第四章&#xff1a;【4.2 服务边界的定义和划分】 4.3 服务之间的通信和…

有哪些音质比较好的蓝牙耳机可以推荐?高音质真无线蓝牙耳机榜

不知道大家有没有这种感觉&#xff0c;有线耳机打结解不开会让人很绝望&#xff0c;现在这种情况也离我们越来越远。借助蓝牙技术的发展&#xff0c;真无线蓝牙耳机正在疯狂的涌入市场。蓝牙耳机以小巧便于携带&#xff0c;又具有个性特点吸引着无数人的眼光。现在我就为大家推…

哪种蓝牙耳机音质好又便宜?便宜又好用的耳机蓝牙耳机推荐

现在是一个无线的时代&#xff0c;比如无线充电&#xff0c;无线上网等等&#xff0c;不知不觉得&#xff0c;现在的无线耳机也做得越来越小&#xff0c;音质越来越好。就比如现在的真无线蓝牙耳机&#xff0c;自苹果的AirPods的走红后就带动了整个市场的火爆&#xff0c;现在的…

Ubuntu系统中分布式安装配置HBase-2.3.7

HBase是一个基于Hadoop的分布式列式数据库&#xff0c;可以存储海量的结构化和半结构化数据。本文介绍如何在三个Ubuntu系统上搭建一个HBase集群&#xff0c;并进行简单的数据操作。 在三个Ubuntu系统上分布式安装配置HBase-2.3.7&#xff0c;主要步骤包括&#xff1a; 准备工…

JAVA 冒泡排序

冒泡排序 ⭐原理&#xff1a; 冒泡排序算法的运作如下&#xff1a; 1.比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 2.对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。 3.针…

PTA(每日一题)7-59 武林盟主

在传说中的江湖中&#xff0c;各大帮派要选武林盟主了&#xff0c;如果龙飞能得到超过一半的帮派的支持就可以当选&#xff0c;而每个帮派的结果又是由该帮派帮众投票产生的&#xff0c;如果某个帮派超过一半的帮众支持龙飞&#xff0c;则他将赢得该帮派的支持。现在给出每个帮…

基于pytorch使用LSTM进行虎年春联生成

先看看我摘录的一些结果吧 七字春联&#xff0c;开头两个字分别为 虎年、虎气、春节 虎年啸虎春虎虎 虎气伏虎牛龙龙 虎年虎虎展啸风 春节啸春虎风虎 虎年虎啸啸千啸 春节萝啸气风春 虎年啸浩一讯欢 春节回旧鹤绣舞 虎年啸一着有处 春节回一福舞福 虎年啸月翼业来 春节回…