mybatis mapper动态代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis mapper动态代理相关的知识,希望对你有一定的参考价值。

  因为dao开发,会每次创建实体类对象,会传入id等固定查询值,存在硬编码问题,所以采用mapper动态代理(不用创建实体类对象,只需要接口,由mapper自动生成)

与之前mybatis(一)步骤一样,但是需要将mapper.xml文件作出修改:

  namespace:必须是接口类的全路径 (<mapper namespace="">)

  id:必须是接口的方法名(<select id=""/>)

  parameterType:必须是接口方法里面的参数类型

  resultType:必须是接口方法的返回值(若返回list<T>集合类型,则必须是T泛型所代表的实体类)

mapper.xml:

<?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">
<!-- sql语句映射,namespace是为了隔离sql语句 -->
<!-- mapper动态代理方式 -->
<!--namespace与mapper接口的类路径相同 -->
<!-- mapper接口方法名与mapper的id相同 -->
<!-- mapper接口方法的参数 与 parameterType相同 -->
<!-- mapper接口方法的返回类型和resultType相同 -->
<mapper namespace="com.xr.mybatis1.User">


<!-- sql查询操作 ,resultType:结果返回类型 #{}表示占位符,可以防止sql注入-->
<select id="selectById" resultType="com.xr.mybatis.User" parameterType="int">
select * from uu where id=#{id}
</select>
<select id="selectByName" resultType="com.xr.mybatis.User" parameterType="java.lang.String">
select * from uu where name like ‘%${value}%‘
</select>


<!-- 插入数据 -->
<insert id="insert" parameterType="com.xr.mybatis.User">
<!-- <selectKey keyProperty="id" order="AFTER">
select LAST_INSERT_ID()
</selectKey> -->
insert into uu(name,money) values(#{name},#{money})
</insert>

<!-- 删除数据 -->
<delete id="delete">
delete from uu where id=#{id}
</delete>

<!-- 修改数据 -->
<update id="update" parameterType="com.xr.mybatis.User">
update uu set name=#{name} where id=#{id}
</update>
</mapper>

总结:

mybatis 可以解决的jdbc问题:

1:jdbc每次都有加载驱动,创建连接等步骤 ------SqlMapConfig.xml中,使用jdbc事物,连接池处理

2:修改sql语句,就会修改java代码-----使用mapper,xml文件,映射sql语句

3:jdbc传参数太麻烦,因为sql语句的where条件不一定,参数需要和占位符一一对应-----mybatis自动将java对象映射至sql语句,通过statement中的parameterType指定

4:对结果集解析太麻烦,sql变化将导致解析代码变化,且解析前需要遍历-----mybatis自动将sql执行结果映射至java对象,通过statement的resultType指定

mybatis优点:轻量级的框架,简单,方便,可编写原生态的sql,控制sql执行性能,灵活度很高。(必须要求编写sql语句)

 








































以上是关于mybatis mapper动态代理的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis学习系列Mapper接口动态代理

Mybatis框架中Mapper动态代理方式

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

mybatis mapper动态代理

Mybatis实现Mapper动态代理方式

mybatis_mapper动态代理