MyBatis动态代理生成DAO的步骤:

1) 编写数据管理的接口XxxMapper

2) 编写该接口对应的Mapper.xml

a) namespace必须与Mapper接口全名一致

b) statement的id必须和Mapper接口中的对应方法名一致

c) statement的resultType必须和Mapper接口中对应方法返回值一致

3) 通过SqlSession的getMapper(XxxMapper.class)方法来获取动态代理的Mapper实现类对象

开发中运用动态代理的比较多,下面简单的介绍一个简单的案例关于增删改查的测试:

1.编写相应的接口

  public interface UserMapper {

      /**根据id查询用户
* @param id
* @return
*/
public User queryUserById(Long id); /**查询全部的用户
* @return
*/
public List<User> queryAll(); /**增加用户
* @param user
*/
public void insertUser(User user); /**更新用户
* @param user
*/
public void updateUser(User user); /**
* 删除用户
* @param id
*/
public void deleteById(Long id);
}

2.编写主配置文件

 <?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="jdbc.properties"></properties>
<settings>
<!--开启驼峰命名法-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings> <!-- 起别名 -->
<typeAliases>
<typeAlias alias="User" type="cn.mybatis.pojo.User"/>
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <!-- 指定mapper的配置文件 -->
<mappers>
<mapper resource="mapper.xml"/>
<mapper resource="usermapper.xml"/>
</mappers>
</configuration>

3.编写映射配置文件

<?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.mapper.UserMapper"> <select id="queryUserById" parameterType="java.lang.Long" resultType="User">
select * from tb_user where id = #{id}
</select> <select id="queryAll" resultType="User">
select * from tb_user
</select> <insert id="insertUser" parameterType="User">
INSERT INTO tb_user (
id,
user_name,
password,
name,
age,
sex,
birthday,
created,
updated
)VALUES(
null,
#{userName},
#{password},
#{name},
#{age},
#{sex},
#{birthday},
NOW(),
NOW()
);
</insert>
<delete id="deleteById" parameterType="Long">
DELETE FROM tb_user WHERE id = #{id}
</delete>
</mapper>

4.编写测试类

 package cn.mybatis.junit.test;

 import static org.junit.Assert.*;

 import java.io.InputStream;
import java.util.List; 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; public class UserMapperTest { private UserMapper userMapper; InputStream inputStream;
SqlSessionFactory sqlSessionFactory;
SqlSession sqlSession; @Before
public void setUp() throws Exception { String resource = "mybatis-config.xml"; inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); // 通过动态代理获取
userMapper = sqlSession.getMapper(UserMapper.class); } /**
* 根据id查询
*/
@Test
public void test() {
User user = userMapper.queryUserById(1L);
System.out.println(user);
}
/**
* 查询全部
*/
@Test
public void test1() {
List<User> all = userMapper.queryAll(); for (User user2 : all) {
System.out.println(user2);
}
} /**
* 插入用户
*/
@Test
public void test2() {
User user = new User();
user.setAge(22);
user.setBirthday(null);
user.setName("jack");
user.setPassword("123");
user.setSex(1);
user.setuserName("pick jack"); userMapper.insertUser(user); this.sqlSession.commit();
} /**
* 删除
*/
@Test
public void test3() {
this.userMapper.deleteById(12L); this.sqlSession.commit();
}
}

Mybatis入门2-动态代理实现CRUD的更多相关文章

  1. mybatis 05: mybatis中的动态代理

    mybatis中动态代理存在的意义 图示 图示分析 分层说明:界面层为第一层,业务逻辑层(接口层 + 实现层)为第二层,数据访问层(接口层 + 实现层)为第三层 业务逻辑层和数据访问层:分别分两层来开 ...

  2. Mybatis入门之动态sql

    Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...

  3. JavaWeb_(Mybatis框架)Mapper动态代理开发_三

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  4. Mybatis笔记 - Mapper动态代理

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mappe ...

  5. MyBatis笔记——Mapper动态代理

    前提概要 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mappe ...

  6. MyBatis通过Mapper动态代理来实现curd操作

    MyBatis官方推荐使用mapper代理方法开发mapper接口,程序员不需要编写mapper实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或者map对象,保证dao的通用性 ...

  7. 【Mybatis】-- Mapper动态代理开发注意事项

    1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...

  8. Mybatis学习3——动态代理

    动态代理只需要接口和mapper映射文件不需要实现类 动态代理规范 1.namespace必须是接口的全路径 2.接口的方法必须与sql的id一致 3.接口的入参与parameterType类型一致 ...

  9. mybatis入门基础----动态SQL

    原文:http://www.cnblogs.com/selene/p/4613035.html 阅读目录 一:动态SQL 二:SQL片段 三:foreach 回到顶部 一:动态SQL 1.1.定义 m ...

随机推荐

  1. Core Services层

    本文转载至 http://jingyan.baidu.com/article/cdddd41c57360853cb00e124.html Core Services层是系统很多部分的基础部分,也许应用 ...

  2. Python HTMLTestRunner报告及BeautifulReport报告

    import unittest import HTMLTestRunner class Testfunc(unittest.TestCase): def testa(self): "&quo ...

  3. 记录-Jquery uploadify文件上传实例

    原本做的是from表单的文件上传,后来因需要用ajax异步,so接触到了Jquery uploadify上传 贴上代码,以供参考 需要引入的js文件 <link href="../re ...

  4. A C Program to demonstrate adjacency list representation of graphs

    w Graph and its representations - GeeksforGeekshttp://www.geeksforgeeks.org/graph-and-its-representa ...

  5. ng-disabled的使用

    1.适用范围 该指令适用于<input>, <select>,<button> 和 <textarea> 元素. 2.用法解析 ng-disabled ...

  6. MySQL事件的先后

    今天闲聊之时 提及MySQL事件的执行,发现一些自己之前没有注意的细节 如果在执行事件过程中,如果insert的存储过程发生意外 会如何 USE iot2; CREATE TABLE aaaa (ti ...

  7. python面试题(四)

    1 常用字符串格式化哪几种? 最方便的 print('hello %s and %s' % ('df', 'another df')) 复制代码 但是,有时候,我们有很多的参数要进行格式化,这个时候, ...

  8. 001-Spring在代码中获取bean的几种方式

    一.概述 方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类Applicati ...

  9. Python基础-set集合

    1.集合的创建 s = set('fansik and fanjinbao') print(s) 打印结果(去掉了重复的字符):{'k', 'd', 'f', 'n', ' ', 'j', 'i', ...

  10. javascript高级语法

    一.JavaScript对象 1.js对象简介 1.1 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,在JavaScrip ...