您的位置:首页 > 移动开发

Mapper动态代理方式的CRUD(增删改查)(MyBatis接口开发)

2018-12-17 22:37 603 查看

Mapper动态代理方式的增删改查(MyBatis接口开发):

  • 原理:Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法(此处摘自于笔者应该是个妹子
  • 原则:约定优于配置

    硬编码方式:
    abc.java

    Configuration conf = newConfiguration(); conf.setName("myProject");

  • 配置方式:
    abc.xml

    <name>myProject</name>

  • 约定:默认值就是myProject

具体实现步骤:

  1. 基础环境:mybatis.jar、mysql-connector.jar、conf.xml、mapper.xml

  2. (不同之处)
    约定的目标:省略掉statement,即根据约定,直接可以定位出SQL语句 (用MyBatis接口没开发)
    对于接口而言:接口中的方法必须遵守以下约定

    1.接口的方法名和Mapper.xml文件中标签的id值相同

    2.方法的输入参数和Mapper.xml文件中标签的parameterType类型一致(无parameterType,则方法没有输入参数)
    3.方法的返回值和Mapper.xml文件中标签的resultType类型一致(无论查询结果为一个还是多个(Student、List),在Mapper.xml文件标签中的resultType都只写一个(Student);如果没有resultType,则方法的返回值为void)

    习惯:SQL映射文件(Mapper.xml)和接口放在同一个包中

除了以上约定,要实现 接口中的方法 和 Mapper.xml中SQL标签一一对应,还需以下一点:
namespace的值,就是 接口的全类名(接口和mapper.xml一一对应)

匹配的过程:(约定的过程)

1.根据 接口名 找到 Mapper.xml文件(根据的是namespace=接口的全类名)
2.根据 接口中的方法名 找到 Mapper.xml文件中的SQL标签(方法名=SQL标签的id值)

以上两点可以保证:当调用接口的方法时,程序能自动定位到 某个Mapper.xml文件中的SQL标签

测试

以上,可以通过接口的方法->SQL语句(接口的实现类由mybatis在底层给我们实现)

执行:
接口 A = session.getMapper(接口.class);
A.方法();

通过session对象获取接口(session.getMapper(接口.class)),再调用该接口中的方法,程序会自动执行该方法对应的SQL语句。

优化:

  1. 可以将配置信息 单独放入db.properties文件中,然后再动态引入

    db.properties文件中: key=value
    引入:

<configuration>
<properties resource="db.properties" />

引入之后,使用

${key}
,如:
<property name="driver" value="${driver}"/>

2.MyBatis全局参数
在conf.xml中设置

<settings>
<setting name="cacheEnabled" value="false"/>
<setting name="lazyLoadingEnabled" value="false"/>
</settings>


3.别名
设置单个/多个别名:

<!-- 设置单个/多个别名 -->
<typeAliases>
<!-- 设置单个别名(别名,可以忽略大小写) -->
<!--<typeAlias type="com.ph.main.dao.Student"alias="ReStudent"/>-->
<!-- 批量定义别名(别名,可以忽略大小写) ,
以下会自动将该包中的所有类批量定义别名:别名就是类名(不带包名
,可忽略大小写)-->
<package name="com.ph.main.dao"/>
</typeAliases>

除了自定义别名外,MyBatis还内置了一些常见类的别名。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: