枕上诗书闲处好,门前风景雨来佳。这篇文章主要讲述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动态代理】
推荐阅读
- AppCompatActivity
- Android TextView加下划线的几种方式
- Unity5.5.4使用IL2CPP构建Android真机版本
- 基于angular+bower+glup的webapp
- A query was run and no Result Maps were found for...原来是mapper.xml文件出了问题,是使用MyBatis最常见的一种错误
- Android Studio检测内存泄露和性能
- android BSP与硬件相关子系统读书笔记android BSP移植综述
- Android进程回收机制LMK(Low Memory Killer)
- 通过微信分享链接,后面被加上from=singlemessage&isappinstalled=1导致网页打不开