mybatis mapper动态代理

枕上诗书闲处好,门前风景雨来佳。这篇文章主要讲述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动态代理】 








































    推荐阅读