zoukankan      html  css  js  c++  java
  • mybatis框架中的输入映射

      mybatis.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。

    输入类型:

    1.传递简单类型

      可以参考我之前的对于数据库增删改查的博文。

    2.传递po对象

      mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。

      如:

    <insert id="insertUser" parameterType="com.huida.po.User">
            <!-- selectKey将主键返回,需要再返回 -->
            <!-- keyProperty:将返回的主键放入传入参数的id中保存。也就是最后的结果通过id保存起来
                order:当前函数相对于insert语句的执行顺序,在insert前执行的是before,在insert之后执行的是after
                resultType:id的类型
             -->
            <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
                select LAST_INSERT_ID()
            </selectKey>
            insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
        </insert>

    3. 传递po包装对象

      开发中通过po传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件,还包括其他的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。

      po类中包含po对象。

    需求:根据用户名和性别查询用户信息,查询条件放到QueryVo的user属性中。

    4. vo包是使用在开发层的,也就是Web层,用于从表单接收数据,然后进行查询,所以这里我们创建vo包,在vo包下创建QueryVo类。

    package com.huida.vo;
    
    import com.huida.po.User;
    
    public class QueryVo {
    
        private User user;
    
        public User getUser() {
            
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
        
    }

    5. 在UserMapper接口中定义函数:

      public List<User> findUserByVo(QueryVo vo);

    6. 在UserMapper.xml中的配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- mapper接口代理实现编写规则:
    1.映射文件中namespace要等于接口的全路径
    2.通过sql语句实现数据库的操作
    3.映射文件中sql语句id要等与于接口的方法名称
    4.映射文件中传入参数类型要等于接口方法的传入参数类型
    5.映射文件中返回结果集类型要等于接口方法的返回值类型
     -->
    <mapper namespace="com.huida.mapper.UserMapper">
        
        <!--如果传入的参数为引用型类型,连接符的花括号里写:“属性.属性.属性”一直到头 -->
        <select id="findUserByVo" parameterType="com.huida.vo.QueryVo" resultType="com.huida.po.User">
            <!-- 多个对象封装的时候,属性名为属性.属性 -->
            select * from user where username like "%${user.username}%" and sex=#{user.sex}
        </select>
        
    </mapper>

    7.测试方法

    @Test
        public void testfindUserByVo(){
            //创建SqlSession
            SqlSession openSession=factory.openSession();
            //通过会话的getMapper方法来实例化接口(实现类的对象)
            UserMapper userMapper=openSession.getMapper(UserMapper.class);//参数放接口的字节码文件
            QueryVo vo=new QueryVo();
            User user=new User();
            user.setSex("2");
            user.setUsername("aa");
            vo.setUser(user);
            List<User> list=userMapper.findUserByVo(vo);
            System.out.println(list);
            
        }

    8。数据库表格如下,根据我们的查询条件,我们最终会查询到两条记录。

    .

    控制台输出结果为:

  • 相关阅读:
    ftp 传文件完整代码(二)
    生成文件 权限 以及ftp 传数据(一)
    定时任务配置
    发送电子邮件遇到问题
    mysql 主从分离配置
    知道开始时间结束时间 计算这之间一共多少天
    mysql 语句集(二)
    mysql 的sql文件导出导入
    mysql 批量添加 更新
    Spring Boot中如何干掉if else
  • 原文地址:https://www.cnblogs.com/wyhluckdog/p/10155153.html
Copyright © 2011-2022 走看看