一、MyBatis 接口绑定方案 session.getMapper( )
作用:创建一个接口后,由 mybatis 把 mapper.xml 生成接口的实现类,通过调用接口对象就可以获取 mapper.xml 中编写的 sql.
mybatis 和 spring 整合时使用的是该方案.
实现步骤:
- 创建一个接口
1.1 接口包名和接口名与 mapper.xml 中< mapper namespace=" ">相同
在 com.xxacker.mapper 下新建接口 ( UserMapper.java )
1.2 接口中方法名和 mapper.xml 标签的id 属性相同public interface UserMapper { List<User> selAll(); }
在 com.xxacker.mapper 新建一个 ( LogMapper.xml )
1.2.1 namespace 必须和 接口全限定路径 ( 包名 + 类名 ) 一致
1.2.2 id 值 必须和 接口中方法名 相同
1.2.3 如果接口中方法为多个参数,可以省略 parameterType
<mapper namespace="com.xxacker.mapper.UserMapper">
<select id="selAll" resultType="user">
select * from t_user
</select>
</mapper>
- 在 mybatis.xml 中使用< package>进行扫描接口和 mapper.xml
<mappers>
<package name="com.xxacker.mapper"/>
</mappers>
- 业务层逻辑
InputStream is = Resources.getResourceAsStream("mybatis.xml"); //加载配置文件
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //创建session工厂
SqlSession session = factory.openSession(); //创建session
//底层使用了 JDK动态代理设计模式
UserMapper userMapper = session.getMapper(UserMapper.class); //获取mapper
List<User> list = userMapper.selAll(); //调用sql语句
for(User user : list){
System.out.println(user);
}
session.close();
二、多参数传递
方式一:
<!-- 当多参数时,不需要写 parameterType
#{}中使用 0,1,2 或 param1,param2
-->
<select id="selByAccInAccout" resultType="log" >
select * from log where accin=#{0} and accout=#{1}
</select>
方式二:
- 在接口中使用注解方式
/**
* mybatis 把参数转换为 map 了,其中@Param("key") 参数内容就是 map 的 value
*/
List<Log> selByAccInAccout(@Param("accin") String accin123,
@Param("accout") String accout3454235);
- #{ } 里面写 @Param(“内容”) 参数中内容
<!-- 当多参数时,不需要写 parameterType -->
<select id="selByAccInAccout" resultType="log" >
select * from t_user where accin=#{accin} and accout=#{accout}
</select>