mybatis-config.xml
SeckKillDao.xml
## SecKillDao.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.dangkei.dao.SecKillDao">
<!--目的:为dao接口方法提供sql语句配置
即针对dao接口中的方法编写我们的sql语句-->
<update id="reduceNumber">
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 * from seckill where seckill_id = #{seckillId}
</select>
<select id="queryAll" resultType="SecKill">
select * from seckill ORDER BY create_time DESC
limit #{offset},#{limit}
</select>
</mapper>## SuccessKilledMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.dangkei.dao.SuccessKillDao">
<insert id="insertSuccessKilled">
<!--当出现主键冲突(即重复秒杀),报错,如果不想让程序报错,加入ignore-->
Insert ignore INTO success_killed(seckill_id,user_phone,state,)
VALUES(#{seckillId},#{userPhone},0)
</insert>
<select id="queryByIdWithSeckill" resultType="cn.dangkei.entity.SuccessKilled">
<!--根据seckillId查询SuceessKilled对象,并携带Seckill对象-->
<!--如何告诉mybatis把结果映射到SuccessKill属性同时映射到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>
mapper写法
配置全局属性:
使用jdbc的getGeneratedKeys 获取数据库自增主键
使用列别名替代列名,自动转换为entity里的属性 useColumnLabel
开启驼峰命名转换 mapUnderscoreCamelCase
https://mybatis.org/mybatis-3/zh/getting-started.html
dao具体SQL实现
mybatis 最常用的配置
mybatis xml
mapper作用
<?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 select name as title from table --> <setting name="userColumnLabel" value="true"/> <!--开启驼峰命名转换:Table(create_time) ->Entity(createTime)--> <setting name="mapUnderscoreCamelCase" value="true"/> </settings> </configuration>
<![CDATA[ <= ]]> ---- 会告诉XML <= 不是XML的语句
mybatis配置相关驼峰,支持别名
https://github.com/geekyijun/seckill/
【mapper-SeckillDao.xml】
Resource –> new -> directory创建一个目录放置mybatis的sql的映射”mapper”
在mapper下创建映射关系。Mapper->new->file创建SeckillDao.xml(命名规范:DAO的名字.xml). 为DAO方法的接口提供sql语句
实现SeckillDao.xml
reduceNumber减库存
queryById根据id查询秒杀对象
queryALL根据偏移量查询秒杀商品列表
【mybatis-config.xml】
Resource –> new -> file 创建一个mybatis全局的配置文件”mybatis-config.xml”
从官方文档找到mybatis的全局配置 XML的一个标签约束
<configuration>
<settings>
配置全局属性:
数据库自增主键值
useGeneratedKeys = true
列别名/开启驼峰
mybatis xml配置自增字段
<![CDATA[ <= ]]>