Mybatis Mapper动态代理方式

历览千载书,时时见遗烈。这篇文章主要讲述Mybatis Mapper动态代理方式相关的知识,希望能为你提供帮助。
目录结构及配置文件与原始dao方法相比更简便

Mybatis Mapper动态代理方式

文章图片

【Mybatis Mapper动态代理方式】 
只需一个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="https://www.songbingjia.com/android/${jdbc.driver}" /> < property name="url" value="https://www.songbingjia.com/android/${jdbc.url}" /> < property name="username" value="https://www.songbingjia.com/android/${jdbc.username}" /> < property name="password" value="https://www.songbingjia.com/android/${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="https://www.songbingjia.com/android/${jdbc.driver}" /> < property name="url" value="https://www.songbingjia.com/android/${jdbc.url}" /> < property name="username" value="https://www.songbingjia.com/android/${jdbc.username}" /> < property name="password" value="https://www.songbingjia.com/android/${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>

配置文件属性的位置是固定的,因为约束,不能变动
映射文件如下:
Mybatis Mapper动态代理方式

文章图片

不知道一定会懵的

    推荐阅读