用springmvc+spring+mybatis实现秒杀的DAO层实现
2017-12-13 19:40
393 查看
1、首先设计数据库表结构
在mysql中执行以上的sql脚本,完成数据库表创建。
2、在src/main/java下面创建实体类和dao接口
代码结构如下
3、配置mybatis的配置文件(mybatis-config.xml)
文件头部的声明可参考这里的xml头部声明,配置如下:
4、编写提供sql语句的xml配置文件,可在resources下新建mapper文件夹,然后新建dao的xml文件,例子(SeckillDao.xml):
5、[b]继续在resources下新建spring文件夹,然后方spring的配置文件,如spring-dao.xml:
同样的,xml头部声明需要去官网的API中查看,(小技巧:可以全局搜索“encoding=”UTF-8”“)。
6、在resources下创建jdbc.properties文件,内容为:
以上配置完成之后即可进行junit单元测试。
--创建数据库 CREATE DATABASE seckill; --使用数据库 use seckill; --创建秒杀库存表 CREATE TABLE seckill( 'seckill_id' bigint NOT NULL AUTO_INCREMENT COMMENT '商品库存id', 'name' VARCHAR(120) NOT NULL COMMENT '商品名称', 'number' int NOT NULL COMMENT '库存数量', 'start_time' TIMESTAMP NOT NULL COMMENT '秒杀开始时间', 'end_time' TIMESTAMP NOT NULL COMMENT '秒杀结束时间', 'create_time' TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (seckill_id), KEY idx_start_time(start_time), KEY idx_end_time(end_time), KEY idx_create_time(create_time) )ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT='秒杀库存表'; --初始化数据 INSERT INTO seckill(name,number,start_time,end_time) VALUES ('1000元秒杀iPhone6s',100,'2017-12-13 00:00:00','2017-12-14 00:00:00'), ('600元秒杀iPad',200,'2017-12-13 00:00:00','2017-12-14 00:00:00'), ('400元秒杀红米4',300,'2017-12-13 00:00:00','2017-12-14 00:00:00'), ('200元秒杀小米4',400,'2017-12-13 00:00:00','2017-12-14 00:00:00'); --秒杀成功明细表 --用户登陆认证相关信息 CREATE TABLE success_killed( 'seckill_id' bigint NOT NULL COMMENT '秒杀商品id', 'user_phone' bigint NOT NULL COMMENT '用户手机号', 'state' tinyint NOT NULL DEFAULT -1 COMMENT '状态标志:-1:无效;0:成功;1:已付款;2:已退货', 'create_time' TIMESTAMP NOT NULL COMMENT '创建时间', PRIMARY KEY (seckill_id,user_phone), KEY idx_create_time(create_time) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表'; --连接数据库控制台 mysql -uroot -p
在mysql中执行以上的sql脚本,完成数据库表创建。
2、在src/main/java下面创建实体类和dao接口
代码结构如下
3、配置mybatis的配置文件(mybatis-config.xml)
文件头部的声明可参考这里的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"/> <!--开启驼峰命名转换create_time -> createTime--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>
4、编写提供sql语句的xml配置文件,可在resources下新建mapper文件夹,然后新建dao的xml文件,例子(SeckillDao.xml):
<!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"> 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_timr,end_time,create_time FROM seckill order by create_time DESC limit #{offset},#{limit} </select> </mapper>
5、[b]继续在resources下新建spring文件夹,然后方spring的配置文件,如spring-dao.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--配置整合MyBatis过程--> <!--配置数据库相关参数--> <context:property-placeholder location="classpath:jdbc.properties"/> <!--数据库的连接池--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!--配置连接池属性--> <property name="driverClass" value="${driver}"/> <property name="jdbcUrl" value="${url}"/> <property name="user" value="${username}"/> <property name="password" value="${password}"/> <!--c3p0私有属性--> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <!--关闭连接后不自动提交--> <property name="autoCommitOnClose" value="false"/> <!--获取连接超时时间--> <property name="checkoutTimeout" value="1000"/> <!--获取连接失败的重试次数--> <property name="acquireRetryAttempts" value="2"/> </bean> <!--配置SqlSessionFactory对象--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--注入数据库连接池--> <property name="dataSource" ref="dataSource"/> <!--配置mybatis全局配置文件,mybatis-config.xml--> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!--扫描entity包,使用别名 --> <property name="typeAliasesPackage" value="org.seckill.entity"/> <!--扫描sql配置文件,mapper需要的配置文件--> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!--配置扫描DAO接口包,动态实现Dao接口,并注入到spring容器中--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--注入sqlSessionFactory--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!--给出需要扫描的Dao接口包--> <property name="basePackage" value="org.seckill.dao"/> </bean> </beans>
同样的,xml头部声明需要去官网的API中查看,(小技巧:可以全局搜索“encoding=”UTF-8”“)。
6、在resources下创建jdbc.properties文件,内容为:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/seckill?useUnicode=true&characterEncoding=utf8 username=root password=ug&eyEFeo08n
以上配置完成之后即可进行junit单元测试。
相关文章推荐
- springMVC+mybatis 之 借助SqlSessionTemplate 实现Dao层通用写法
- 基于SpringMVC+Spring+MyBatis实现秒杀系统【数据库接口】
- 基于SpringMVC+Spring+MyBatis实现秒杀系统【客户端交互】
- 基于SpringMVC+Spring+MyBatis实现秒杀系统【业务逻辑】
- 基于Spring+SpringMVC+MyBatis实现高并发秒杀APIM
- ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
- 基于SpringMVC+Spring+MyBatis实现秒杀系统【概况】
- 用spring+springMVC+mybatis实现模拟秒杀项目(一)
- SSM框架搭建(Spring+SpringMVC+MyBatis)与easyui集成并实现增删改查实现
- 微信小程序 websocket 实现SpringMVC+Spring+Mybatis
- spring mvc+spring+mybatis+ajax实现登录验证
- Maven + Spring MVC+Mybatis + MySQL +AngularJS + Bootstrap 实现简单微博应用(一)环境搭建
- spring4.x 纯注解方式 实现spring4 +mybatis+mvc
- SpringMvc+Mybatis实现一个简单人事管理系统(三)
- spring+spring mvc+mybatis+mysql+easyui实现的分页
- springMVC+MyBatis+Oracle+Web实现增删改查(附带完整案例+数据库数据)
- 原 Spring + SpringMVC + Mybatis 整合,实现 CRUD (增删改查)
- SpringMVC+mybatis+maven+Ehcache缓存实现
- springMVC+Mybatis多数据源实现
- SpringMVC+Spring+mybatis+redis项目从零开始--redis缓存策略和配置实现