基于MyBatis实现Dao编程

1、建立mybatis-config.xml文件

<?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>
   <!-- 配置全局属性 -->
   <settings>
      <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
      <setting name="useGeneratedKeys" value="true" />

<!-- 使用列别名替换列名 默认:true -->
      <setting name="useColumnLabel" value="true" />

<!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} -->
      <setting name="mapUnderscoreToCamelCase" value="true" />
   </settings>
</configuration>

2、在resources下创建mapper包放映射文件SecKillDao.xml和SuccessKilledDao.xml

SecKillDao.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">
<mapper namespace="org.secKill.dao.SecKillDao">
   <!-- 目的:为dao接口方法提供sql语句配置 -->
   <update id="reduceNumber">
      <!-- 具体的sql -->
      UPDATE seckill
      SET number = number - 1
      WHERE
         seckill_id = #{secKillId}
      AND start_time <![CDATA[ <= ]]> #{killTime}
      AND end_time >= #{killTime}
      AND number > 0
   </update>
   
   <select id="queryById" resultType="SecKill" parameterType="long">
      SELECT
         seckill_id,
         NAME,
         number,
         start_time,
         end_time,
         create_time
      FROM
         seckill
      WHERE
         seckill_id = #{secKillId}
   </select>
   
   <select id="queryAll" resultType="SecKill">
      SELECT
         seckill_id,
         NAME,
         number,
         start_time,
         end_time,
         create_time
      FROM
         seckill
      ORDER BY
         create_time DESC
      LIMIT #{offset},
      #{limit}
   </select>
   
   <select id="killByProcedure" statementType="CALLABLE">
      call execute_seckill (
         #{secKillId, jdbcType = BIGINT, mode = IN },
         #{phone, jdbcType = BIGINT, mode = IN },
         #{killTime, jdbcType = TIMESTAMP, mode = IN },
         #{result, jdbcType = INTEGER, mode = OUT }
      )
   </select>
</mapper>

SuccessKilledDao.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">
<mapper namespace="org.secKill.dao.SuccessKilledDao">
   <insert id="insertSuccessKilled">
      <!-- 主键冲突,报错 -->
      INSERT ignore INTO success_killed (seckill_id, user_phone, state)
      VALUES (#{secKillId}, #{userPhone}, 0)
   </insert>
   
   <select id="queryByIdWithSeckill" resultType="SuccessKilled">
      <!-- 如何告诉MyBatis把结果映射到SuccessKilled同时映射seckill属性 -->
      <!-- 可以自由控制SQL -->
      SELECT
         sk.seckill_id,
         sk.user_phone,
         sk.create_time,
         sk.state,
         s.seckill_id "seckill.seckill_id",
         s.`name` "seckill.name",
         s.number "seckill.number",
         s.start_time "seckill.start_time",
         s.end_time "seckill.end_time",
         s.create_time "seckill.create_time"
      FROM
         success_killed sk
      INNER JOIN seckill s ON sk.seckill_id = s.seckill_id
      WHERE
         sk.seckill_id = #{secKillId}
      AND sk.user_phone = #{userPhone}
   </select>
</mapper>

基于MyBatis实现Dao编程的更多相关文章

  1. 基于Mybatis的Dao层的开发

    基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...

  2. 基于Mybatis的Dao层开发

    转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 Sq ...

  3. 基于MyBatis实现Dao理论

    基于MyBatis实现Dao理论 推荐使用xml提供sql 实现接口推荐使用Mapper自动实现DAO接口,让我们更关注sql书写本身

  4. mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类

    相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...

  5. 基于mybatis的CRUD

    u  基于Mybatis的CRUD u  掌握MyBatis的结果类型-resultMap和resultType u  掌握MyBatis的参数类型 u  掌握#和$两种语法 1      基于myb ...

  6. 基于mybatis的BaseDao及BaseService深度结合(转)

    原文地址:http://zhaoshijie.iteye.com/blog/2003209 关键字:Mybatis通用DAO设计封装(mybatis) 说明: mybatis默认分页机制为逻辑分页,所 ...

  7. mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析

    序言 在开始正文之前,首先解释Dao接口和XML文件里的SQL是如何一一对应的? 一句话讲完就是:mybatis 会先解析这些xml 文件,通过 xml 文件里面的命名空间 (namespace)跟d ...

  8. MyBatis学习--mybatis开发dao的方法

    简介 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法. 主要概念介绍: MyBatis中进行Dao开发时候有几个重要的类,它们是SqlSessionFac ...

  9. 四 mybatis开发dao的方法

    mybatis开发dao的方法 1.1     SqlSession使用范围 1.1.1     SqlSessionFactoryBuilder //以流的方式读取总的配置文件 Reader rea ...

随机推荐

  1. jmeter _Random函数生成随机数

    因对发送邮件接口做压测发现相同数据对服务器的压力很小所以需要每次发送请求都需要不同的参数,所以要对某个字段做随机数 选项中-函数助手对话框

  2. mysql查询字段类型为json时的两种查询方式。

    表结构如下: id        varchar(32) info     json 数据: id = info = {"age": "18","di ...

  3. Lpl and Energy-saving Lamps

    During tea-drinking, princess, amongst other things, asked why has such a good-natured and cute Drag ...

  4. python 学习第四十七天shelve模块

    shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式. 1,序列化 import shelve f=shelve.open('she ...

  5. python的cls,self,classmethod,staticmethod

    python类里会出现这三个单词,self和cls都可以用别的单词代替,类的方法有三种, 一是通过def定义的 普通的一般的,需要至少传递一个参数,一般用self,这样的方法必须通过一个类的实例去访问 ...

  6. WinForm:如何在ListBox中添加CheckBox

    http://www.cnblogs.com/myshell/archive/2010/09/24/1834184.html 最近因为做WinForm的项目,遇到这个问题,当时以为CheckedLis ...

  7. VS2015-MFC基础教程-应用程序工程中文件的组成结构

    VS2015应用程序向导生成框架程序后,我们可以在之前设置的Location下看到此文件夹中包含了几个文件和一个以工程名命名的子文件夹,这个子文件夹中又包含了若干个文件和一个res文件夹,创建工程时的 ...

  8. asp.net webapi自定义输出结果类似Response.Write()

    asp.net webapi自定义输出结果类似Response.Write()   [HttpGet] public HttpResponseMessage HelloWorld() { string ...

  9. Python之路-条件控制&循环语句&列表推导式&常用函数

    一.什么是条件控制语句 条件控制语句,也可以称之为判断语句,通过一条或多条的执行结果来决定接下来要执行的代码块. 二.if语句 if语句是用来进行判断的,最简答的if语句只有一个判断一个操作. 语法: ...

  10. mysql导出函数或者存储过程 设置显示方式

    mysql导出函数或者存储过程 mysqldump -hhostname -uusername -ppassword -ntd -R databasename > /app/backupflie ...