这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四种方法方法,供大家参考。

        Mybatis不像Hibernate中那么自动化,通过@Column注解或者直接使用实体类的属性名作为数据列名,而是需要自己指定实体类属性和数据表中列名之间的映射关系,这一点让用惯了Hibernate的人很不习惯,所幸经过探索找到了建立映射关系的几种办法,其中总也有比较简单的。

首先定义一个实体类User,如下:

public class User {
private Integer id;
private String username;
private Date birthday;
private String address;
private String sex;
.......
(setter,getter省略)
}

        其次定义一个接口UserDao ,如下:

public interface UserDao {
List<User> selectUserByName ();
}

还有设计一张user数据库表,如下:

        

 然后下面将详细说明四种常用的方法。

            1. 通过XML映射文件中的resultMap

这种方式是最常见的,类似如下:

<mapper namespace="demo.UserDao">
<resultMap id="userResultMap" type="entity.User">
<!-- 用id属性来映射主键字段 -->
<id property="id" column="uid"/>
<!-- 用result属性来映射非主键字段 -->
<result property="username" column="uusername "/>
<result property="birthday" column="ubirthday"/>
<result property="address" column="uaddress"/>
<result property="sex" column="usex"/>
</resultMap>
</mapper>

通过里面的id标签和result标签来建立映射关系,由property和column分别指定实体类属性和数据表的列名。

2. 通过注解@Results@Result

这两个注解是与XML文件中的标签相对应的:

@Results对应resultMap
   @Result对应result

这两个注解是应用在方法的级别上的,也就是在UserDao的方法上,这时候就需要xml了,如下:

    @Select("select * from user where uusername = #{userName}")
@Results({
@Result( id = true ,property = "id", column = "uid"),
@Result(property="username" ,column="uusername"),
@Result(property="birthday", column="ubirthday"),
@Result(property="address", column="uaddress"),
@Result(property="sex" ,column="usex"),
}
)
User selectUserByName(@Param("userName") String username);

在这里把参数username,和userName区别开了,目的是在凸显Param注解后面的参数要与sql语句里的对应上,方法里的形参随便都可以。id为是否为主键。

     缺点:

由于注解是针对方法的,对于Mapper中的每个操作数据库的方法都必须有相同的注解完成映射关系的建立,导致很多的配置是重复的;

  如果要避免配置重复的问题,可以采用在XML配置文件中配置这个resultMap,然后再@Result中通过id属性引用这个resultMap,

  但是这样感觉很麻烦(由于使用了两种配置方式),不如直接使用基于XML的resultMap配置方式;

         3. 通过属性配置完成映射

Mybatis给我们提供了一种映射方式,如果属性的命名是遵从驼峰命名法的,数据列名遵从下划线命名,

那么可以使用这种方式,类似如下:

实体类中属性userName对应数据库列名user_name;

userId对应user_id;

SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
Configuration configuration = new Configuration();
configuration.setMapUnderscoreToCamelCase(true);
sqlSessionFactoryBean.setConfiguration(configuration);

         4. 通过使用在SQL语句中定义别名完成映射

这种方式最直接,直接在SQL语句中建立别名来完成映射,如下:

@Select("select user_name as username, user_id as id from user where
user_name = #{userName}")
User selectUserByName(@Param("userName") String username);

Mybatis中实体类属性与数据库列表间映射方法介绍的更多相关文章

  1. Mybatis中实体类属性和数据列之间映射的四种办法

    http://blog.csdn.net/lmy86263/article/details/53150091 Mybatis不像hibernate中那么自动化,通过@Column注解或者直接使用实体类 ...

  2. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_9 Mybatis中的返回值深入-解决实体类属性和数据库列名不对应的两种方式

    sql语句里面起别名的方式 测试查询的方法 数据字段 都有值了. 配置查询接口列表和实体类属性名对应关系 id可以随便起名 主键的对应 再次测试,并没有封装成功 这是应为定义的对应关系并没有使用. 当 ...

  3. Mybatis实体类属性与数据库字段不一致解决办法

    例如:实体类  String userName     数据库:name 解决办法一: 通过给字段加别名,别名写成实体类属性一 eg:select name userName from student ...

  4. Mybatis 使用Mybatis时实体类属性名和表中的字段名不一致

    开发中,实体类中的属性名和对应的表中的字段名不一定都是完全相同的,这样可能会导致用实体类接收返回的结果时导致查询到的结果无法映射到实体类的属性中,那么该如何解决这种字段名和实体类属性名不相同的冲突呢? ...

  5. Mybatis中实体类中的字段跟对应表的字段不一致时解决办法

    解决字段名与实体类属性名不相同的冲突 实体类字段: public class Order { private int id; private String orderNo; private float ...

  6. 阶段3 1.Mybatis_12.Mybatis注解开发_5 mybatis注解建立实体类属性和数据库表中列的对应关系

    创建新项目,一对多 复制刚才关闭的项目的文件 复制到们的新项目里面 复制包的依赖 删减相关代码.只保留这三个查询的方法 模糊查询改成传统的占位符的方式 之前是可以自定义实体类的属性字段,和数据库的字典 ...

  7. mybatis中实体类跟数据库属性不一致解决方案

    1.在Mapper.xml映射配置文件中给sql语句起别名 select id as uid,username as name from user 2.mybatis中可以单独的配置查询结果的列名和实 ...

  8. mybatis注解开发实体类属性和数据库字段不对应问题

    /** * 查询所有用户 * @return */ @Select("select * from user") @Results(id="userMap",va ...

  9. Mybatis 中实体类的编写

    一个实体类对应一个数据表 一个属性对应一个字段 默认情况下类名和属性名都采用 “下划线转驼峰” 的命名方式.但具体采用什么样的命名方式并不重要(方式一致即可),在后面使用这些对象的时候,可以通过 re ...

随机推荐

  1. 小a与军团模拟器

    题目描述 9102 年伊始,小a觉得山羊模拟器,乞丐模拟器之类的都太低级了,所以想自己建立一个征战天下的军团模拟器. 军团模拟器是在一个城市数为N的国家中运行的,每个城市都会通过一些道路和其他所有城市 ...

  2. CSP2019 J组 游记

    结果 分数出来了.100+100+10+35=245. 一等线230,擦着边进一等. (点击图片放大) 期待明年s组的表现. 第一轮 不就是初赛吗?擦边轻松水过去! 第二轮 Day -14 停两周晚自 ...

  3. Nodejs仿Apache的部分功能

    一.初步实现Apache的部分功能 //1.加载模块 var http=require('http'); var fs=require('fs'); //2.创建server var server=h ...

  4. Pollard-Rho算法求大数质因子

    /* * 大整数分解到现在都是世界级的难题,但却是一个重要的研究方向,大整数在公共密钥的研究上有着重要的作用 * Pollard Rho算法的原理就是通过某种方法得到两个整数a和b.而待分解的大整数为 ...

  5. shell脚本编程基础知识点

    整数比较: -eq:测试两个整数是否相等:相等为真,不等为假 -ne:测试两个整数是否不等:不等为真,相等为假 -gt:测试一个数是否大于另一个数:大于为真,否则为假 -lt:测试一个数是否小于另一个 ...

  6. struct iphdr

    struct iphdr { #if defined(__LITTLE_ENDIAN_BITFIELD) __u8 ihl:, version:; #elif defined (__BIG_ENDIA ...

  7. hive 整合ranger

    一.安装hive插件 1.解压安装 #  tar zxvf ranger-2.0.0-SNAPSHOT-hive-plugin.tar.gz -C /data1/hadoop/ 2.修改install ...

  8. Maven的具体使用和优点

    1.Apache软件基金会提供的项目自动化构建和项目管理软件. 基于项目对象模型(POM)概念,Maven利用一个中央信息片段能管理一个项目的构建.报告.文档等步骤. 官方网站:http://mave ...

  9. 第10组 Beta冲刺(1/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 tomcat的学习与实现 服务器后端部署,API接口的beta版实现 后端代码 ...

  10. 转:sql 经典50题--可能是你见过的最全解析

    题记:从知乎上看到的一篇文章,刚好最近工作中发现遇到的题目与这个几乎一样,可能就是从这里来的吧.^_^ 里面的答案没有细看,SQL求解重在思路,很多时候同一种结果可能有多种写法,比如题中的各科成绩取前 ...