zoukankan      html  css  js  c++  java
  • mybatis(5)参数传递

    mybatis的参数传递

     主要的参数传递分为:

    1.一个普通数据类型

    当一个方法中只有一个普通数据类型。在mapper配置文件中可以使用#{}占位符来进行占位输出。

    #{} 占位符中,可以写参数的 #{变量名}。 也可以写 #{value}。

    2.多个普通数据类型

    多个普通的参数。当我们需要使用 #{} 占位输出的时候,可以使用

    param1,param2 …… paramN

    也就是 #{param1} …… #{paramN}

    或者使用@Param命名参数

    3.Map对象

    当我们的参数为map对象的时候。我们可以使用 map对象的key来做为占位符,输出数据。

    #{map的key} 来做为占位符的输出

    4.一个pojo数据类型

    当方法的参数是一个复杂类型的对象的时候。我们可以使用 对象的属性名。当成占位符的名称。比如:#{ 属性名 }

     5.多个pojo数据类型

    当有多个复杂pojo对象做为参数传递给方法使用时候。我们要取出数据做为sql的参数。可以使用如下方式:

    #{param1.属性名}

    ……

    #{paramN.属性名}

     

    也可以使用@Param命名参数。给每个pojo对象起一个别名。然后再通过 #{别名.属性名} 的方式取出数据值做为参数使用。

     

    package com.mapper.test;
    
    import static org.junit.Assert.*;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.jdbc.SQL;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    import com.mapper.UserMapper;
    import com.pojo.User;
    
    public class UserMapperTest {
    
        static SqlSessionFactory sqlSessionFactory;
    
        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources
                    .getResourceAsStream("mybatis-config.xml"));
        }
    
        @Test
        public void testQueryUserById() {
            SqlSession session = sqlSessionFactory.openSession();
            try {
    
                UserMapper mapper = session.getMapper(UserMapper.class);
                System.out.println(mapper.queryUserById(1));
    
            } finally {
                session.close();
            }
        }
    
        @Test
        public void testQueryUsersByNameOrSex() {
            SqlSession session = sqlSessionFactory.openSession();
            try {
    
                UserMapper mapper = session.getMapper(UserMapper.class);
                mapper.queryUsersByNameOrSex("bbb", 1).forEach(System.out::println);
    
            } finally {
                session.close();
            }
        }
        
        @Test
        public void testQueryUsersByMap() {
            SqlSession session = sqlSessionFactory.openSession();
            try {
                
                UserMapper mapper = session.getMapper(UserMapper.class);
                Map<String, Object> paramMap = new HashMap<String, Object>();
                
                paramMap.put("name", "bbb");
                paramMap.put("sex", 1);
                
                mapper.queryUsersByMap(paramMap).forEach(System.out::println);
                
            } finally {
                session.close();
            }
        }
        
        @Test
        public void testUpdateUser() {
            SqlSession session = sqlSessionFactory.openSession();
            try {
                
                UserMapper mapper = session.getMapper(UserMapper.class);
    
                mapper.updateUser(new User(9, "aaa", 1));
                
                session.commit();
            } finally {
                session.close();
            }
        }
        
        @Test
        public void testQueryUsersByTwoUsers() {
            SqlSession session = sqlSessionFactory.openSession();
            try {
                
                UserMapper mapper = session.getMapper(UserMapper.class);
                
                mapper.queryUsersByTwoUsers(new User(null, "bbb", null), new User(null, null, 1)).forEach(System.out::println);
                
            } finally {
                session.close();
            }
        }
        
        @Test
        public void testQueryUsersLikeName() {
            SqlSession session = sqlSessionFactory.openSession();
            try {
                
                UserMapper mapper = session.getMapper(UserMapper.class);
                
                String name = "bb";
                
                mapper.queryUsersLikeName(name).forEach(System.out::println);
                
            } finally {
                session.close();
            }
        }
    
    }
    <?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 namespace="com.mapper.UserMapper">
    
        <!-- 
            public User queryUserById(Integer id);
            当方法的参数类型是一个普通数据类型的时候,
            那么sql语句中配置的占位符里,可以写上参数名:#{id}
         -->
        <select id="queryUserById" resultType="com.pojo.User">
            select id,last_name lastName,sex from t_user where id = #{id}
        </select>
    
    <!--     /** -->
    <!--      *     根据用户名和性别查询用户信息 -->
    <!--      */ -->
    <!--     public List<User> queryUsersByNameOrSex(String name, Integer sex);
            当方法参数是多个普通类型的时候。我们需要在占位符中写入的可用值是:0,1,param1,param2
            
            0             表示第一个参数(不推荐使用)
            1             表示第二个参数 (不推荐使用)
            param1        表示第一个参数(推荐使用)
            param2      表示第二个参数(推荐使用)
            paramN        表示第n个参数(推荐使用)
     -->
    <!--     <select id="queryUsersByNameOrSex" resultType="com.pojo.User"> -->
    <!--         select id,last_name lastName,sex from t_user where last_name = #{param1} or sex = #{param2} -->
    <!--     </select> -->
    
        <!-- 
                public List<User> queryUsersByNameOrSex(@Param("name") String name,
                @Param("sex") Integer sex);
                当方法有多个参数的时候,我们可以使用mybatis提供的注解@Param来对方法的参数进行命名。
                全名之后的使用。如下:
                @Param("name") String name            ====使用>>>>                #{name}
                @Param("sex") Integer sex            ====使用>>>>                #{sex}
                
                使用了@Param之后,原来的0,1就不能再使用了。
                但是Param1,和param2,可以使用。
         -->
        <select id="queryUsersByNameOrSex" resultType="com.pojo.User">
            select id,last_name lastName,sex from t_user where last_name = #{0} or sex = #{1}
        </select>
        
    <!--     /** -->
    <!--      * 希望Map中传入姓名和性别信息,以做为查询条件。 -->
    <!--      */ -->
    <!--     public List<User> queryUsersByMap(Map<String, Object> paramMap); 
            当我们方法的参数类型是Map类型的时候,注意。
            在配置的sql语句的占位符中写的参数名一定要和Map的key一致对应。
            
            last_name = #{name}             <<<<========>>>        paramMap.put("name","bbb");    
            sex = #{sex}                    <<<<========>>>        paramMap.put("sex",1);    
    -->
        <select id="queryUsersByMap" resultType="com.pojo.User">
            select id,last_name lastName,sex from t_user where last_name = #{name} or sex = #{sex}
        </select>
        
    <!--     public int updateUser(User user)
            如果传入的参数是一个javaBean的时候,占位符中,要写上javaBean的属性名。
            
            JavaBean属性                                sql中的占位符
        private Integer id;                                #{id}
        private String lastName;                        #{lastName}
        private Integer sex;                            #{sex}
            
     -->
        <update id="updateUser" parameterType="com.pojo.User">
            update 
                t_user 
            set 
                last_name=#{lastName},
                sex=#{sex}
            where 
                id=#{id}
        </update>
        
        
    <!--         /** -->
    <!--      *     要求使用第一个User对象的lastName属性,和第二个User对象的sex属性来查询用户信息。 -->
    <!--      */ -->
    <!--     public List<User> queryUsersByTwoUsers(User name,User sex);
    
            如果你是多个JavaBean类型的时候,第一个参数是param1,第二个参数是param2.以此类推第n个参数就是paramN
            当然你也可以使用@Param来规定参数名。
            
            如果你想要的只是参数对象中的属性,而需要写成为如下:
                #{参数.属性名} 
            last_name ======== #{param1.lastName}  
            sex ========= #{param2.sex} 
     -->
        <select id="queryUsersByTwoUsers" resultType="com.pojo.User">
            select id,last_name lastName,sex from t_user where last_name = #{param1.lastName} or sex = #{param2.sex} 
        </select>
        
    <!--         /** -->
    <!--      * 根据给定的名称做用户名的模糊查询 -->
    <!--      */ -->
    <!--     public List<User> queryUsersLikeName(String name);
                #{}    是占位符
                ${} 是把参数的值原样输出到sql语句中,然后做字符串的拼接操作
     -->
        <select id="queryUsersLikeName" resultType="com.pojo.User">
            select id,last_name lastName,sex from t_user where last_name like concat('%',#{name},'%')
        </select>
        
        
        
        
    </mapper>
  • 相关阅读:
    JDK源码学习之 java.util.concurrent.automic包
    本地工程引入maven工程的配置方式
    JAVA配置&注解方式搭建简单的SpringMVC前后台交互系统
    Spring常用注解简析
    HTTP/HTTPS GET&POST两种方式的实现方法
    【JS语法】作用域与绑定图示
    【编程范式】函数式基础图示
    【技术思维】写好你的博客
    在Nginx服务器上用Jenkins发布Vue/React代码的步骤
    React事件绑定总结
  • 原文地址:https://www.cnblogs.com/ywqtro/p/12242715.html
Copyright © 2011-2022 走看看