Mybatis的输入映射和输出映射
一、输入映射
通过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的输入映射和输出映射的更多相关文章
- 【mybatis深度历险系列】mybatis中的输入映射和输出映射
		
在前面的博文中,小编介绍了mybatis的框架原理以及入门程序,还有mybatis中开发到的两种方法,原始开发dao的方法和mapper代理方法,今天博文,我们来继续学习mybatis中的相关知识,随 ...
 - Mybatis学习总结(四)——输入映射和输出映射
		
在前面几篇文章的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...
 - MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询
		
一.输入映射和输出映射 1. parameterType(输入类型) 1.1 传递简单类型 <select id="getUserById" parameterType=&q ...
 - 【MyBatis学习06】输入映射和输出映射
		
在前面几篇博文的例子中也可以看到mybatis中输入映射和输出映射的身影,但是没有系统的总结一下,这篇博客主要对这两个东东做一个总结.我们知道mybatis中输入映射和输出映射可以是基本数据类型.ha ...
 - (七)mybatis 的输入映射与输出映射
		
目录 前言 输入映射 - - 传递 pojo 包装类型 (复杂查询 ) 输出映射 - - resultType 输出映射 - - resultMap 前言 通过 paramterType 指定输入参数 ...
 - mybatis入门基础(四)----输入映射和输出映射
		
一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 1.1.1.需求描述 完成用户信息的综合查询, ...
 - Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射
		
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6878529.html 前面有讲到Spring+SpringMVC+MyBatis深入学习及搭建(三)——My ...
 - mybatis基础系列(二)——基础语法、别名、输入映射、输出映射
		
增删改查 mapper根节点及其子节点 mybatis框架需要读取映射文件创建会话工厂,映射文件是以<mapper>作为根节点,在根节点中支持9个元素,分别为insert.update.d ...
 - mybatis进阶--输入映射和输出映射
		
我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型.那么这些类型都是怎么配置的呢?今天我们来一起学习下. 输入映 ...
 - mybatis进阶--mapper输入映射和输出映射
		
我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型.那么这些类型都是怎么配置的呢?今天我们来一起学习下. 输入映 ...
 
随机推荐
- Android-ListView-(BaseAdapter初步)
			
在Android中就提供了专门列表显示条目的控件,ListView控件,ListView控件不是一次性加载全部数据,他是只加载用户在屏幕看得到的数据,当用户滑动的过程中在去加载新的数据,同时会自动销毁 ...
 - Nutch2.2.1,window,eclipse,安装
			
教程:https://app.yinxiang.com/shard/s12/sh/36b8e911-2d0e-4ee4-b34f-a426c6dc99c2/9543f94cd8abf12b4b9857 ...
 - GridView中文属性
			
GridControl的中文属性: 1 Appearance 外观 Appearance 外观设置 ColumnFilterButton 行过滤器按钮 BackerColor 背景色 Backe ...
 - codeVS 动态最大子段和
			
题目链接:戳我 对于最大子段和,我们只需要维护四个变量--maxl,maxr,maxs,sum(分别表示区间最大前缀子段和,区间最大后缀子段和,区间最大子段和,区间所有数的和) 然后合并的时候是这样的 ...
 - 修改cmd默认启动路径
			
1.打开注册表编辑器(WIN+R打开运行.输入regedit,或者直接找到路径,双击打开C:\Windows\regedit.exe): 2.定位到“HKEY_CURRENT_USER\Softwar ...
 - maven 引入外部jar包
			
方式1:dependency 本地jar包 <dependency> <groupId>com.hope.cloud</groupId> <!--自定义--& ...
 - ZJOI round1游记
			
Day 0 到镇海报道了 大佬们太多了--话说镇海的晚饭还真好吃啊-- 听说某人要咱去找bwh--不过咱和他也不是很熟啊--还是算了吧--(才不是因为嫌麻烦懒得去呢) 晚上吃完晚饭之后在镇海校园里参观 ...
 - ObjectARX二次开发创建自己的静态库,如同objectARX库一样
			
objectARX二次开发的时候,经常会用到一些重复使用的类,如果类已经足够的好,那么我们可以编译成静态库,加快开发和编译的速度,提高工作效率. 环境vs2010+objectARX2012wizar ...
 - PHP程序执行流程
			
1, PHP文件一定放在服务器的,但是PHP中不同的内容会在不同的地方执行.下图演示了浏览器请求一个php页面的流程. 2,时序图如下所示,在浏览器中输入url后,首先去本机hosts文件中解析ip地 ...
 - NFS共享服务
			
一.网络文件系统共享服务 NFS( Network File System,网络文件系统 )是一种基于TCP/IP传输的网络文件系统协议,最初由SUN公司开发,通过使用NFS协议,客户机可以像访问本地 ...