自学了几天多线程,写了一个实例,记录一下。
关于多线程实现购买商品业务,我的思路是:购买商品有两步,添加消费记录和减少商品库存,当然正常应用情况下肯定不止这两步,不过测试两步就够了,开两个线程,一条执行添加消费记录,另一条执行减少商品库存。
先搭建一个SSM项目(https://blog.csdn.net/rw4ta/article/details/104522286)
搭建成功后应该是这个样子。
dao接口
package com.example.demo.dao;
import com.example.demo.entity.Commodity;
import com.example.demo.entity.Consumption;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface UserDao {
public User user(@Param("name") String name, @Param("pass")String pass);//登录
public int addcommodity(Consumption consumption);//添加消费记录
public Commodity commodity(@Param("id")int id);//根据id获取商品详情
public int updatenum(@Param("id")int id,@Param("num")int num);//修改库存
}
Mapper.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="com.example.demo.dao.UserDao">
<select id="user" resultType="com.example.demo.entity.User">
select * from User where username=#{name} and `password`=#{pass}
</select>
<insert id="addcommodity">
insert into consumption(userid,commodityid,commoditynum)
values(#{userid},#{commodityid},#{commoditynum});
</insert>
<update id="updatenum">
update commodity set commoditynum=#{num} where id=#{id}
</update>