波斯菊有多少种颜色呢? 当前位置:首页>波斯菊有多少种颜色呢?>正文

波斯菊有多少种颜色呢?

发布时间:2019-04-23

原标题:SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射

“半个多月执行任务?如果小欣能够配合龙腾好的话,那便可以直接去那个佣兵团的本营,直接屠灭那群人的中坚力量。失去了领导者,嗜血佣兵团便是群龙无首,龙腾便可收手,如果嗜血的人敢来华夏,杀之!不过,小欣可是我的外孙,我相信他!”唐老望着对面的唐欣,出言说道。

冬天可以种碧桃吗?

澎湃的力量波动扩散开来,如果这里不是因为共工死后残留的力量自成一个坚固的世界,还有因为红衣早就布下诸天星辰生灭大阵隔绝一切的话这一股力量气息早就传遍整个人间界了。
她将那张纸拿起来读,只见上面写着:“隐娘,为师弄破了你的衣裳,又害你被父母责骂,真是没脸见你,这件衣衫赔给你吧。刺客要到半夜才会出现,你现在心绪太乱,不可和敌人动手,最好静坐半个时辰再出去。师父。”

戴沐白没有回答马红俊的话,但朱竹清却站了起来,她向着所有人弯腰鞠躬。

  前言

  在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置文件、实体类、SQL映射文件、Mapper接口等等)和重要对象(SqlSession、Mapper实例等等)。有了整体认知后,我们就可以进一步深入学习MyBatis的使用,resultMap本文主要围绕resultMap展开。

  resultMap作为MyBatis的Sql映射文件中重要的元素之一,主要用来实现复杂的结果映射,其子元素结构如下:

  constructor

  constructor是构造器的意思,对反射有基本了解的都应该不会陌生。借此我们先回顾一下前面定义的一个简单resulMap映射内容

<resultMap type="person" id="personResultMap" >
    <id column="id" property="id" />
    <result column="name" property="name" />
    <result column="gender" property="gender" />
</resultMap>

  上面是一个典型的在resultMap中定义数据表与实体类的映射关系,type这里用的别名指向Person类,id为该映射的唯一标识,用于在后面我们的定义语句中引用,内部的id和result分别对应主键和普通字段定义,column指数据表中字段名,property指实体类中属性名。在之前的示例中,通过这个一个映射关系,我们查询出来的结果就转化为了一个Person类对象。

  这个Person类对象并非由我们创建出来,而是由mybatis调用了Person类的默认无参构造函数创建对象,再调用set方法为对象赋值,这样才返回了我们想要的结果。下面结合之前的示例,做一些改动以便观察。

package com.mmm.pojo;
/**
 * Person实体类
 * */
public class Person {
    
    private String id;
    
    private String name;
    
    private String gender;
    
    public String getId() {
        return id;
    }
    
    public void setId(String id) {
        this.id = id;
        System.out.println("为主键属性id赋值");
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
        System.out.println("为属性name赋值");
    }
    
    public String getGender() {
        return gender;
    }
    
    public void setGender(String gender) {
        this.gender = gender;
        System.out.println("为属性gender赋值");
    }
    
    public Person() {
        System.out.println("调用无参构造创建对象");
    }
}
<select id="selectById"resultMap="personResultMap">
    select * from `person` where id = #{id}
</select>

  调用该查找方法后会看到控制台输出如下信息:

  说明确实是mybatis调用了这些方法帮我们创建了对象,基于构造器。说起构造器,在我们定义的pojo实体类中,简单的私有属性加上set/get方法声明即完成,在java类中,会默认提供一个无参的构造方法,例如这里的Person类

public Person(){}

  我们使用语句 Person p = new Person();这里即调用的该无参构造。方法都可以重载,构造方法也不例外。但是很重要的一点,我们在重载构造方法后,原本默认提供的无参构造就无法使用了,需要显示声明,这点下面会给出示例。resultMap中constructor就是基于重载的带参构造方法创建对象,如下:

<resultMap type="person" id="personResultMap" >
    <constructor>
        <idArg column="id" javaType="string" />
        <arg column="name" javaType="string" />
        <arg column="gender" javaType="string" />
    </constructor>
</resultMap>

  在实体类中添加重载的带参构造方法

public Person(String id, String name, String gender) {
    this.id = id;
    this.name = name;
    this.gender = gender;
        System.out.println("直接调用带参构造函数创建对象");
}

  再次调用查找方法后会看到控制台输出如下信息:

  这样一来,使用constructor同样拿到了数据。

  这个时候如果我们把实体类中的默认无参构造方法的显示声明删除,即只有一个带参的构造方法,这样我们再把Sql映射文件中<resultMap>内容还原成文中一开始定义的典型<id><result>等,再调用方法,为了更明显,在地址栏中通过controller层层调用到该方法,报错乍一看,一大串异常,其实标题末尾一句话就出来了

  这五种问题让苗木人困惑不已 热度渐趋,欧月藤本月季价格归于平静,几块钱就可以买到正宗货 到哪可以买到丁香花? 哪里有卖矢车菊种子的? 低矮的草坪是什么草种类呢?? 虞美人适合播种的温度是多少? 波斯菊播种之前需要催芽吗? 格桑花什么时候撒种?

38817 88820 56892 15505 49781 41003 34317 20388 54409 92826 27555 45888 92479 66553 27340 17273 88743 89910 61865 54808

责任编辑:乙秉华徒