当实体类中的属性和数据库中的字段对应是,我们使用resultType和parameterType就可以完成CRUD;

当实体类中的属性和数据库中的字段不对应时,就要用resultMap和parameterMap了。

下面的代码是一个Book实体类 和 BOOK_MANAGE数据库,他们的字段是不对应的,以下是用resultMap和parameterMap进行的CRUD操作。

查询时,我们需要返回类型,即用resultMap;

增改删时,我们需要参数类型,即用parameterMap;(这里的删除是根据id删除,实体类和数据库对应的,所以用parameterType效果也一样。)

实体类:

public class Book {
 private int id;
 private String bookName;
 private double bookPrice;

(.....省略get set 方法)
}

BookSql.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映射  | namespce:唯一标识当前此映射文件 -->
<mapper namespace="my.BookManage">
 
 <!-- 将JAVA实体类中的属性和表中的字段进行对应 
  column:数据库中的列
  property:对应的实体类中的属性
 -->
 <resultMap type="Book.dao.Book" id="BookResultMap">
  <id column="id" property="id"/>
  <result column="name" property="bookName"/>
  <result column="price" property="bookPrice"/>
 </resultMap>
 
 <!-- resultMap:resultMap的id ,bookName:resultMap的property,即实体类中的属性 -->
 <parameterMap type="Book.dao.Book" id="BookParameterMap">
  <parameter property="bookName" resultMap="BookResultMap" />  
  <parameter property="bookPrice" resultMap="BookResultMap" />  
 </parameterMap>

<select id="selectAll" resultMap="BookResultMap">
  select * from BOOK_MANAGE
 </select>
 
 <!-- 根据ID查询Book -->
 <select id="selectBookById" parameterType="int" resultMap="BookResultMap">
  select * from BOOK_MANAGE 
   where 
  id=#{id}
 </select>
 
 <!-- 根据ID删除Book -->
 <delete id="deleteBookById" parameterType="Book.dao.Book"> 
  delete from BOOK_MANAGE 
   where 
  id=#{id}
 </delete>
 
 <!-- 保存一个Book -->
 <insert id="saveBook" parameterMap="BookParameterMap">
  insert into BOOK_MANAGE
   (ID,NAME,PRICE)
    values
   (Bookmanage_Seq.Nextval,#{bookName},#{bookPrice})
 </insert>
 
 <!-- 根据ID修改Book -->
 <update id="updatePersnById" parameterMap="BookParameterMap">
  update BOOK_MANAGE 
   set 
    NAME=#{bookName},
    PRICE=#{bookPrice}
   WHERE id=#{id}
 </update>
</mapper>

接下来就是servive调用了:

public class BookService {
 /**
  * 准备工作,获得SqlSessionFactoryBean对象
  * @return 
  * @throws Exception 
  * @throws Exception 
  */
 SqlSessionFactory sqlSessionFactory;
 public void init() throws Exception{
  String resource = "sqlMapConfig.xml";
  InputStream in = Resources.getResourceAsStream(resource);
  sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
 }
 
 /**
  * 查询所有Book
  * @throws Exception
  */
 @Test
 public void selectAll() throws Exception{
  init();
  SqlSession session = sqlSessionFactory.openSession();
  List<Book> list = session.selectList("my.BookManage.selectAll");
  session.close();
  for (Iterator iterator = list.iterator(); iterator.hasNext();) {
   Book p = (Book) iterator.next();
   System.out.println(p);
  }
 }
 
 /**
  * 根据ID查询Book
  * @throws Exception 
  */
 @Test
 public void selectBookByID() throws Exception{
  init();
  SqlSession session = sqlSessionFactory.openSession();
  Book book = session.selectOne("my.BookManage.selectBookById",3);
  session.close();
  System.out.println(book);
 
 }
 
 /**
  * 根据ID删除Book
  * @throws Exception 
  */
 @Test
 public void deleteBookByID() throws Exception{
  init();
  SqlSession session = sqlSessionFactory.openSession();
  int i = session.delete("my.BookManage.deleteBookById",3);
  System.out.println(i);
  //对数据库数据会造成影响的,需要commit
  session.commit();
  session.close();
 
 }
 
 /**
  * 保存一个Book
  * @throws Exception 
  */
 @Test
 public void saveBook() throws Exception{
  init();
  SqlSession session = sqlSessionFactory.openSession();
  Book b =new Book();
  b.setBookName("BookC");
  b.setBookPrice(15.0);
  int i = session.insert("my.BookManage.saveBook", b);
  System.out.println("插入了"+i+"条数据");
  session.commit();
  session.close();
 }

/**
  * 根据Id修改一个Book
  * @throws Exception 
  */
 @Test
 public void updateBookById() throws Exception{
  init();
  SqlSession session = sqlSessionFactory.openSession();
  Book b =new Book();
  b.setBookName("BookB");
  b.setBookPrice(20.0);
  b.setId(3);
  int i = session.update("my.BookManage.updatePersnById",b);
  System.out.println("修改了"+i+"条数据");
  session.commit();
  session.close();
 }
}

parameterType、parameterMap与resultMap相关推荐

  1. resultMap与resultType、parameterMap与 parameterType的区别

    原文地址:http://blog.csdn.net/csdn_terence/article/details/60779889 Map:映射:Type:Java类型  resultMap 与 resu ...

  2. mapper.xml传参及其使用

    文章目录 mapper.xml传参及其使用 一.mapper.xml传参. 1.传多个参数 2.键值对传参 3.传数组/集合 4.传对象参数 5.同时传多个参数和对象 二.mapper.xml部分参数 ...

  3. mybatis中的resultMap与resultType、parameterMap与 parameterType的区别

    Map:映射:Type:Java类型 resultMap 与 resultType.parameterMap 与  parameterType的区别在面试的时候被问到的几率非常高,项目中出现了一个小b ...

  4. parameterMap与parameterClass

     <!--查询单个记录作为相册封面-->     <select id="GetPhotoAsAlbumFace" parameterClass=" ...

  5. MyBatis启动:MapperStatement创建

    参考:http://blog.csdn.net/ashan_li/article/details/50351080 MappedStatement说明 一个MappedStatement对象对应Map ...

  6. java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?

    近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件:SqlSession Executor Stat ...

  7. MyBatis 的工作原理,你了解过吗?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:cnblogs.com/scuury/p/10371 ...

  8. Mybatis的工作原理,你了解过吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:cnblogs.com/scuury/p/10371246. ...

  9. 实际测试例子+源码分析的方式解剖MyBatis缓存的概念

    前言: 前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ 欢迎工作一到五年的Java工程师朋友们加入Java架构开发:79 ...

最新文章

  1. 简单又好看的按钮,扁平化按钮。
  2. 网站优化之如何提升快照的更新时间?
  3. Java 回调函数的理解
  4. 购房占比47.54%,数据揭秘女性偏爱婚前买房背后原因
  5. UGUI实现接口事件
  6. 详解Vuex常见问题、深入理解Vuex
  7. java referencemap_Java中TypeReference用法说明
  8. ios uiview 如何刷新_ios-如何在Swift中刷新imageview而无需重新加载页面?
  9. Web API 设计摘要
  10. 无权有向图的最短路径
  11. man statd(rpc.statd中文手册)
  12. [C++] C/C++结构体的区别
  13. Flutter之Redux框架入门
  14. mysql数据库存储过程语法错误_奇怪的mysql创建存储过程语法错误
  15. 精通javascript 代码总结
  16. paypal支付详细指南:基于PayPal-PHP-SDK进行接口对接
  17. 论文总结(3):Intelligent Traffic Monitoring Systems for Vehicle Classification: A Survey
  18. 【金蝶】金蝶KIS专业版9.1清理用户名密码
  19. 开启Win7快速启动栏
  20. Android程序崩溃异常收集框架

热门文章

  1. iOS即时通讯,从入门到“放弃”?
  2. 【XSY2271】青蛙(栈)
  3. 2022最新影视小程序源码+支持JSON/卡密系统
  4. C语言-链表逆序输出
  5. 基于Wireshark的IP数据包头中ToS段介绍2-1
  6. kali 切换root账号
  7. Java POI导出Excel
  8. neuq oj 1034: C基础-求同存异 C++
  9. MFC中CreateCompatibleDC的作用
  10. CreateCompatibleDC 和 CreateCompatibleBitmap