一、输入映射

  通过parameterType指定输入参数类型,类型可以是简单类型、HashMap、pojo的包装类型。

  1、简单类型

  映射文件:

<!--
查询sql语句配置使用select标签
id:该语句的唯一标识,通常称为statement的id
parameterType:输入参数的类型
resultType:返回数据的类型,指定为Java的po类型,则将查询出来的单条记录映射为po对象。
-->
<select id="findUserById" parameterType="int" resultType="com.jack.po.User" >
<!--
要执行的sql语句
#{} :表示一个占位符
#{value} :value表示接受的参数,名称为value,如果参数是简单类型,则名称可以随意起。
-->
SELECT * FROM user WHERE id=#{value}
</select>

  接口文件:

 //根据id查询用户的接口
public User findUserById(int id) throws Exception;

  测试文件:

public void findUserById(){
//创建SqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
try {
/**
* 执行SqlSession对象的方法
* 第一个参数为:映射文件中的namespace+.+statement id
* 第二个参数为:要传入的参数值
*/
User user = sqlSession.selectOne("test.findUserById",1);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}finally { }
}

  2、HashMap类型

  映射文件:

<select id="findUserByHm" parameterType="java.util.HashMap" resultType="com.jack.po.User" >
<!--
要执行的sql语句
#{} :表示一个占位符
#{id} :id表示HashMap中的key
-->
SELECT * FROM user WHERE id=#{id}
</select>

  接口文件:

 //根据id查询用户的接口
public User findUserByHm(HashMap hashMap) throws Exception;

  测试文件:

 public void findUserByHm(){
SqlSession sqlSession = sessionFactory.openSession();
try {
HashMap<String,Integer> hashMap = new HashMap<>();
hashMap.put("id",10);
User user = sqlSession.selectOne("test.findUserByHm",hashMap);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}finally { }
}

 3、pojo类型:###

  pojo文件:

public class UserVo {
private User user;
private Shop shop; @Override
public String toString() {
return "UserVo{" +
"user=" + user +
", shop=" + shop +
'}';
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public Shop getShop() {
return shop;
} public void setShop(Shop shop) {
this.shop = shop;
}
}

  映射文件:

<select id="findUserByShop" parameterType="com.jack.po.UserVo" resultType="com.jack.po.User">
<!--
#{}中的值为parameterType类型中属性对象中的属性值
-->
SELECT t1.* FROM user t1,shop t2 WHERE t1.id = t2.user_id AND t2.sid = #{shop.id}
</select>

  接口文件:

   //根据商品id查询用户的接口
public User findUserByShop(UserVo userVo) throws Exception;

  测试文件:

 public void findUserByShop(){
SqlSession sqlSession = sessionFactory.openSession();
try {
UserVo userVo = new UserVo();
Shop shop = new Shop();
shop.setId(1);
userVo.setShop(shop);
User user = sqlSession.selectOne("test.findUserByShop",userVo);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}finally { }
}

二、输出映射

  通过resultType指定输出参数类型,只有查询出来的列名和pojo中的属性名一致时,该列才可以和Java对象映射成功。

  如果查询出来的列名和pojo中的属性名称全部不一致,则不会创建pojo对象。

  只有查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。

  如果查询出来的列名中有和属性名称不一致的,则该列不会和pojo的属性进行映射。

  1、简单类型

  映射文件:

 <select id="findUserCountByName" parameterType="String" resultType="int">
SELECT count(1) FROM user WHERE username LIKE '%${value}%'
</select>

  接口文件:

//根据用户名查询用户数量
public int findUserCountByName(String name) throws Exception;

  测试文件:

  public void findUserCountByName(){
SqlSession sqlSession = sessionFactory.openSession();
try {
int count = sqlSession.selectOne("test.findUserCountByName","小明");
System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
}finally { }
}

  2、pojo类型

  映射文件:

  <select id="findUserByName" parameterType="String" resultType="com.jack.po.User">
SELECT * FROM user WHERE username LIKE '%${value}%'
</select>

  接口文件:

//根据用户名查询用户
public List<User> findUserByName(String name) throws Exception;

  测试文件:

 public void findUserByName(){
SqlSession sqlSession = sessionFactory.openSession();
try {
List<User> list = sqlSession.selectList("test.findUserByName","小明");
for (User user:list) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
}finally { }
}

  3、resultMap类型

  pojo文件:

public class UserVo {
private User user;
private Shop shop; @Override
public String toString() {
return "UserVo{" +
"user=" + user +
", shop=" + shop +
'}';
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public Shop getShop() {
return shop;
} public void setShop(Shop shop) {
this.shop = shop;
}
}

  映射文件:

 <!--
id:resultmap的唯一标识。
type:返回的POJO结果类型
-->
<resultMap id="VoMap" type="com.jack.po.UserVo">
<!--
id表示查询结果中的唯一标识
column:查询出来的列名
property:POJO中的对象属性名称
-->
<id column="id" property="user.id" />
<!--
result表示查询结果中的普通列
column:查询出来的列名
property:POJO中的对象属性名称
-->
<result column="username" property="user.username"/>
<result column="birthday" property="user.birthday"/>
<result column="sex" property="user.sex"/>
<result column="address" property="user.address"/>
<result column="sid" property="shop.sid"/>
<result column="name" property="shop.name"/>
<result column="price" property="shop.price"/>
</resultMap>
<select id="findVoByShop" parameterType="com.jack.po.UserVo" resultMap="VoMap">
<!--
#{}中的值为parameterType类型中属性对象中的属性值
--> SELECT t1.* ,t2.* FROM user t1,shop t2 WHERE t1.id = t2.user_id AND t1.id = #{user.id}
</select>

  接口文件:

//根据商品id查询用户和商品的接口
public List<UserVo> findVoByShop(UserVo userVo) throws Exception;

  测试文件:

    public void findVoByShop(){
SqlSession sqlSession = sessionFactory.openSession();
try {
UserVo userVo = new UserVo();
User user = new User();
user.setId(10);
userVo.setUser(user);
List<UserVo> userVo1 = sqlSession.selectList("test.findVoByShop",userVo);
for (UserVo uservo: userVo1
) {
System.out.println(uservo);
}
} catch (Exception e) {
e.printStackTrace();
}finally { }
}

Mybatis的输入映射和输出映射的更多相关文章

  1. 【mybatis深度历险系列】mybatis中的输入映射和输出映射

    在前面的博文中,小编介绍了mybatis的框架原理以及入门程序,还有mybatis中开发到的两种方法,原始开发dao的方法和mapper代理方法,今天博文,我们来继续学习mybatis中的相关知识,随 ...

  2. Mybatis学习总结(四)——输入映射和输出映射

    在前面几篇文章的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...

  3. MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询

    一.输入映射和输出映射 1. parameterType(输入类型) 1.1 传递简单类型 <select id="getUserById" parameterType=&q ...

  4. 【MyBatis学习06】输入映射和输出映射

    在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...

  5. (七)mybatis 的输入映射与输出映射

    目录 前言 输入映射 - - 传递 pojo 包装类型 (复杂查询 ) 输出映射 - - resultType 输出映射 - - resultMap 前言 通过 paramterType 指定输入参数 ...

  6. mybatis入门基础(四)----输入映射和输出映射

    一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 1.1.1.需求描述 完成用户信息的综合查询, ...

  7. Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6878529.html 前面有讲到Spring+SpringMVC+MyBatis深入学习及搭建(三)——My ...

  8. mybatis基础系列(二)——基础语法、别名、输入映射、输出映射

    增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...

  9. mybatis进阶--输入映射和输出映射

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

  10. mybatis进阶--mapper输入映射和输出映射

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

随机推荐

  1. windows包管理工具和 ssh安装

    Chocolatey windows下的包管理工具 https://chocolatey.org/ cmd里执行 @"%SystemRoot%\System32\WindowsPowerSh ...

  2. 疑难杂症--已停止运行DBCC造成阻塞

    场景数据库因非法断电导致出现分配页上不一致,运行完DBCC CHECKDB后出现以下错误: 表错误: 表 't_pc_id' (ID 277576027).数据行在索引 'last_login_dat ...

  3. ref 和 out 的用法和区别以及params用法

    方法参数可以划分为一下四种类型1 值参数:声明时不含任何修饰符2 引用参数:以ref修饰符声明3 输出参数:以out修饰符声明4 参数数组:以params修饰符声明 引用参数和输出参数不创建新的存储位 ...

  4. [NetCore学习记录]第一章.使用netcore撸个简单的增删改查

    1.引言 2.解决方案各部分介绍图 3.添加数据模型 4.添加数据库上下文 5.修改配置文件 6.使用依赖关系注入容器注册数据库上下文 7.添加基架工具并执行初始迁移 1.引言 NetCore出来有一 ...

  5. 用Docker自动构建纸壳CMS

    纸壳CMS可以运行在Docker上,接下来看看如何自动构建纸壳CMS的Docker Image.我们希望的是在代码提交到GitHub以后,容器镜像服务可以自动构建Docker Image,构建好以后, ...

  6. Spring各个jar包详解

    Spring各jar包详解 spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar,aspects.jar, spring-portlet.jar, and sprin ...

  7. DI 依赖注入之StructureMap框架

    DI  依赖注入之StructureMap框架 一.简叙: structureMap只是DI框架中的其中之一. 二.安装及使用: 1.懒人方法: 使用MVC5项目时,可以直接在nuget程序包中安装S ...

  8. Java反射机制与工厂模式

    工厂模式属于创建型模式,它提供了一种创建对象的最佳方式. 它的特点是:客户端的程序类不直接牵扯到对象的实例化管理,只与接口发生关联,通过工厂类获取指定接口的实例化对象. 简单工厂模式如下: inter ...

  9. “全栈2019”Java第三十六章:类

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. [Winter Vacation] 语文实词虚词练习册答案

    下载通道: [120个文言文实词小故事] [18个文言文虚词小故事] 120个文言文实词小故事 爱   楚人爱(宠爱)其子,虽爱(吝惜)钱财,于其子之求而无不应.其子成人,有陶氏之风独爱(喜爱)菊,众 ...