基于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. 分享:陆行鸟BGM合集

    第39首是原版哦 https://pan.baidu.com/mbox/homepage?short=pMkAqhX

  2. struts2 token 防止表单重复提交

    1.jsp页面  输入框,提交按钮 <%@ page language="java" contentType="text/html" pageEncodi ...

  3. springboot启动时报错 错误: 找不到或无法加载主类 com.xxx.xxx.Application

    1. Q1 错误: 找不到或无法加载主类 com.xxx.xxx.Application 解决办法:啥也不动,maven clean下,重启 1. Q2 layui控制下拉框高度 解决 .layui- ...

  4. java二周的学习总结

    一转眼二周就过去了,个人觉得虽然java和C语言有差异,但差别并不大,因为语法语句方面都是差不多的,因为我上个学期并没有很认真的学好C语言,所以我这个学期更希望学好java,java方面还是挺有趣的, ...

  5. 1.go语言目录结构

    [root@localhost ~]# ll /go/ total drwxr-xr-x. root root May : api -rw-r--r--. root root May : AUTHOR ...

  6. #python# error:illegal multibyte sequence

    读取html遇到illegal multibyte sequence 1.第一种情况:更换编码方式 查看网页源码,找到charset,得到该网页编码方式 <meta http-equiv=&qu ...

  7. 说明一下 os.path 和 sys.path 分别代表什么?

    os.path 主要是用于对系统路径文件的操作. sys.path 主要是对Python解释器的系统环境参数的操作(动态的改变Python解释器搜索路径).

  8. python 定义模块作用及分类

    python把一个功能的模块归类,简单来说,模块是一个由Python代码组成的文件.模块可以定义函数,类和变量. 模块还可以包括可运行的代码. 1,python模块的作用 提高代码的方便维护 使用模块 ...

  9. React框架新闻网站学习过程中遇到的错误总结

    1.安装指定版本插件命令 npm install 插件名字@1.1.4(版本号) --save 或 yarn add 插件名字@1.1.4(版本号) --dev 2.Error:‘Link’ is n ...

  10. webpack打包发布项目

    1.打包 :npm run build 2.发布: 1)使用静态服务器工具包 npm install -g serve serve dist 访问:http://www.localhost.5000 ...