Mybatis Mapper动态代理方式

目录结构及配置文件与原始dao方法相比更简便

只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象

<?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">
<!-- namespace:命名空间,用于隔离sql -->
<!-- 使用动态代理开发DAO,1. namespace必须和Mapper接口类路径一致 -->
<mapper namespace="com.swift.dao.UserMapper">
    <!-- 根据用户id查询用户 -->
    <!-- 2. id必须和Mapper接口方法名一致 -->
    <!-- 3. parameterType必须和接口方法参数类型一致 -->
    <!-- 4. resultType必须和接口方法返回值类型一致 -->
    <select id="queryUserByUsername" parameterType="String"
        resultType="com.swift.pojo.User">
        select * from user where username = #{username}
    </select>
</mapper>

Mybatis配置文件的映射部分更加简便

<?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>
    <properties resource="db.properties"></properties>

    <environments default="development">
        <!-- 开发用数据源 -->
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

    <!-- 加载sql映射文件 -->
    <mappers>
    <!-- 当把sql映射文件移到和接口文件(jdk代理的方式,无需实现类了)一个包下使用相同文件名(接口改名叫UserMapper.java不叫UserDao了),就可以使用class属性替换resource属性 -->
        <!-- <mapper resource="mapper/UserMapper.xml" /> -->
        <!-- <mapper class="com.swift.dao.UserMapper"/> -->
        <!-- 如果有很多相同名字的接口和映射都放在这个包中,那给个包名就可以加载映射了 -->
        <package name="com.swift.dao"/>
    </mappers>
</configuration>

上边的配置文件和映射文件与以往的ssh框架类似

但还要搞懂Alias 别名

如果没留心这个,往往会让你晕晕的感觉,不明白谁是谁了,但一旦注意了,还是觉得蛮方便的

可以单个定义别名
<typeAlias alias="user" type="com.swift.pojo.User" />

就像给人其了小名,小名其实还是他,以后叫小名就行了

还可以用包批量定义别名

<package name="com.swift.dao" />
<package name="com.swift.pojo" />

那么这些包下的接口或类就都可以使用小名了(就是类名可以小写了,或者无所谓大小写)

但注意不要动 动态代理的那个类名,出BuilderException,造不出代理对象

新的配置文件

<?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>
    <properties resource="db.properties"></properties>

    <typeAliases>
        <!-- 单个别名定义 -->
        <!-- <typeAlias alias="user" type="com.swift.pojo.User" /> -->
        <!-- 批量别名定义,扫描整个包下的类,别名为类名(大小写不敏感) -->
        <package name="com.swift.dao" />
        <package name="com.swift.pojo" />
    </typeAliases>

    <environments default="development">
        <!-- 开发用数据源 -->
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

    <!-- 加载sql映射文件 -->
    <mappers>
    <!-- 当把sql映射文件移到和接口文件(jdk代理的方式,无需实现类了)一个包下使用相同文件名(接口改名叫UserMapper.java不叫UserDao了),就可以使用class属性替换resource属性 -->
        <!-- <mapper resource="mapper/UserMapper.xml" /> -->
        <!-- <mapper class="com.swift.dao.UserMapper"/> -->
        <!-- 如果有很多相同名字的接口和映射都放在这个包中,那给个包名就可以加载映射了 -->
        <package name="com.swift.dao"/>
    </mappers>
</configuration>

配置文件属性的位置是固定的,因为约束,不能变动

映射文件如下:

不知道一定会懵的

原文地址:https://www.cnblogs.com/qingyundian/p/9270976.html

时间: 2024-08-28 19:02:28

Mybatis Mapper动态代理方式的相关文章

MyBatis开发Dao层的两种方式(Mapper动态代理方式)

MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上一篇博客中Dao接口实现类方法. Mapper接口开发需要遵循以下规范: (1)Mapper.xml文件中的namespace与mapper接口的类路

02.MyBatis在DAO层开发使用的Mapper动态代理方式

在实际开发中,Mybatis作用于DAO层,那么Service层该如何调用Mybatis Mybatis鼓励使用Mapper动态代理的方式 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体等于Dao接口实现类方法. 1.编写Mapper.xml映射文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYP

MyBatis - Mapper动态代理开发

采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法. - Mapper接口开发需要遵循以下规范: ① Mapper.xml文件中的namespace与mapper接口的全类名相同. ② Mapper接口方法名和Mapper.xml中定义的statement的id相同. ③ Mapper接口方法的输入参数类型和mapper.xml中定义的statement的paramet

Mybatis实现Mapper动态代理方式

一.实现原理 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mapper接口开发需要遵循以下规范:                1. Mapper.xml文件中的namespace与mapper接口的类路径相同.                2.  Mapper接口方法名和Mapper.xml中定义的每个statement的id相同              

Mapper 动态代理方式

Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mapper接口开发需要遵循以下规范: 1. Mapper.xml文件中的namespace与mapper接口的类路径相同. 2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同 3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameter

mybatis(一) mapper动态代理

因为dao开发,会每次创建实体类对象,会传入id等固定查询值,存在硬编码问题,所以采用mapper动态代理(不用创建实体类对象,只需要接口,由mapper自动生成) 与之前mybatis(一)步骤一样,但是需要将mapper.xml文件作出修改: namespace:必须是接口类的全路径 (<mapper namespace="">) id:必须是接口的方法名(<select id=""/>) parameterType:必须是接口方法里面的

MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

摘自:https://www.cnblogs.com/yichunguo/p/11990961.html 目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Mapper动态代理方式 1.定义Mapper.xml(映射文件) 2.编写UserMapper.xml配置文件内容: 3.编写UserMapper(接口文件) 4.加载UserMapper.xml

mybatis(Mybatis与hibernate的不同、原始Dao开发、Mapper动态代理开发)

1.Mybatis与hibernate的不同 (1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句.mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象. mybatis需要在配置文件中书写sql语句: <delete id="deleteStudentById" parameterType="

Mybatis框架三:DAO层开发、Mapper动态代理开发

这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqing/p/8601506.html 但是发现代码重复过多等问题 接下来整合并实现DAO开发: 一:原始DAO开发: package dao; import pojo.User; public interface UserDao { public User selectUserById(Integer