精华内容
下载资源
问答
  • MyBatis参数传递

    2020-06-15 20:39:45
    MyBatis参数传递 – 笔记   MyBatis对参数的处理         单个参数:#{参数名}:取出参数值         多个参数:...

    MyBatis参数传递

      MyBatis对参数的处理
            单个参数:#{参数名}:取出参数值
            多个参数:MyBatis会将多个参数封装成一个map
                       #{Key}就是从map中获取key值
                       key:param1…param2…paramN
                       value:传入的参数值

    例:

    	<select id="getUserIdAndName" resultType="com.java.mybatis.bean.User">
    		select * from user where id = #{param1} and name = #{param2}
    	</select>
    

    在多个参数传递时,可以命名参数
            命名参数:指定封装参数时map的key
    例:

    public interface UserMapper {
            public User getUserIdAndName(@Param("id") Integer id, @Param("name") String name);
    }
    
    	<select id="getUserIdAndName" resultType="com.java.mybatis.bean.User">
    		select * from user where id = #{id} and name = #{name}
    	</select>
    
    展开全文
  • Mybatis参数传递

    千次阅读 2020-01-08 18:07:16
    Mybatis参数 参数处理 单参数Mybatis会直接去除参数值给Mapper文件赋值:#{name} 传递多个参数(Mybatis会自动封装到Map集合中) Collection,List,Array作为参数的,封装为Map ...

    Mybatis参数

    参数处理

    • 单参数Mybatis会直接去除参数值给Mapper文件赋值:#{name}
    • 传递多个参数(Mybatis会自动封装到Map集合中)
    • Collection,List,Array作为参数的,封装为Map

    参数处理形式详解

    • 单参数MyBatis会直接取出参数值,然后给Mapper文件赋值如: #{name}
    • 多参数: 1 ) Map接口2 )注解@param 3) JavaBean传递参数
    • 集合 :在Mapper接口方法入参处使用@ param进行标注

    创建数据库,数据库有 int id,String name,String email,String gender
    实体类

    public class Person {
    	private Integer id;
    	private String username;
    	private String email;
    	private String gender;
    	private Dept dept;
    	public Person() {}
    	 
    	public Person(String username, String email, String gender,
    			Dept dept) {
    		this.id = id;
    		this.username = username;
    		this.email = email;
    		this.gender = gender;
    		this.dept = dept;
    	}
    	public Person(String username, String email, String gender) {
    		this.id = id;
    		this.username = username;
    		this.email = email;
    		this.gender = gender;
    	}
    	public Person(String username, String gender) {
    		this.username = username;
    		this.gender = gender;
    	}
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getGender() {
    		return gender;
    	}
    	public void setGender(String gender) {
    		this.gender = gender;
    	}
    	@Override
    	public String toString() {
    		return "Person [id=" + id + ", username=" + username + ", email="
    				+ email + ", gender=" + gender + "]";
    	}
    }
    

    我们看下代码

    单参数传递值

    PersonInterfaceMapper.java

    public interface PersonMapper {
        public void deletePerson(Integer id);
    }
    

    PersonInterfaceMapper.xml

     <delete id="deletePerson" parameterType="Integer">
             delete from person where id =#{id}
    </delete>
    

    测试通过

    多参数传值(3种方式)

    JavaBean的方式传入

    PersonInterfaceMapper.java

    public interface PersonMapper {
       public Person getPersonSelect(String username, String gender)
    }
    

    PersonInterfaceMapper.xml

     <select id="getPersonSelect"  resultType="person">
            select * from person where username=#{param1} and gender=#{param2}
        </select>
    

    注意:这里要注意的是,因为我们传值是String username, String gender多参数传入,会出现映射文件无法获得传入的参数 ,运行会报错,提示需要传入的是arg0,arg1,param1,param2,所以我们在配置映射文件的时候需要注意

    1:解决方法:@param

     //public Person getPersonSelect(String username, String gender)进行替换成下面的代码
    public Person getPersonByNameAndGender(@Param("username")String username,@Param("gender")String gender);
    

    那么我们的映射文件就可以直接

      select * from person where username=#{username} and gender=#{gender}
    

    **在下面这种情况,其中一个参数没有进行@Param(“gender”)进行注解 **

    public Person getPersonSelect(@Param("username")String username,String gender);
    

    我们在配置的时候就应该,使用Mybatis提供的参数替代(arg0,arg1,param1,param2)

    select * from person where username = #{username} and gender = #{param2}
    

    2:解决方法:以实体类对象作为参数

    PersonInterfaceMapper.java

     public Person getPerson(Person person);
    

    PersonInterfaceMapper.xml

    <select id="getPerson" resultType="person">
            select * from person where username=#{username} and gender=#{gender}
    </select>
    

    3:解决方法:以Map作为参数

    PersonInterfaceMapper.java

    public Person  getPerson(Map<String,Object>param);
    

    PersonInterfaceMapper.xml

    <select id="getPerson" resultType="person">
            select * from person where username=#{name} and gender=#{gender}
    </select>
    

    测试代码

     Map<String,Object> param=new HashMap<String, Object>();
     param.put("name","admin");
     param.put("gen","t");
    

    使用Map方式传递,Map的Key值可以自定义,username=#{name} and gender=#{gen},我们在配置映射文件的时候直接传入自定义的Map的Kep值即可

    集合传值

    Collection

    PersonInterfaceMapper.java

    public Person getPerson(Collection list);
    

    PersonInterfaceMapper.xml

     <select id="getPerson" resultType="person">
            select * from person where id=#{collection[0]}
            <!--  select * from person where id=#{array[0]}-->
        </select>
    

    数组

    PersonInterfaceMapper.java

    public Person getPerson(int [] is);
    public Person getPerson2(@Param("pis")int [] is);
    

    PersonInterfaceMapper.xml

     <select id="getPerson" resultType="person">
                select * from person where id=#{array[0]}
     </select>
      <select id="getPerson2" resultType="person">
                select * from person where id=#{pis[0]}
     </select>
    

    List

    PersonInterfaceMapper.java

     public List<Person> getPerson(int[] ids);
    

    PersonInterfaceMapper.xml

    <select id="getPerson" resultType="person">
         select * from person where id in
         <foreach collection="array" item="id" index="i" open="(" close=")" separator=",">
        	 #{id}
         </foreach>
    </select>
    -->
    

    批量添加数据

    PersonInterfaceMapper.java

    //批量查询数据
     public int getAddPerson(@Param("persons") List<Person>persons);
     public void getAddPerson2                                                                                                                                           (Person person);
    

    PersonInterfaceMapper.xml

    <!--getAddPerson方法有两种方式可以实现-->
     <insert id="getAddPerson">
            insert into person(username,email,gender)values
            <foreach collection="persons" item="person" separator=",">
                (#{person.username},#{person.email},#{person.gender})
            </foreach>              
    </insert>
     <!--也可以使用下面这种方式separator=";"
     但是需要在jdbc:mysql://localhost:3306/mybatis中添加?allowMultiQueries=true
     也就是jdbc:mysql://localhost:3306/mybatis?allowMultiQueries=true 否则会报错
     <foreach collection="persons" item="person" separator=";">
             insert into person(username,email,gender)values
             (#{person.username},#{person.email},#{person.gender})
     </foreach>
    -->
    
    
    
    <insert id="addPerson">
            insert into person(username,email,gender)values(#{username},#{email},#{gender})
    </insert>
    

    Mybatis查询代码中我们用到了foreach元素
    foreach元素:
    ◆特点:循环遍历集合,支持数组和List、Set接口 ,对其提供遍历功能
    ◆应用:数据库中数据的内容,经常使用foreach元素确定查找
    ◆常用配置collection,item,index,open和close,separator

    展开全文
  • 主要给大家介绍了关于Mybatis参数传递的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Mybatis参数传递 一.单参数传递 接口中方法声明 对应的mapper 占位符中写任意参数名都可以传参成功 Mybatis对于单参数而言,是直接进行赋值的,不考虑具体的参数名对应关系 二.多参数传递 1.Mybatis对于多参数...

    Mybatis参数传递

    一.单参数传递

    接口中方法声明
    在这里插入图片描述
    对应的mapper
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    占位符中写任意参数名都可以传参成功
    Mybatis对于单参数而言,是直接进行赋值的,不考虑具体的参数名对应关系

    二.多参数传递

    1.Mybatis对于多参数传递的默认支持

    在这里插入图片描述
    如果mapper中参数直接写成接口中的形参,则会报错
    在这里插入图片描述
    在这里插入图片描述

    从报错中可以看出 会将对应的参数名转化为索引(arg0,arg1····)或是参数个数(param1,param2···)
    本例中 username对应arg0或param1 gender对应arg1或param2

    正确方式如下:
    在这里插入图片描述

    2.自定义参数传递

    如果不想使用上述Mybatis对于多参数的默认转化方式,有以下三种自定义方式

    (1) 封装pojo类

    将字段封装为pojo类
    形参直接写成类对象
    在这里插入图片描述
    在mapper中参数即可直接写成类中的字段名
    在这里插入图片描述
    在这里插入图片描述

    (2)封装Map

    参数个数少时,且没有javaBean,可以将参数封装为Map进行传参

    在这里插入图片描述
    在这里插入图片描述

    注意:
    mapper中的参数必须写成Map中对应的Key值 使用#{key}取出对应的value,否则传递失败

    在这里插入图片描述

    在这里插入图片描述

    (3)@param注解

    语法@param(value= “”)
    当使用@param注解时,MyBatis底层会自动将形参封装为Map,Map中的Key即为@param中的value值

    在这里插入图片描述
    在mapper中,同上述手动封装Map一致,使用#{Key}
    在这里插入图片描述

    多参数传递小结:

    1.map传递参数,业务可读性差
    2.参数个数n<5 使用@param
    3.n>5 使用javaBean

    三.参数为Collection、List、Array

    1.参数为Collection

    Mybatis会自动将Collection转化为Map Map的Key为collection

    在这里插入图片描述

    在这里插入图片描述

    2.参数为List

    如果参数为List接口,则占位符中既可以为collection 也可以写成list
    在这里插入图片描述

    在这里插入图片描述

    3.参数为Array

    同样转化为Map key为array 不可以使用collection
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  •  本章学习MyBatis参数传递的相关知识 方法 1.概念 在之前的例子中,我们在XXXMapper.xml中写入的查询语句都是查询全部,那么带有where语句的参数该如何传递呢?接下来讲解一下关于参数传递的问题。 2.方法 1)...

    前言

          本章学习MyBatis参数传递的相关知识

    方法

    1.概念

    在之前的例子中,我们在XXXMapper.xml中写入的查询语句都是查询全部,那么带有where语句的参数该如何传递呢?接下来讲解一下关于参数传递的问题。

    2.方法

    1)配置参数的类型

    在XXXMapper.xml配置查询方法的时候,属性parameterType为参数类型

    #{}获取参数内容

    • 使用索引:从0开始代表第一个参数,1第二个参数,以此类推;或使用param1代表第一个参数,以此类推
    • 使用具体的名称

    特别的:MyBatis3.4.4及之后的版本不可用#{0},#{1}获取参数,将使用#{arg0},#{arg1}

    在MyBatis中也可以使用${内容}来获取参数内容,不常用,知道即可

    #{}和${}最主要的区别在于:

    • #{}底层使用sql预处理,也就是使用了?作为占位符
    • ${}底层直接使用sql进行拼接,容易造成sql注入

    一个具体的例子如下:

    <?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代表实现类的全路径(包名+类名) -->
    <mapper namespace="cn.edu.ccut.mapper.StudentMapper">
        <!-- 该处每一个标签代表一个方法(select、insert、delete、update等),
            id为方法名,
            parameterType为参数类型,
            resultType为返回值类型
        -->
        <select id="doLogin" resultType="User" parameterType="String">
            select * from users where id = #{0}
        </select>
    </mapper>

    2)编写测试类进行测试

    package cn.edu.ccut.test;
    
    import cn.edu.ccut.bo.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    public class StudentTest {
    
        @Test
        public void testLoginUser(){
            SqlSession session = null;
            try {
                //获取sqlSessionFactory对象
                InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                //获取sqlSession对象
                session = sqlSessionFactory.openSession();
                //使用sqlSession对象进行查询操作
                User user = session.selectOne("doLogin","1");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //关闭连接
                session.close();
            }
        }
    }

    注意:目前为止,如果传递两个及两个以上的参数,我们需要使用map或者实体类对象进行操作

    实例:传递两个参数

    配置文件设置:

    <?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代表实现类的全路径(包名+类名) -->
    <mapper namespace="cn.edu.ccut.mapper.StudentMapper">
        <!-- 该处每一个标签代表一个方法(select、insert、delete、update等),
            id为方法名,
            parameterType为参数类型,
            resultType为返回值类型
        -->
        <select id="doLogin" resultType="User" parameterType="map">
            select * from users where id = #{id} and username = #{username}
        </select>
    </mapper>

    测试类编写:

    package cn.edu.ccut.test;
    
    import cn.edu.ccut.bo.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Map;
    
    public class StudentTest {
    
        @Test
        public void testLoginUser(){
            SqlSession session = null;
            try {
                //获取sqlSessionFactory对象
                InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                //获取sqlSession对象
                session = sqlSessionFactory.openSession();
                //使用map放置多个参数
                Map<String,Object> map = new HashMap<String,Object>();
                map.put("id","1");
                map.put("username","admin");
                //使用sqlSession对象进行查询操作
                User user = session.selectOne("doLogin",map);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //关闭连接
                session.close();
            }
        }
    }

     

    展开全文
  • mybatis参数传递的问题

    2016-10-26 15:07:21
    mybatis参数传递的问题:如何传递一个参数并在xxxMapper.xml中拿到参数值用于sql操作?如何传递多个参数并在xxxMapper.xml中拿到参数值用于sql操作? 1.基本数据类型只能传一个(int,String,Data等),通过#{参数...
  • Mybatis参数传递与引用, 指的是在sql 映射文件中如何引用java 中传递的参数. Mybatis 支持命名参数和位置参数两种方式, 也可以自动从pojo中获取属性值. 1. 参数传递方式 和jdbc 类似, Mybatis参数传递也包含...
  • mybatis参数传递规格

    2020-06-09 21:00:39
    因为mybatis在查询的过程中使用的是反射,而反射只能反射会参数的类型而不能反射的参数。所以在使用mybatis的过程中我们需要注意参数的规格: 传入的参数 示例 单个参数 #{随便如何写} javabean #{对象...
  • Mybatis参数传递5种方式

    千次阅读 2019-03-20 03:05:41
    这种情况MyBatis可直接使用这个参数,不需要经过任何处理。 <!-- 根据id查询数据表中的一条记录,并封装User对象 --> <select id="selectById" resultType="com.softjx.model.User"> select t_id as ...
  • 一、单参数传递: 二、多参数传递: 1、固定参数传递 List&lt;String&gt; getInfo(@Param("params") params)  params 为 XX,XX,XX形式参数 Mybatis中传入IN中,要用${params}接受 2、List...
  • 单个参数 对于单个参数的形式,Mybatis可以接收基本类型,对象类型、集合类型的值,且可以直接使用这个参数而不需要经过任何处理...多个参数传递示例 Mybatis在传输多个参数时,会将多个参数封装成Map,默认
  • mybatis参数传递与拦截获取

    千次阅读 2016-09-20 17:12:33
    最近使用mybatis作为持久层,在阅读框架内动态sql的部分时,对于参数传递有了较深刻认识,现分享给大家,如有纰漏,欢迎批评指正。 首先列举一下Mapper传递参数的方式,总共分为单一简单(单一参数简单类型)、单一...
  • MyBatis参数传递的问题

    千次阅读 2018-09-07 16:13:48
    最近碰到MyBatis传参的一些问题,经过一番探究,问题是解决了。...一、单个简单参数     public Item getItemById(String id);   &lt;select id="getItemById" parameterTyp...
  • List<User> findUsersByIds2(Integer[] ids);
  • 1. 单个参数传递方式 例如: Employee.java: public Good getEmpById(Integer id); EmployeeMapper.xml : &lt;select id="getEmpById" resultType="com.mybatis.domian.Employee"&...
  • mybatis 参数传递之默认命名

    千次阅读 2013-09-22 07:20:00
    文讲到了MyBatis参数传递的注解方式,今天看另外一种方式,也就是参数默认命名的方式。还是以上文的分页查询教师信息的方法findTeacherByPage为例。 一、具体步骤  对于映射器中的方法,MyBatis默认从左到...
  • mybatis参数传递及其他标签

    千次阅读 2015-12-18 17:44:06
    MyBatis可以使用的基本数据类型和Java的复杂数据类型。 基本数据类型,String,int,date等。 但是使用基本数据类型,只能提供一个参数,所以多参数可以使用Java实体类,或Map类型做参数类型。通过#{}或${}可以直接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,146
精华内容 17,258
关键字:

mybatis参数传递