• 封装MyBatis输出结果-简单类型,对象类型,map,resulemap,模糊查询


    封装 MyBatis 输出结果

    resultType: 执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。resultType 和 resultMap,不能同时使用。

    1.对象类型

    实体类中不仅表对应的实体类可以拿到数据库中的值,只要字段名字对应还可以赋值给其他类、

    1. 定义一个类

      1. package com.bjpowernode.vo;
      2. public class ViewStudent {
      3. private Integer id;
      4. private String name;
      5. public Integer getId() {
      6. return id;
      7. }
      8. public void setId(Integer id) {
      9. this.id = id;
      10. }
      11. public String getName() {
      12. return name;
      13. }
      14. public void setName(String name) {
      15. this.name = name;
      16. }
      17. @Override
      18. public String toString() {
      19. return "ViewStudent{" +
      20. "id=" + id +
      21. ", name='" + name + '\'' +
      22. '}';
      23. }
      24. }
    2. 配置mappery映射,将数据库中的数据赋值给这个viewstudent

      1. <select id="selectStudentReturnViewStudent" resultType="ViewStudent">
      2. select id,name from student where id=#{sid}
      3. select>
    3. 测试如下:

    在接口的对应配置文件中:

    1. <select id="selectStudentById" resultType="Student">
    2. select id,name, email,age from student where id=#{studentId}
    3. select>

    执行结果如下:

    2. 简单类型

    1. 接口方法:
    2. int countStudent();
    3. mapper 文件:
    4. 测试方法:
    5. @Test
    6. public void testRetunInt(){
    7. int count = studentDao.countStudent();
    8. System.out.println("学生总人数:"+ count);
    9. }

    结果如下:

    3. map

    sql 的查询结果作为 Map 的 key 和 value。推荐使用 Map。注意:Map 作为接口返回值,sql 语句的查询结果最多只能有一条记录。大于一条记录是错误。

    接口方法:

    1. //定义方法返回Map
    2. Map selectMapById(Integer id);

    mapper 映射文件

    只能最多返回一行记录。多余一行是错误

    1. <select id="selectMapById" resultType="java.util.HashMap">
    2. select id,name,email from student where id=#{stuid}
    3. select>

    测试方法如下:

    1. //返回Map
    2. @Test
    3. public void testSelecMap(){
    4. SqlSession sqlSession = MyBatisUtils.getSqlSession();
    5. StudentDao dao = sqlSession.getMapper(StudentDao.class);
    6. Map map = dao.selectMapById(1001);
    7. System.out.println("map=="+map);
    8. }

    结果如下;

    4. resultMap

    resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。常用在列名和 java 对象属性名不一样的情况。

    其实就是手动的让数据库中的列值赋值到实体类中的各个属性上,具体实现如下:

    1. <resultMap id="studentMap" type="com.bjpowernode.domain.Student">
    2. <id column="id" property="id" />
    3. <result column="name" property="name" />
    4. <result column="email" property="email" />
    5. <result column="age" property="age" />
    6. resultMap>
    7. <select id="selectAllStudents" resultMap="studentMap">
    8. select id,name, email , age from student
    9. select>

    5. 实体类属性名和列名不同的处理方式可能会用到

    1. 方法一:使用resultMap

      • 创建实体类

        1. package com.bjpowernode.domain;
        2. public class MyStudent {
        3. private Integer stuid;
        4. private String stuname;
        5. private String stuemail;
        6. private Integer stuage;
        7. public Integer getStuid() {
        8. return stuid;
        9. }
        10. public void setStuid(Integer stuid) {
        11. this.stuid = stuid;
        12. }
        13. public String getStuname() {
        14. return stuname;
        15. }
        16. public void setStuname(String stuname) {
        17. this.stuname = stuname;
        18. }
        19. public String getStuemail() {
        20. return stuemail;
        21. }
        22. public void setStuemail(String stuemail) {
        23. this.stuemail = stuemail;
        24. }
        25. public Integer getStuage() {
        26. return stuage;
        27. }
        28. public void setStuage(Integer stuage) {
        29. this.stuage = stuage;
        30. }
        31. @Override
        32. public String toString() {
        33. return "MyStudent{" +
        34. "stuid=" + stuid +
        35. ", stuname='" + stuname + '\'' +
        36. ", stuemail='" + stuemail + '\'' +
        37. ", stuage=" + stuage +
        38. '}';
        39. }
        40. }
      • 配置mapper文件

        1. <resultMap id="myStudentMap" type="com.bjpowernode.domain.MyStudent">
        2. <id column="id" property="stuid" />
        3. <result column="name" property="stuname" />
        4. <result column="email" property="stuemail" />
        5. <result column="age" property="stuage" />
        6. resultMap>
        7. <select id="selectMyStudent" resultMap="myStudentMap">
        8. select id,name, email , age from student
        9. select>
      • 测试如下:

    2. 方式二:直接在sql中该表列名字(更简单写)

      1. <select id="selectDiffColProperty" resultType="com.bjpowernode.domain.MyStudent">
      2. select id as stuid ,name as stuname, email as stuemail , age stuage from student
      3. select>

      6. 模糊 like

      模糊查询的实现有两种方式, 一是 java 代码中给查询数据加上“%” ; 二是在 mapper 文件 sql 语句的条件位置加上“%”

      需求:查询姓名有“力”的

    1. 1: java 代码中提供要查询的 “%力%”
    2. 接口方法:
    3. List selectLikeFirst(String name);
    4. mapper 文件:
    5. 测试方法:
    6. @Test
    7. public void testSelectLikeOne(){
    8. String name="%力%";
    9. List stuList = studentDao.selectLikeFirst(name);
    10. stuList.forEach( stu -> System.out.println(stu));
    11. }
    12. 2:mapper 文件中使用 like name "%" #{xxx} "%"
    13. 接口方法:
    14. List selectLikeSecond(String name);
    15. mapper 文件:
    16. 测试方法:
    17. @Test
    18. public void testSelectLikeSecond(){
    19. String name="力";
    20. List stuList = studentDao.selectLikeSecond(name);
    21. stuList.forEach( stu -> System.out.println(stu));
    22. }
    1. <select id="selectLikeOne" resultType="com.bjpowernode.domain.Student">
    2. select id,name,email,age from student where name like #{name}
    3. select>
    4. <select id="selectLikeTwo" resultType="com.bjpowernode.domain.Student">
    5. select id,name,email,age from student where name like "%" #{name} "%"
    6. select>
  • 相关阅读:
    未解决的notebook问题
    ❤ npm运行打包报错归纳
    nginx502常见502错误问题解决办法
    [百度飞桨EasyDL图文教程] 零代码也能用AI图像分类
    照着这本“书”,3年量产自动驾驶卡车
    [NLP复习笔记] Word2Vec: 基于负采样的 Skip-gram 及其 SGD 训练
    【iOS开发-AFNetWorking下的POST和GET】
    OpenHarmony,奏响中国基础软件的“光辉岁月”
    【API篇】一、执行环境API
    【强化学习论文合集 | 2019年合集】一. ICML-2019 强化学习论文
  • 原文地址:https://blog.csdn.net/weixin_48370579/article/details/127729360