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);