基于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. android dialog,popupwindow,toast窗口的添加机制

    Dialog 窗口添加机制 代码示例 首先举两个例子: 例子1 在Activity中 @OnClick(R.id.but) void onClick() { Log.d("LiaBin&qu ...

  2. vue组件父子间通信之综合练习--假的聊天室

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. python 正则表达式 re.sub & re.subn

    Grammar: re.sub(pattern, repl, string[, count]) 使用repl替换string中每一个匹配的子串后返回替换后的字符串.当repl是一个字符串时,可以使用\ ...

  4. codeforces#1215E. Marbles(状压DP)

    题目大意:给出一个由N个整数组成的序列,通过每次交换相邻的两个数,使这个序列的每个相同的数都相邻.求最小的交换次数. 比如给出序列:1 2 3 2 1 ,那么最终序列应该是 1 1 2 2 3 ,最小 ...

  5. 应用安全 - 路由器 - D-LINK - 漏洞汇总

    D-Link D-Link DSL-2750B任意命令执行漏洞 CVE-2019-16920 影响范围 DIR- DIR-866L DIR- DHP- CVE-2017-7405 Date 类型 嗅探 ...

  6. 应用安全-软件安全-漏洞CVE整理

    jira ssrf CVE-2019-8451 url = url + '/plugins/servlet/gadgets/makeRequest?url=' + host + '@www.baidu ...

  7. python基础-7.2文件内置属性__doc__ __file__ __package__ __cached__ __name__

    __doc__ #py文件开头的注释文字 __file__ #当前py文件的路径 __package__ #包含文件所在包,用 . 分隔,当前文件为None,导入的其他文件:指定文件所在包,用.分隔. ...

  8. El 表达式和 Jstl 标签库

    El 表达式学习 1. 什么是 EL 表达式 全称:Expression Language,一种写法非常简介的表达式.语法简单易懂,便于使用.表达式语言的灵感来自于 ECMAScript 和XPath ...

  9. 搜索(DFS)---矩阵中的连通分量数目

    矩阵中的连通分量数目 200. Number of Islands (Medium) Input: 11000 11000 00100 00011 Output: 3 题目描述:   给定一个矩阵,求 ...

  10. Vue 实现一个分页组件

    实现分页组件要分三个部分 样式,逻辑,和引用 首先新建一个vue文件用来承载组件内容 第一步:构建样式 <template> <nav> <ul class=" ...