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.编写相应的接口

  1. public interface UserMapper {
  2.  
  3. /**根据id查询用户
  4. * @param id
  5. * @return
  6. */
  7. public User queryUserById(Long id);
  8.  
  9. /**查询全部的用户
  10. * @return
  11. */
  12. public List<User> queryAll();
  13.  
  14. /**增加用户
  15. * @param user
  16. */
  17. public void insertUser(User user);
  18.  
  19. /**更新用户
  20. * @param user
  21. */
  22. public void updateUser(User user);
  23.  
  24. /**
  25. * 删除用户
  26. * @param id
  27. */
  28. public void deleteById(Long id);
  29. }

2.编写主配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!-- 加载外部配置文件 -->
  7. <properties resource="jdbc.properties"></properties>
  8. <settings>
  9. <!--开启驼峰命名法-->
  10. <setting name="mapUnderscoreToCamelCase" value="true"/>
  11. </settings>
  12.  
  13. <!-- 起别名 -->
  14. <typeAliases>
  15. <typeAlias alias="User" type="cn.mybatis.pojo.User"/>
  16. </typeAliases>
  17.  
  18. <environments default="development">
  19. <environment id="development">
  20. <transactionManager type="JDBC"/>
  21. <dataSource type="POOLED">
  22. <property name="driver" value="${jdbc.driver}"/>
  23. <property name="url" value="${jdbc.url}"/>
  24. <property name="username" value="${jdbc.username}"/>
  25. <property name="password" value="${jdbc.password}"/>
  26. </dataSource>
  27. </environment>
  28. </environments>
  29.  
  30. <!-- 指定mapper的配置文件 -->
  31. <mappers>
  32. <mapper resource="mapper.xml"/>
  33. <mapper resource="usermapper.xml"/>
  34. </mappers>
  35. </configuration>

3.编写映射配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="cn.mapper.UserMapper">
  6.  
  7. <select id="queryUserById" parameterType="java.lang.Long" resultType="User">
  8. select * from tb_user where id = #{id}
  9. </select>
  10.  
  11. <select id="queryAll" resultType="User">
  12. select * from tb_user
  13. </select>
  14.  
  15. <insert id="insertUser" parameterType="User">
  16. INSERT INTO tb_user (
  17. id,
  18. user_name,
  19. password,
  20. name,
  21. age,
  22. sex,
  23. birthday,
  24. created,
  25. updated
  26. )VALUES(
  27. null,
  28. #{userName},
  29. #{password},
  30. #{name},
  31. #{age},
  32. #{sex},
  33. #{birthday},
  34. NOW(),
  35. NOW()
  36. );
  37. </insert>
  38. <delete id="deleteById" parameterType="Long">
  39. DELETE FROM tb_user WHERE id = #{id}
  40. </delete>
  41. </mapper>

4.编写测试类

  1. package cn.mybatis.junit.test;
  2.  
  3. import static org.junit.Assert.*;
  4.  
  5. import java.io.InputStream;
  6. import java.util.List;
  7.  
  8. import org.apache.ibatis.io.Resources;
  9. import org.apache.ibatis.session.SqlSession;
  10. import org.apache.ibatis.session.SqlSessionFactory;
  11. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  12. import org.junit.Before;
  13. import org.junit.Test;
  14.  
  15. public class UserMapperTest {
  16.  
  17. private UserMapper userMapper;
  18.  
  19. InputStream inputStream;
  20. SqlSessionFactory sqlSessionFactory;
  21. SqlSession sqlSession;
  22.  
  23. @Before
  24. public void setUp() throws Exception {
  25.  
  26. String resource = "mybatis-config.xml";
  27.  
  28. inputStream = Resources.getResourceAsStream(resource);
  29.  
  30. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  31.  
  32. sqlSession = sqlSessionFactory.openSession();
  33.  
  34. // 通过动态代理获取
  35. userMapper = sqlSession.getMapper(UserMapper.class);
  36.  
  37. }
  38.  
  39. /**
  40. * 根据id查询
  41. */
  42. @Test
  43. public void test() {
  44. User user = userMapper.queryUserById(1L);
  45. System.out.println(user);
  46. }
  47. /**
  48. * 查询全部
  49. */
  50. @Test
  51. public void test1() {
  52. List<User> all = userMapper.queryAll();
  53.  
  54. for (User user2 : all) {
  55. System.out.println(user2);
  56. }
  57. }
  58.  
  59. /**
  60. * 插入用户
  61. */
  62. @Test
  63. public void test2() {
  64. User user = new User();
  65. user.setAge(22);
  66. user.setBirthday(null);
  67. user.setName("jack");
  68. user.setPassword("123");
  69. user.setSex(1);
  70. user.setuserName("pick jack");
  71.  
  72. userMapper.insertUser(user);
  73.  
  74. this.sqlSession.commit();
  75. }
  76.  
  77. /**
  78. * 删除
  79. */
  80. @Test
  81. public void test3() {
  82. this.userMapper.deleteById(12L);
  83.  
  84. this.sqlSession.commit();
  85. }
  86. }

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. LUA速成教程

    說明: 1.該教程適合對編程有一定了解的人員. 2.該教程在WINDOWS下實驗. 切入正題, 1.首先下載Notepad++,工欲善其事,必先利其器,然後安裝NotePad++的插件NppExec. ...

  2. NGUI Checkbox与PlayerPrefs

    UICheckboxPrefs.cs 1,bool isChecked:false 为“初始”状态,true为“选中”: 2,bool startsChecked:true,一运行,就显示UISpri ...

  3. Unity3d 游戏退出界面1

    功能需求:点击退出按钮,弹出“退出”UI,询问玩家是否退出游戏: 退出按钮 退出UI: publicclass GameQuit : MonoBehaviour { // 取消按钮 public  G ...

  4. tomcat ; nginx ;mysql

    [说明]上午在服务器上部署了自己的web目录(tomcat虚拟目录),下午安装并了解了nginx(出了点问题,后来解决了),晚上尝试nginx和tomcat配置(一头雾水) 一:今日完成 1)配置to ...

  5. 宇视4G设备采用GB/T28181协议成功接入EasyGBS国标流媒体平台的设置流程

    经过了多天的调试对接,终于将宇视的布控球顺利接入到了EasyGBS的国标平台,特地写一下对接过程中遇到的问题,希望能帮助大家避开一些麻烦: 第一步:电脑连接无线网络IPCWIFI,密码12345678 ...

  6. js获取滚动条的位置

    页面具有 DTD,或者说指定了 DOCTYPE 时,使用 document.documentElement. 页面不具有 DTD,或者说没有指定了 DOCTYPE,时,使用 document.body ...

  7. Linux下带宽流量工具iftop实践

    在Linux/类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop ...

  8. php7/etc/php-fpm.d 配置

    php7/etc/php-fpm.d/www.conf nginx php-fpm 高并发优化 - 日记本的回忆 - 博客园 https://www.cnblogs.com/cocoliu/p/856 ...

  9. 根据字段表 自动创建 表SQL

    create PROC CreateTableSql ) AS ) ,) ,) ) ,) ,) ,@IsIdentity bit ,@IsNull bit ,@IsPrimaryKey bit ),) ...

  10. mybatis springmvc velocity的demo

    https://codeload.github.com/xingfly/SBlog/zip/master 1.记得导入数据库并修改 数据库的配置. 2.使用jetty运行 pom 添加jetty &l ...