MyBatis接口绑定及多参数

MyBatis接口绑定方案及多参数传递

在MyBatis的增删改查中都发现只能传递一个参数,如果想要传递多参数可以使用map的方式将参数传递进去

map方式实现多参数传递

<select id="selectByMap" resultType="User" parameterType="map">
        select * from user where username=#{username} and password=#{password};
</select>
        Map<String,String> map=new HashMap<>();
        map.put("username","reverie");
        map.put("password","123456");

        User u=sqlSession.selectOne("cn.com.mapper.selectByMap",map);
        System.out.println(u);

在select标签中,使用map作为parameterType,使用#{key}的方式获取map中的数据
从而间接的传递了多参数

接口绑定

在MyBatis中可以创建一个接口后通过mybatis生成接口的实现类和mapper.xml进行绑定,从而可以通过调用接口就可以获取mapper.xml中的sql

实现步骤
1.创建一个接口
接口的包名和接口名与mapper.xml中<mapper>namespace的属性值相同
接口的方法名和mapper.xml标签的id属性相同

package cn.com.mapper;

import cn.com.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();
}

创建mapper.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 namespace="cn.com.mapper.UserMapper">
    <select id="selectAll" resultType="User">
         select * from user
    </select>
</mapper>

2.在MyBatis.xml中使用<package>进行扫描接口和mapper.xml进行绑定

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <typeAliases>
        <package name="cn.com.pojo"/>
    </typeAliases>

    <environments default="default">
        <environment id="default">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOlED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db_contracts?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<mapper resource="cn/com/mapper/UserMapper.xml" />-->
        <package name="cn.com.mapper"/>    <!--name和接口所在包名一致-->
    </mappers>
</configuration>

3.调用接口

        //通过getMapper()方法获取接口,参数为接口的class
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        //直接调用接口中的方法
        List<User> list=userMapper.selectAll();
        System.out.println(list);

接口实现多参数传递

1.普通方式传参

package cn.com.mapper;

import cn.com.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();

    User selectByNameAndPassword(String username,String password);
}

在接口中声明方法

    <select id="selectByNameAndPassword" resultType="User">
        select * from user where username=#{0} and password=#{1}
    </select>

在mapper.xml中编写相应的方法

当多参数时,不需要写parameterType
调用参数时#{}使用0,1,2或param1,param2

       UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        User user=userMapper.selectByNameAndPassword("reverie","r123456");
        System.out.println(user);

2.注解方式传参

在接口中声明方法

package cn.com.mapper;

import cn.com.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();

    User selectByNameAndPassword(@Param("username") String username, @Param("password") String password);
}

mybatis把参数转换为map,其中@Param(“key”)的内容就是map的value

<select id="selectByNameAndPassword" resultType="User">
        select * from user where username=#{username} and password=#{password}
</select>

注意**#{}是和@param中的内容一致**,而不是和参数名,参数名可以随便起

        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        User user=userMapper.selectByNameAndPassword("reverie","r123456");
        System.out.println(user);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值