MyBatis学习总结(二):动态代理mapper和优化

动态代理Mapper实现类

  • 传统CRUD中存在的问题
    ① 每个模块都需要编写一个接口及对应的实现类,并且还需要编写一个Mapper文件;
    ② 在实现类的每个方法中,使用Mybatis的方式很相似,都是增删改查;
    我们能否只编写接口及mapper文件,不用写实现类,mybatis提供了接口的动态代理来简化开发
  • Mapper接口的动态代理实现条件

① 映射文件中的namespace必须和接口的全路径名一致;

<mapper namespace="cn.itcast.mapper.UserMapper"> 

② 映射文件中的statementId必须和接口中方法名一致;

/**
	 * 登录
	 * 使用动态代理,当接口中的某个方法有多个参数时,通过@Param注解指定参数名字
	 * @param userName
	 * @param password
	 * @return
	 */
	public User login(@Param("userName")String userName, @Param("password")String password);
<!--
		 此处需要接收多个参数,有三种方式:
		方式一:#{0}   #{1}
		方式二:#{param1}  #{param2}
		方式三:在接口方法的形参中加@Param注解指定名字,这里通过#{名字}来接收参数,如果只有
               一个参数,#{名字}可以自定义
			
	 -->
	<select id="login" resultType="User">
		select * from tb_user where user_name = #{userName} and password = #{password}
	</select>

③ 映射文件中的resultType必须和接口中方法的返回类型一致;
④ 映射文件中的parameterType必须和接口中方法的形参类型一致;(不一定,因为parameterType可以省略)

动态代理优化

  • 配置接口全路径

在mybatis-config.xml中配置接口的全路径名

    <mappers>
        <mapper class="com.ityang.dao.UserMapper"></mapper>
    </mappers>

这样配置,并没有指定接口对应的映射文件的路径;为了能够找到映射文件,需要满足一定的条件:
1、映射文件和接口在同一个目录;
2、映射文件的名字必须和接口的名字保持一致;
3、映射文件中的namespace和接口的全路径名一致;
弊端:
1、每增加一个mapper文件,都要在mybatis-config.xml中引入;
2、Java文件和mapper文件耦合;

  • 配置package
    <mappers>
        <package name="com.ityang.dao"></package>
    </mappers>

弊端:Java文件和mapper文件耦合。
最优化的写法在spring整合mybatis会讲解。

猜你喜欢

转载自blog.csdn.net/weixin_43365369/article/details/88890791