上面2章写了mybatis的基本操作,今天就写写mybatis的动态代理吧。

动态代理有4个基本原则:

1.userMapper.xml里面的namespace="cn.my.dao.UserDaoMapper"一定要和接口的包名+接口名一致

2.userMapper.xml里面的statementid值要和接口中的方法名一致

3.userMapper.xml里面的入参类型要和接口中方法的参数类型一致

4.userMapper.xml里面的返回类型要和接口中方法的返回类型一致

好了不废话直接上代码.

首先改造一下上一篇的代码,为了不修改user.xml,添加一个新的UserMapper.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"> <mapper namespace="cn.my.dao.UserDaoMapper">
<select id="findById" parameterType="int" resultType="cn.my.mybatis.entity.User">
select * from user where id=#{id}
</select> <!-- 新增映射 修改id名称为了以后封装basedao-->
<insert id="insert" parameterType="cn.my.mybatis.entity.User">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `user` (`username`,`birthday`,`sex`,`address`)
VALUES(#{username},#{birthday},#{sex},#{address})
</insert> <!-- 修改用户 修改id名称为了以后封装basedao-->
<update id="update" parameterType="cn.my.mybatis.entity.User">
UPDATE `user`
SET
`username` = #{username},
`birthday` = #{birthday},
`sex` = #{sex},
`address` = #{address}
WHERE `id` = #{id} ;
</update>
<!-- 删除 修改id名称为了以后封装basedao -->
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
</mapper>

第二步新增一个UserDaoMapper.java接口

package cn.my.dao;

import cn.my.mybatis.entity.User;

public interface UserDaoMapper {

    public User findById(int id);
public void insert(User user);
public void update(User user);
public void delete(int id);
}

第三步新增一个测试类TestUserMapper.java文件

package cn.my.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import cn.my.dao.UserDaoMapper;
import cn.my.mybatis.entity.User; public class TestUserMapper {
private SqlSessionFactory factory;
@Before
public void setUp() throws IOException{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void testFindById(){
SqlSession session = factory.openSession();
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
User user = dao.findById(10);
session.close();
System.out.println(user);
}
/**
* 新增用户
*/
@Test
public void testInserUser(){
SqlSession session = factory.openSession();
User user = new User();
user.setAddress("许昌");
user.setUsername("曹操1");
user.setSex("男");
user.setBirthday(new Date());
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
dao.insert(user);
session.commit();
session.close();
System.out.println(user.getId());
}
/**
* 修改
*/
@Test
public void testUpdateUser(){
SqlSession session = factory.openSession();
User user = new User();
user.setId(34);
user.setAddress("许昌1");
user.setUsername("曹操2");
user.setSex("女");
user.setBirthday(new Date());
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
dao.update(user);
session.commit();
session.close();
}
/**
* 删除
*/
@Test
public void testDeleteUser(){
SqlSession session = factory.openSession();
UserDaoMapper dao = session.getMapper(UserDaoMapper.class);//获取mybatis的动态代码实现接口对象
dao.delete(34);
session.commit();
session.close();
} }

运行结果:

查询结果:User [id=10, username=张三, sex=1, birthday=Thu Jul 10 00:00:00 CST 2014, address=北京市]

新增结果:     打印结果:34

修改结果:

删除结果:

以上修改为动态代理就已经修改好了。

下一章写sql动态标签

可以加微信群,一起交流,加时注明在哪里看到的

mybatis(三)的更多相关文章

  1. spring与mybatis三种整合方法

    spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...

  2. SSM,即Spring+SpringMVC+MyBatis三个开源框架的整合框架集。

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...

  3. Mybatis(三) 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  4. mybatis三个执行器的差别

    myBatis官方对参数"defaultExecutorType"是这样说明的: 有这样三种执行器, SIMPLE是普通的执行器:REUSE执行器会重用预处理语句(prepared ...

  5. mybatis(三)配置mapper.xml 的基本操作

    参考:https://www.cnblogs.com/wuzhenzhao/p/11101555.html XML 映射文件 本文参考mybatis中文官网进行学习总结:http://www.myba ...

  6. 通过项目逐步深入了解Mybatis<三>

    Mybatis 高级知识 安排:对订单商品数据模型进行分析 订单商品数据模型 数据模型分析思路: 1.每张表记录的数据内容(分模块对每张表记录的内容进行熟悉,相当于学习系统需求的过程) 2.每张表重要 ...

  7. 浅谈Mybatis(三)

    一.动态SQL 1.sql片段 解决sql语句的冗余代码问题. <sql id="SELECT_T_USER"> select id,name,password,bir ...

  8. 框架应用:Mybatis (三) - 关系映射

    你有一张你自己的学生证?(一对一) 你这一年级有多少个学生?(一对多) 班上学生各选了什么课?(多对多) 两张表以上的操作都需要联立多张表,而用SQL语句可以直接联立两张表,用工程语言则需要手动完成这 ...

  9. Mybatis(三)返回值

    Mybatis返回值 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则 ...

随机推荐

  1. BotVS开发基础—2.1 账户、行情、K线、深度

    代码 import json def main(): Log("账号信息:", exchange.GetAccount()); # Log("K 线数据:", ...

  2. HTTP常见状态码

    1.100状态码 1xx:临时响应,表示临时相应并需要请求者继续操作的状态码 100   (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分.   101 ...

  3. 如何理解 Python 的赋值逻辑

    摘要: 如果你学过 C 语言,那么当你初见 Python 时可能会觉得 Python 的赋值方式略有诡异:好像差不多,但又好像哪里有点不太对劲. 本文比较并解释了这种赋值逻辑上的差异.回答了为什么需要 ...

  4. Properties类随笔

    1. 体系介绍 Properties类继承自HashTable,勉强属于集合框架体系一员,键值对形式存储数据,当然键肯定是唯一的,底层哈希表保证键的唯一,此类一般用于表示配置文件. 2. 基本用法 由 ...

  5. Visual Studio 编译使用FLTK库

    FLTK介绍 FLTK (Fast Light Tool Kit 发音为fulltick) 是一种使用C++开发的GUI工具包,它可以应用于Unix,Linux,MS-Windows95/98/NT/ ...

  6. HTTP Components简介

    基于版本4.5.x 简介 组件 HttpClient,核心组件 HC Fluent,提供了流式操作接口 HttpMime,提供文件上传时用到的一些工具类 HttpClient Cache,有待学习 H ...

  7. Tensorflow之MNIST解析

    要说2017年什么技术最火爆,无疑是google领衔的深度学习开源框架Tensorflow.本文简述一下深度学习的入门例子MNIST. 深度学习简单介绍 首先要简单区别几个概念:人工智能,机器学习,深 ...

  8. 使用jmeter进行批量数据创建

    背景: 测试环境需要创建大量的测试数据,进行功能和性能的测试 测试数据创建接口是HTTP请求方式 测试数据要求不同类型的数据,要有字段进行关联,且单据的编号在DB中唯一不可重复,此外测试数据的时间类参 ...

  9. java内存区域分析及java对象的创建

    java虚拟机在执行java程序的过程中会将它管理的内存区域加分为若干个的不同的数据区域. 主要包括以下几个运行时数据区域,这里就只介绍经常会用到的 1:java虚拟机栈:我们常说的堆栈,栈就是指的j ...

  10. Redis集群的相关概念

    1.1 redis-cluster架构图 架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节 ...