首页 > 数据库 >mybatis查询结果封装javabean属性时属性名与数据库字段不同都能封装????

mybatis查询结果封装javabean属性时属性名与数据库字段不同都能封装????

时间:2022-11-21 17:36:36浏览次数:44  
标签:封装 String gender public email mybatis Integer id 属性

问题现象:

  • 通过mybatis查询数据库中的表记录,封装成javaBean, 本来属性名和字段名不相同的情况下,属性最后应该注入null的,结果能够正常注入。

javaBean:

public class Employee {
    private Integer id;
    private String empname;
    private Integer age;
    private Integer gender;
    private String email;
    private String loginName;


    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", empname='" + empname + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", email='" + email + '\'' +
                ", loginName='" + loginName + '\'' +
                '}';
    }

    public Employee(Integer id, String empname, Integer age, Integer gender, String email, String loginName) {
        this.id = id;
        this.empname = empname;
        this.age = age;
        this.gender = gender;
        this.email = email;
        this.loginName = loginName;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmpname() {
        return empname;
    }

    public void setEmpname(String empname) {
        this.empname = empname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

  • 表信息:
CREATE TABLE `employee` (
  `id` int NOT NULL AUTO_INCREMENT,
  `empname` varchar(20) NOT NULL,
  `age` int DEFAULT NULL,
  `gender` int DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  `login_name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb3

  • mapper.xml中的sql语句:
<mapper namespace="com.tx.imapper.EmployeeMapper">
    <select id="getEmployeeById" resultType="com.tx.bean.Employee">
        select * from employee where id = #{id}
    </select>
</mapper>
  • Test类
public class Test {
    public static SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @org.junit.Test
    public void test(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee emp = mapper.getEmployeeById(3);
        System.out.println(emp);	// Employee{id=1, empname='admin', age=40, gender=1, email='[email protected]', loginName='adminUser'}
        sqlSession.close();
    }

}

按照我的预估,loginName=null的,结果居然能够正常注入属性? 本来想测试resultMap的,结果我瞬间麻了。

刚开始我以为mybatis最新版本将驼峰规则默认改成true了,但来我甚至将loginName的属性名改成其他完全不相干名称,都能照样注入属性。

问题所在:

后来才发现,我的javaBean缺少空参构造器。添上空参构造器后,才会正常显示null。 具体原因不清楚以后有时间再看mybatis源码吧。

标签:封装,String,gender,public,email,mybatis,Integer,id,属性
From: https://www.cnblogs.com/tanxin1989/p/16912040.html

相关文章

  • Net6 反射反射程序员的快乐/遍历属性、字段、构造方法、函数及相关操作
    十年河东,十年河西,莫欺少年穷学无止境,精益求精反射反射,程序员的快乐,利用反射可以获取到私有属性及其值 在C#中反射无处不在,用好反射,就可以为所欲为有这么一个学生类:publicc......
  • Mybatis下的SQL注入漏洞原理及防护方法
    目录一、前言二、SQL注入漏洞原理1、概述2、漏洞复现3、修复建议三、Mybatis框架简介1、参数符号的两种方式2、漏洞复现四、Mybatis框架下的SQL注入问题及防护方法1、......
  • mybatis-plus入门
    1、快速开始1.1、现有一张User表,其表结构如下[email protected]@[email protected]......
  • 使用mybatis-plus代码生成器生成代码框架
    使用mybatis-plus代码生成器生成代码框架一.首先引入依赖<!--连接MySQL--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring......
  • 记一次mybatis检查
    搭建学习springcloud,添加数据源,控制台不报错, mybatis无法使用。1.启动控制台报错:配置文件未生效编译后target目录下无mapper.xml和bootstarp.yaml。  --先手动复......
  • mybatis流式查询与分页插件
    1、流式查询1、实体类packagecom.wanqi.pojo;importjava.util.Date;/***@DescriptionTODO*@Version1.0.0*@Date2022/9/12*@Authorwandaren*/......
  • 2.3创建mybatis的逆向工程
    1.1创建mybatis的逆向工程1,同步请求和异步请求的区别:同步请求:浏览器窗口发出的请求,响应信息返回到浏览器窗口,所以会进行全局刷新。异步请求:ajax发出的请求,响应......
  • Mybatis查询返回Map
    1/**2*查询产品的医保名称、省标名称3*@paramproductIds4*@return5*/6@MapKey("productId")7publicMap<Long,Provinc......
  • Delphi IdTCPClient[1] 介绍、属性、方法
    DelphiIdTCPClient[1]介绍、属性、方法1、介绍实现TCP客户端。TIdTCPClient封装了一个完整的TCP(传输控制协议)客户端,包括socks支持。TIdTCPClient可以用作特定协议实现......
  • 111:特殊属性
    Python对象中包含了很多双下划线开始和结束的属性,这些是特殊属性,有特殊用法。这里我们列出常见的特殊属性:#测试特殊属性classA:passclassB:passcl......