MyBatis输入映射和输出映射实例详解

什么是 MyBatis ?

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

我们知道,mapper.xml是我们配置操作数据库的sql语句的地方。其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型。那么这些类型都是怎么配置的呢?今天我们来一起学习下。

输入映射

首先是输入类型,输入类型分为以下几种:1.基本类型。2.pojo对象类型。3.pojo包装对象。所谓的包装对象,可以理解为,一个对象里面包含着另外一个对象。

   简单类型

简单输入类型,比较简单。在传入参数的时候,直接将参数类型配置到parameterType中,代码如下:

 <select id="findUserById" parameterType="int" resultType="cn.itcast.pojo.User">
 SELECT * FROM user where id=#{id}
 </select>

其中的sql语句内的占位符或者拼接符中的内容可以随意书写,没有实际意义。不过建议最好见名知意。以便于阅读。

  pojo对象

如果传入的是一个对象的话,那么情况就稍有不同了。除了传入类型需要是对象的类型(可以直接写类的全路径,也可以通过在sqlConfig.xml中配置别名的方式,配置类的别名)。还需要注意的是在sql语句的占位符上也需要将我们的内容对应我们的对象的属性值。代码如下:

<select id="findUserByUserName" parameterType="cn.itcast.pojo.User" resultType="cn.itcast.pojo.User">
 select * from user where username like'%${username}%'
</select>

这里的username必须对应User类中的属性。也就是说,在User类中必须有username的属性。而且我们在传入参数的时候,需要将user对象的username赋值。用于被mybatis框架解析。

在sqlConfig.xml中配置别名的方法:

<!-- 自定义别名 -->
 <typeAliases>
 <!-- 给单个pojo起别名: type:pojo的全路径名称, alias:别名 -->
<!-- <typeAlias type="cn.itcast.pojo.User" alias="user"/> -->
 <!-- 使用包扫描的方式将整个包下面的pojo起别名
  别名就是类名, 不区分大小写, 建议按照java的命名规则来写
 -->
 <package name="cn.itcast.pojo"/>
 </typeAliases>

pojo包装对象

如果传入对象是一个包含有另外一个对象的对象,也就是说传入对象是一个包装对象的时候,我们该怎么办呢?其实也差不多,就是将占位符或者连接符中的值改为对象.属性名具体代码如下:

首先是pojo对象的代码,我们可以看出,整个user对象都作为了queryVo对象的一个属性值了,其字段名称为user:

 package cn.itcast.pojo;
public class QueryVo {
 private User user;
 public User getUser() {
 return user;
 }
 public void setUser(User user) {
 this.user = user;
 }
}

然后是我们的映射文件,其中的${user.userneme}中,user和我们的QueryVo类中的user属性名称一致,而username对应的是User类中的username字段:

<select id="findUserByVo" parameterType="cn.itcast.pojo.QueryVo" resultType="cn.itcast.pojo.User">
 select * from user where username like'%${user.username}%' and sex =#{user.sex}
</select>

  输出映射

输出映射的配置和输入映射基本一致。首先是简单类型,mybatis中只有一种情况可以返回简单类型,那就是我们的sql语句返回值只有一条的时候。可以返回简单类型。

还有就是我们的pojo类型。我们的mybatis可以将返回的数据,封装成为一个pojo对象,但是,pojo的对象属性必须和我们的返回值的字段名一致。才可以封装进去。如果不一致仍然想封装,那么,就需要指定其对应关系。具体代码及注释如下:

<!-- 这里的userListResultMap对应的是resultMap的唯一标示符 -->
 <select id="findUserByVo" parameterType="cn.itcast.pojo.QueryVo" resultMap="userListResultMap">
 select * from user where username like'%${user.username}%' and sex =#{user.sex}
 </select>
 <!-- 这里的cn.itcast.pojo.User代表的是User类也就是最终生成对象的类型;userListResultMap是这个resultMap的唯一标示符 -->
 <resultMap type="cn.itcast.pojo.User" id="userListResultMap">
 <!-- 这里的id_是从数据库中查出的数据字段名称是主键;而id是我们的User对象中的属性 -->
 <id column="id_" property="id"/>
 <!-- 这里的result指的是其他字段 -->
 <result column="userneme_" property="username"/>
 </resultMap>

以上所述是小编给大家介绍的MyBatis输入映射和输出映射实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Java的MyBatis框架中关键的XML字段映射的配置参数详解

    properties 这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递.例如: <properties resource="org/mybatis/example/config.properties"> <property name="username" value="dev_user"/> <property name="pas

  • Mybatis中的高级映射一对一、一对多、多对多

    学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要的小伙伴有帮助,小编主要从四个方面进行介绍,订单商品数据模型.一对一查询.一对多查询.多对多查询. 一.订单商品数据模型 1.数据库执行脚本,如下所示: <span style="font-family:Comic Sans MS;font-size:18px;">CREATE

  • Mybatis实体类和表映射问题(推荐)

    本文是小编给大家带来的mybatis中实体类和表映射问题的知识,学习本教程能够快速帮助我们解决字段名与实体类属性名不相同的冲突问题,需要的朋友一起看看吧! 一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, order_price) VALUES('a

  • 详解Java的MyBatis框架中SQL语句映射部分的编写

    1.resultMap SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如: <mappers> <mapper resource="com/liming/manager/data/mappers/UserMapper.xml" /> <mapper resource="com/liming/mana

  • Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Mapper的内置方法 model层就是实体类,对应数据库的表.controller层是Servlet,主要是负责业务模块流程的控制,调用service接口的方法,在struts2就是Action.Service层主要做逻辑判断,Dao层是数据访问层,与数据库进行对接.至于Mapper是mybtis框架的映射用到,mapper映射文件在dao层用. 下面是介绍一下Mapper的内置方法: 1.countByExample ===>根据条件查询数量 int countByExample(UserE

  • MyBatis高级映射学习教程

    对mybatis基础入门不太清楚的朋友可以参考下本篇文章:MyBatis入门学习教程(一)-MyBatis快速入门. 认识MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架

  • 深入浅出MyBatis中映射文件和实体类的关联性

    mybatis的映射文件写法多种多样,不同的写法和用法,在实际开发过程中所消耗的开发时间.维护时间有很大差别,今天我就把我认为比较简单的一种映射文件写法记录下来,供大家修改建议,争取找到一个最优写法~~: 以User对象和UserMap.xml为例讲解,代码如下: User为用户实体类(仅作为讲解,可以只关注引用类型变量,get/set方法省略): import com.google.common.collect.Lists; import com.gukeer.common.persisten

  • Angular4的输入属性与输出属性实例详解

    本文实例讲述了Angular4的输入属性与输出属性.分享给大家供大家参考,具体如下: Angular4输入属性 输入属性通常用于父组件向子组件传递信息 举个栗子:我们在父组件向子组件传递股票代码,这里的子组件我们叫它app-order 首先在app.order.component.ts中声明需要由父组件传递进来的值 order.component.ts ... @Input() stockCode: string @Input() amount: string ... order.compone

  • mybatis防止SQL注入的方法实例详解

    SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见.究其原因不外乎:No patch for stupid.为什么这么说,下面就以JAVA为例进行说明: 假设数据库中存在这样的表: table user( id varchar(20) PRIMARY KEY , name varchar(20) , age varchar(20) ); 然后使用JDBC操作表: private String getNameByUserId(String userId) { Connection conn

  • MyBatis 动态SQL和缓存机制实例详解

    有的时候需要根据要查询的参数动态的拼接SQL语句 常用标签: - if:字符判断 - choose[when...otherwise]:分支选择 - trim[where,set]:字符串截取,其中where标签封装查询条件,set标签封装修改条件 - foreach: if案例 1)在EmployeeMapper接口文件添加一个方法 public Student getStudent(Student student); 2)如果要写下列的SQL语句,只要是不为空,就作为查询条件,如下所示,这样

  • Spring + Mybatis 项目实现动态切换数据源实例详解

    项目背景:项目开发中数据库使用了读写分离,所有查询语句走从库,除此之外走主库. 最简单的办法其实就是建两个包,把之前数据源那一套配置copy一份,指向另外的包,但是这样扩展很有限,所有采用下面的办法. 参考了两篇文章如下: http://www.jb51.net/article/111840.htm http://www.jb51.net/article/111842.htm 这两篇文章都对原理进行了分析,下面只写自己的实现过程其他不再叙述. 实现思路是: 第一步,实现动态切换数据源:配置两个D

  • python字符串的多行输出的实例详解

    1.字符串的每行末尾使用 \ 续行 以多行的形式书写字符串,每行的末尾使用 \ 续行.需要注意输出内容为一行. >>> string = '第一行\ - 第二行\ - 第三行' >>> print(string) '第一行第二行第三行' 2.使用三个单引号或三个双引号来表示字符串 在 Python 中字符串也可以使用三个单引号或三个双引号来表示字符串,这样字符串中的内容就可以多行书写,并且被多行输出. 使用三引号的方式,字符串可被多行书写,且被多行输出,其中不需要显式地

  • Python实现格式化输出的实例详解

    目录 一.format格式输出字符串 二.format格式输出字符串实例 实例1.网站名称 实例2.数值格式化为不同的形式 实例3.{}中不设参数 实例4. {}中设参数 实例5.str.format() 格式化数字 三.%格式化输出实例 实例3.1.整数的输出 实例3.2. 浮点数输出 实例3.3.字符串输出 实例3.4.格式化输出用户信息 四.完整程序 一.format格式输出字符串 使用 % 操作符对各种类型的数据进行格式化输出,这是早期 Python提供的方法. 字符串类型(str)提供

  • Spring Boot 集成 Mybatis Plus 自动填充字段的实例详解

    一般在表设计的时候,都会在表中添加一些系统字段,比如 create_time.update_time等. 阿里巴巴开发手册中也有这样的提示,如果对于这些公共字段可以进行统一处理,不需要每次进行插入或者更新操作的时候 set 一下,就可以提高开发效率,解放双手. 加入依赖 下面就通过 MyBatis Plus 来完成字段自动填充,首先加入 MyBatis Plus 依赖: <dependency>     <groupId>com.baomidou</groupId>  

  • C++面向行输入之get()与getline()实例详解

    目录 getline() get() 差异 可能出现问题 关于string使用getline() 总结 引入: char a = 's';//这样的语句合法 char b = "s";//不合法 /* "S"不是字符常量,他表示两个字符(S和\0)组成的字符串. 并且"S"表示的的是字符串所在的内存地址,相当于将一个内存地址赋给b */ cin使用空格.制表符.换行符来确定字符串的结束位置,这意味着cin在获取字符数组时只读取一个单词.读取该单词

  • MyBatis输入映射和输出映射实例详解

    什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的

  • Mybatis映射文件实例详解

     一.输入映射 parameterType 指定输入参数的Java类型,可以使用别名或者类的全限定名.它可以接收简单类型.POJO.HashMap. 1.传递简单类型 根据用户ID查询用户信息: <select id="findUserById" parameterType="int" resultType="com.itheima.mybatis.po.User"> SELECT * FROM USER WHERE id =#{id

随机推荐