parameterType、parameterMap与resultMap
当实体类中的属性和数据库中的字段对应是,我们使用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相关推荐
- resultMap与resultType、parameterMap与 parameterType的区别
原文地址:http://blog.csdn.net/csdn_terence/article/details/60779889 Map:映射:Type:Java类型 resultMap 与 resu ...
- mapper.xml传参及其使用
文章目录 mapper.xml传参及其使用 一.mapper.xml传参. 1.传多个参数 2.键值对传参 3.传数组/集合 4.传对象参数 5.同时传多个参数和对象 二.mapper.xml部分参数 ...
- mybatis中的resultMap与resultType、parameterMap与 parameterType的区别
Map:映射:Type:Java类型 resultMap 与 resultType.parameterMap 与 parameterType的区别在面试的时候被问到的几率非常高,项目中出现了一个小b ...
- parameterMap与parameterClass
<!--查询单个记录作为相册封面--> <select id="GetPhotoAsAlbumFace" parameterClass=" ...
- MyBatis启动:MapperStatement创建
参考:http://blog.csdn.net/ashan_li/article/details/50351080 MappedStatement说明 一个MappedStatement对象对应Map ...
- java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?
近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件:SqlSession Executor Stat ...
- MyBatis 的工作原理,你了解过吗?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:cnblogs.com/scuury/p/10371 ...
- Mybatis的工作原理,你了解过吗?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:cnblogs.com/scuury/p/10371246. ...
- 实际测试例子+源码分析的方式解剖MyBatis缓存的概念
前言: 前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ 欢迎工作一到五年的Java工程师朋友们加入Java架构开发:79 ...
最新文章
- 简单又好看的按钮,扁平化按钮。
- 网站优化之如何提升快照的更新时间?
- Java 回调函数的理解
- 购房占比47.54%,数据揭秘女性偏爱婚前买房背后原因
- UGUI实现接口事件
- 详解Vuex常见问题、深入理解Vuex
- java referencemap_Java中TypeReference用法说明
- ios uiview 如何刷新_ios-如何在Swift中刷新imageview而无需重新加载页面?
- Web API 设计摘要
- 无权有向图的最短路径
- man statd(rpc.statd中文手册)
- [C++] C/C++结构体的区别
- Flutter之Redux框架入门
- mysql数据库存储过程语法错误_奇怪的mysql创建存储过程语法错误
- 精通javascript 代码总结
- paypal支付详细指南:基于PayPal-PHP-SDK进行接口对接
- 论文总结(3):Intelligent Traffic Monitoring Systems for Vehicle Classification: A Survey
- 【金蝶】金蝶KIS专业版9.1清理用户名密码
- 开启Win7快速启动栏
- Android程序崩溃异常收集框架