精华内容
下载资源
问答
  • (数据库,实体,查询字段,这些全部都得一一对应),高级映射:(resultMap)如果查询出来的列名pojo的属性名不一致, 通过定义一个resultType对列名pojo属性名之间作一个映射关系。(高级映射,字段名称可以不一致...

    ResultType和ResultMap的区别

    总结:

    基本映射:(resultType)使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功
    (数据库,实体,查询字段,这些全部都得一一对应),高级映射:(resultMap)如果查询出来的列名和pojo的属性名不一致,
    通过定义一个resultType对列名和pojo属性名之间作一个映射关系。(高级映射,字段名称可以不一致,通过映射来实现)。
    resultType和resultMap功能类似,都是返回对象信息,但是resultMap要更强大一些,可自定义,resultMap要配置一下,表
    和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来,但是
    
    Mybatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型
    的,resultMap则是对外部resultMap的引用,但是resultType和resultMap不能同时存在。
    在Mybatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面,其中键是属性名,值则是其对应的值。
    (1)当提供的返回值类型属性是resultType时,Mybatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性,
    所以其实Mybatis的每一个查询映射的返回值类型都是resultMap,只是当提供的返回类型属性是resultType的时候,Mybatis
    会自动的给把对应的值赋给resultType所指定对象的属性。
    (2)当提供的返回值类型是resultMap时,因为Map不能很好的表示领域模型,就需要自己再进一步的把它转化为对应的对象,
    这常常在复杂查询中很有作用。
    
    resultMap:适合使用返回值是自定义实体类的情况。
    resultType:适合使用返回值的数据类型是非自定义的,即jdk提供的类型。
    

    ResultType

    resultType可以直接返回给出的返回值类型,比如:String,int,Map等等,其中返回List也是将返回类型定义为Map,然后
    Mybatis会自动将这些map放在一个List中,resultType还可以是一个对象。
    
    resultType对应的是Java对象中的属性,大小写不敏感。
    resultType如果放的是java.lang.Map,key是查询语句的列名,value是查询的值,大小写敏感。
    resultMap指的是定义好了的id,是定义好的resultType的引用。
    注意:
    用resultType的时候,要保证结果集的列名与Java对象的属性相同,而resultMap则不用,而且resultMap可以用typeHander转换
    parameterType:参数类型,只能传一个参数,如果有多个参数要封装,如封装成一个类,要写包名+类名,基本数据类型则可以省略。
    一对一,一对多时,若有表的字段相同必须写别名,不然查询结果无法正常映射,出现某属性为空或者返回的结果与想象中的不同时,而这往往是没有报错的。
    

    ResultMap

    适合使用返回值是自定义实体类的情况。
    映射实体类的数据类型
    id:resultMap的唯一标识
    column:库表的字段名
    property:实体类的属性名
    

    id和result属性

    <id property=" " column=" "/>
    <result property=" " column=" "/>
    这是最基本的结果集映射,id和result将列映射到属性或简单的数据类型字段(String,int,double,Date等)
    这两者唯一不同的是,在比较对象实例时,id作为结果集的标识属性,这有助于提高总体性能,特别是应用缓存和嵌套结果映射的时候。
    
    Attribute Description
    property 映射数据库列的字段或属性。如果JavaBean 的属性与给定的名称匹配,就会使用匹配的名字。否则,MyBatis 将搜索给定名称的字段。两种情况下您都可以使用逗点的属性形式。比如,您可以映射到“username”,也可以映射到“address.street.number”。
    column 数据库的列名或者列标签别名。与传递给resultSet.getString(columnName)的参数名称相同。
    javaType 完整java类名或别名(参考上面的内置别名列表)。如果映射到一个JavaBean,那MyBatis 通常会自行检测到。然而,如果映射到一个HashMap,那您应该明确指定javaType 来确保所需行为。
    jdbcType 这张表下面支持的JDBC类型列表列出的JDBC类型。这个属性只在insert,update或delete 的时候针对允许空的列有用。JDBC 需要这项,但MyBatis 不需要。如果您直接编写JDBC代码,在允许为空值的情况下需要指定这个类型。
    typeHandler 我们已经在文档中讨论过默认类型处理器。使用这个属性可以重写默认类型处理器。它的值可以是一个TypeHandler实现的完整类名,也可以是一个类型别名。
    展开全文
  • 在前面【SSM框架入门】mybatis的增删改查操作中,mysql中user表字段名和实体类中的属性名一一...这是因为实体类中的属性user表字段名不一样,mybatis无法完成映射(userName不为空是因为mysql在window下不区分

    在前面【SSM框架入门】mybatis的增删改查操作中,mysql中user表字段名和实体类中的属性名一一对应,所有增删改查操作都能正常执行。但是当实体类中属性名与mysql表中字段名不对应时,mybatis无法映射。
    在这里插入图片描述
    此时把mapper文件的值修改为实体类的属性名,增删改是可以正常执行的。
    在这里插入图片描述
    但是进行查询操作时输出结果中除了userName,其余属性全为null
    在这里插入图片描述
    这是因为实体类中的属性名和user表字段名不一样,mybatis无法完成映射(userName不为空是因为mysql在window下不区分大小写)。


    此时可以通过起别名或者配置查询结果的列名和实体类属性名的对应关系解决映射问题

    1. 起别名

    在这里插入图片描述
    输出结果
    在这里插入图片描述

    2. 配置resultMap标签

    <!-- 配置 查询结果的列名和实体类的属性名的对应关系 -->
        <resultMap id="userMap" type="com.ssm.domain.User">
            <!-- 主键字段的对应 -->
            <id property="userId" column="id"></id>
            <!-- 非主键字段的对应 -->
            <result property="userName" column="username"></result>
            <result property="userBirthday" column="birthday"></result>
            <result property="userSex" column="sex"></result>
            <result property="userAddress" column="address"></result>
        </resultMap>
    

    并把select标签中的resultType属性改为resultMap
    在这里插入图片描述
    输出结果
    在这里插入图片描述

    展开全文
  • HQL简单属性和实体对象查询

    千次阅读 2011-08-12 09:52:54
    在HQL中,关键字不区分大小写,但属性类名区分大小写。 1.简单属性查询 (1)单一属性查询:返回的结果集为属性列表,其类型与实体中该属性的类型一致 List students=session.createQuery("select name from...

    在HQL中,关键字不区分大小写,但属性名和类名区分大小写。

    1.简单属性查询

    (1)单一属性查询:返回的结果集为属性列表,其类型与实体中该属性的类型一致

       List students=session.createQuery("select name from Student").list();
    

    返回结果集List中是name集合,其类型与实体类Student中name的类型保持一致。

    (2)多个属性查询:返回的结果集为对象数组,数组元素的类型与对应实体中的属性类型一致,其长度取决于select中属性的个数。

       List students=session.createQuery("select id,name from Student").list();

    这样遍历得到的是对象数组Object【】,其第一个元素为id,即下标值为0,第二个元素为name,下标值为1.

    如何得到Student类型呢,采用HQL动态实例化Student对象,

    首先为Student提供无参的构造函数,和一个带有id和name参数的构造函数,从而有

    List students=session.createQuery("select new Student(id,name) from Student").list();

    这样遍历得到的是Student对象。

    (3)可以使用别名

    List students=session.createQuery("select s.id,s.name from Student 【as】 s").list();
    

     

    2.实体对象查询

     (1)不使用select

    List students=session.createQuery(" from Student").list();

    返回的结果为实体对象集合

    (2)不使用select,用别名

    List students=session.createQuery(" from Student 【as】 s").list();

    返回的也是实体对象集合

    (3)使用select,必须用别名

    List students=session.createQuery(" select s from Student 【as】 s").list();

    返回的也是实体对象集合

    但是使用select * from Student 是不支持的。

    (4)使用Iterator接口

    Iterator iter=session.createQuery(" from Student").iterate();

    注意 iterate和list的区别:

    A:使用iterate查询,在默认情况下利用缓存数据,若缓存中不存在相应记录,会出现N+1问题。

       所谓“1”:即首先发出一条查询对象id列表的sql语句;

      所谓”N“:根据id到缓存中查询,若缓存中没有与之匹配的记录,则根据id发出相应的sql查询语句。

    B:list每次都会发出sql查询语句,会向缓存中放入数据,但默认情况下不利用缓存中的数据。


     


     


     

     

       

    展开全文
  • Mybatis解决实体属性与数据库列名不对应的方法 实体属性名 数据库列名 执行查操作 结果发现只有username能成功封装(那是因为...使用resultMap配置查询结果的列名和实体类的对应关系 并在使用时,调用resultMa
  • 因为数据库 Java 中的这两种命名方式很常见,因此 MyBatis 还提供 了 一个全局属性 mapUnderscoreToCamelCase ,通过配置这个属性为 true 可以自动将以下画线方式命名的 数据库列映射到 Java 对象的驼峰式命名属性...
  • Mysql数据库在windows系统下不区分大小写 在使用程序调用数据库的时候,有的时候会发生这种情况。 发生的原因可能是: 解决办法有两种 1、可以通过起别名的方式解决问题。 2、不同于第一种方法,第二种方法是新增一...
  • 在数据库中,由于大多数数据库设置不区分大小写 ,因此下画线方式的...因为数据库 Java 中的这两种命名方式很常见,因此 MyBatis 还提供 了 一个全局属性mapUnderscoreToCamelCase ,通过配置这个属性为 true 可以...
  • 首先在Windows系统下,MySql不区分大小写,所有usernameuserName是相同的 但是只要实体表中数据列名有一个字母除大小写外不相同,那么就封装不进数据 解决方法: 1.在sql层面进行解决。直接使用as起别名 2....
  • 1) 实体查询:出现类名和属性名必须注意大小写区分;当不同路径下存在相同类名,需要写入在hql中写入包名;查询目标实体存在着继承关系,将查询目标的所有子类的库表记录一起返回。 String hql = “from ...
  • 在HQL中关键字不区分大小写,但是属性和类名区分大小写   一、简单属性查询 1.单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致 //查询单个字段 String hql = " select ...
  • 01属性数据概述地理信息系统(GIS)的操作对象是地理实体数据,包括地理实体的空间数据和属性数据。属性数据是与空间位置相关、反映事物某些特性的数据,如名称、类型、数量等,一般用数值、文字表示,也称作非空间...
  • java中实体类的区分

    千次阅读 2014-10-09 13:53:15
    ational Mapping(对象关系映射)的缩写。... VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成。从结构上看,它们并没有什么不同的地方。但从其意义和本质
  • 1) 实体查询:出现类名和属性名必须注意大小写区分;当不同路径下存在相同类名,需要写入在hql中写入包名;查询目标实体存在着继承关系,将查询目标的所有子类的库表记录一起返回。 String hql = “from TUser”; ...
  • 一、问题先知 windous系统下的MySQL数据库不会区分大小写 数据库中<查询结果的列名>username与java实体类中的<...配置查询结果的列名和实体属性名的对应关系> 注意:返回类型变成上
  • 怎么样设计实体和怎么样划分限界上下文同样重要。实体的概念就是要保证通用语言的完整性。领域驱动让设计实体的关注点从数据的属性和表的关联转化到了富有行为的领域概念上。 实体是具有可变性的,这是一个和值对象...
  • Java中的数据类型SQL中的数据类型有很多不一样,需要仔细区分,不然易在开发中造成莫名的错误。 Java数据类型 Hibernate数据类型 标准SQL数据类型 (PS:对于不同的DB可能有所差异) ...
  • Java中的数据类型SQL中的数据类型有很多不一样,需要仔细区分,不然易在开发中造成莫名的错误。 Java数据类型 Hibernate数据类型 标准SQL数据类型(PS:对于不同的DB可能有所差异) ...
  • 具有相同属性实体具有由相同的特征性质,用实体名及其属性名集合来抽象刻画同类实体,称为实体型。 (3)实体集 同型实体的集合称为实体集, (4)实体之间的联系 通常是指不同实体型的实体...
  • Java中的数据类型SQL中的数据类型有很多不一样,需要仔细区分,不然易在开发中造成莫名的错误。 Java数据类型 Hibernate数据类型 标准SQL数据类型 (PS:对于不同的DB可能有所差异) ...
  • 【Java】简单区分对象引用对象

    千次阅读 2017-05-26 14:26:05
    以下纯属个人的理解,如果有不全或者错误的...为了方便说明,博主先创建一个 People 类(类是具有相同属性和行为的一类实体,对象是类的实例化) public class People { private String name; private int ...
  • @Valid@Validated的总结区分

    万次阅读 多人点赞 2018-06-05 16:42:15
    ① 首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于Girl类中的属性):@Min(value = 18,message = "未成年禁止入内") private Integer age; ② 其次在controller层...
  • 实体和实体集的型都用其属性名的列表表示  例如,学生实体(集)的型可以用(学号,学生姓名,性别,出生年月,院系,专业)  实体的值是该实体诸属性值的列表  (201606198,江涛,男,1997.4,信息工程学院...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 427
精华内容 170
关键字:

区分实体和属性