文章摘录自:http://blog.csdn.net/y172158950/article/details/17258377

1. select的映射

  1. <select id="selectPerson" parameterType="int" resultType="hashmap">
  2. select id, name, sex, updateTime from person where id =#{id};
  3. </select>
a) #{id}:创建预编译语句参数,占位符
b) parameterType:参数的类型,int类型
c)resultType:返回的结果集,封装为hashMap
  1. public Map<String, Object> selectPersonById(int id) {
  2. SqlSession session = DbFactory.getInstance().openSession();  //单例SqlSessionFactory工厂
  3. Map<String, Object> m = (Map<String, Object>) session.selectOne("com.yjq.entity.Person.selectPerson", id);
  4. session.commit();
  5. session.close();
  6. return m;
  7. }
  1. //output
  2. {id=4, sex=f, NAME=zql, updateTime=2013-12-10 14:18:11.0, SEX=f, name=zql, ID=4, UPDATETIME=2013-12-10 14:18:11.0}
d) 结果集为啥有大小写的key2份?神奇的mybatis啊。

2. insert,update,delete的映射

  1. <insert id="insertPerson" parameterType="com.yjq.entity.Person" useGeneratedKeys="true" keyProperty="id"> <!-- 将自增主键生成的值回写到对象  -->
  2. insert into person(name, sex, updateTime) values(#{name}, #{sex}, #{updateTime});
  3. </insert>
  4. <delete id="deletePerson" parameterType="int">
  5. delete from person where id=#{id};
  6. </delete>
  7. <update id="updatePerson" parameterType="com.yjq.entity.Person">
  8. update person set name=#{name}, sex=#{sex}, updateTime=#{updateTime} where id=#{id};
  9. </update>
a) parameterType="com.yjq.entity.Person":对象参数,#{name}表示Person对象的name属性。
b) useGeneratedKeys="true" keyProperty="id":只存在于insert命令,写这2个参数会将主键自增长的值回写到传入的参数对象。
  1. public Person insertPerson(Person p) {
  2. SqlSession session = DbFactory.getInstance().openSession();
  3. session.insert("com.yjq.entity.Person.insertPerson", p);
  4. session.commit();
  5. session.close();
  6. return p;
  7. }
  1. PersonDao dao = new PersonDao();
  2. Person p = new Person();
  3. p.setName("zql");
  4. p.setSex("f");
  5. p.setUpdateTime(new Date());
  6. System.out.println("------" + p.getId());
  7. dao.insertPerson(p);
  8. System.out.println(p.getId());
  1. //output(insert前id未赋值,insert后id=7)
  2. ------0
  3. 7
c) 返回值:insert,update,delete方法均返回int参数,表示操作了多少条数据
  1. int result = session.update("com.yjq.entity.Person.updatePerson", p);
d) 假设数据库不支持自增id,mybatis可以生成随机主键
  1. <insert id="insertPerson2" parameterType="com.yjq.entity.Person">
  2. <selectKey keyProperty="id" resultType="int" order="BEFORE">  <!-- 生成随机id数 -->
  3. select CONVERT(RAND()*1000000,SIGNED) a from dual;
  4. </selectKey>
  5. insert into person(id, name, sex, updateTime) values(#{id}, #{name}, #{sex}, #{updateTime});
  6. </insert>

mybatis_SQL映射(1)的更多相关文章

  1. mybatis_SQL映射(4)鉴别器

    摘录自:http://blog.csdn.net/y172158950/article/details/17505739 鉴别器:有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的 ...

  2. mybatis_SQL映射(3)

    文章摘录自:http://blog.csdn.net/y172158950/article/details/17304645 1. 表关联 a) 嵌套查询(传说中的1+N问题) <resultM ...

  3. mybatis_SQL映射(2)

    文章摘录自:http://blog.csdn.net/y172158950/article/details/17258377 1. sql的重用:定义一个sql片段,可在任何SQL语句中重用该片段. ...

  4. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

  5. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  6. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  7. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

  8. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  9. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系

    ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...

随机推荐

  1. Java笔记:字符串详解

    字符串详解 更新时间:2018-1-6 21:20:39 String 字符串创建 String str1="ABC";//推荐使用 String str2 = new Strin ...

  2. jQuery 核心函数 (十一)

    函数 描述 jQuery() 接受一个字符串,其中包含了用于匹配元素集合的 CSS 选择器. jQuery.noConflict() 运行这个函数将变量 $ 的控制权让渡给第一个实现它的那个库.

  3. Elasticsearch强制重置未分配的分片(unassigned)

    强制重置未分片的分片,这个问题源自于Elasticsearch维护中,Node意外退出的场景. 意外退出后Elasticsearch由于网络原因或者jvm性能压力,未能短时间内分配分片. 看一下分片的 ...

  4. css实现梯形标签页

    html <nav>click me</nav> css nav{ position: relative; display: inline-block; padding: 15 ...

  5. ssh的免密登陆

    想必大家都有使用ssh登陆的过程了,那么,怎么设置ssh免密登陆呢?下面有一些我的总结: 环境:服务器主.从 主服务器:192.168.1.1 从服务器:192.168.1.2 实现主服务器ssh登录 ...

  6. chrome调试工具高级不完整使用指南(优化篇)

    上一篇文章我们说了chrome调试工具的一些比较基础功能的用法,接下来我们要在这一篇文章中说一说,其他一些chrome调试工具的使用方法 2.1.5 Network模块 在netWork模块中,大致上 ...

  7. 云服务器 远程mysql 无法连接

    问题:mysql不管是用免安装版的,还是用直接安装的,还是用phpStudy直接发布的mysql服务.都只能用localhost登录,不能用服务器的ip进行远程访问 遇到这个问题.按照网上大家介绍的方 ...

  8. 在webstorm开发微信小程序之使用阿里自定义字体图标

    1.下载阿里图标,解压出来之后有个.css文件 然后复制这css里面的所有代码 2.新建一个wxss文件,例如我新建的就是iconfont.wxss,然后把刚才复制的所有代码,复制到这个文件里面去. ...

  9. Django—模板渲染

    参考文档: http://www.cnblogs.com/fnng/p/4373108.html https://code.ziqiangxuetang.com/django/django-intro ...

  10. html页面的音频问题

    导火线 : 负责了项目中的话务间模块,处理音频出了一点问题 之前的处理 : //循环播放声音 var dialAudioDocument = document.createElement('audio ...