显示商品详情
public interface ProductMapper {
//查询热销商品
List<Product> findHotList();
//显示商品详情
Product findByID(Integer id);
}
<?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.cy.store.mapper.ProductMapper">
<sql id="column">
id
category_id
item_type
title
sell_point
price
num
image
status
priority
created_time
modified_time
created_user
modified_user
</sql>
<resultMap id="ProductEntityMap" type="com.cy.store.entity.Product">
<!--将表的资源和类的属性不一致的字段进行匹配指定,名称一致的字段可以省略不写-->
<!--在定义映射规则时主键是不可以省略的-->
<id column="id" property="id"/>
<result column="category_id" property="categoryId"/>
<result column="item_type" property="itemType"/>
<result column="sell_point" property="sellPoint"/>
<result column="created_user" property="createdUser"/>
<result column="created_time" property="createdTime"/>
<result column="modified_user" property="modifiedUser"/>
<result column="modified_time" property="modifiedTime"/>
</resultMap>
<select id="findHotList" resultMap="ProductEntityMap">
select * from t_product where status=1 order by priority desc limit 0,4
</select>
<select id="findByID" resultMap="ProductEntityMap">
select * from t_product where id=#{id}
</select>
</mapper>
写service层
public interface IProductService {
List<Product> findHotProduct();
//显示商品详情
Product findProductById(Integer id);
}
@Service
public class IProductServiceImpl implements IProductService {
@Autowired
private ProductMapper productMapper;
@Override
public List<Product> findHotProduct() {
List<Product> hotList = productMapper.findHotList();
for (Product product:hotList){
product.setPriority(null);
product.setCreatedUser(null);
product.setCreatedTime(null);
product.setModifiedUser(null);
product.setModifiedTime(null);
}
return hotList;
}
@Override
public Product findProductById(Integer id) {
Product product = productMapper.findByID(id);
System.out.println(product);
if (product == null){
throw new ProductNotFoundException("商品不存在异常");
}
return product;
}
}
controller层
@RestController
@RequestMapping("products")
public class ProductController extends BaseController{
@Autowired
private IProductService productService;
@RequestMapping("hot_list")
public JsonResult<List<Product>> getHotList(){
List<Product> data = productService.findHotProduct();
return new JsonResult<>(OK,data);
}
@RequestMapping("{id}/details")
public JsonResult<Product> getProductDetails(@PathVariable("id") Integer id){
Product data = productService.findProductById(id);
return new JsonResult<>(OK,data);
}
}
前端页面
<script type="text/javascript">
let id = $.getUrlParam("id");
alert(id);
$(document).ready(function (){
$.ajax({
url:"/products/"+id+"/details",
dataType:"json",
type:"get",
success:function (data){
if (data.state==200){
$("#product-title").html(data.data.title);
$("#product-sell-point").html(data.data.sellPoint);
$("#product-price").html(data.data.price);
for (let i=1;i<=5;i++){
$("#product-image-"+i+"-big").attr("src",".."+data.data.image+i+"_big.png");
$("#product-image-"+i).attr("src",".."+data.data.image+i+".jpg");
}
}else if(data.state == 7001){
location.href="index.html";
}
},
error:function (data){
alert("展示详情信息产生未知错误"+data.message)
}
})
})
$("#btn-add-to-cart").click(function (){
$.ajax({
url:"/carts/add_cart",
dataType:"json",
data:{
"pid":id,
"amount":$("#num").val(),
},
type:"post",
success:function (data){
if (data.state==200){
alert("加入购物车成功")
}else{
alert("加入购物车失败");
}
},
error:function (data){
alert("加入购物车失败"+data.message)
}
})
})
</script>
订单页面
public interface OrderMapper {
Integer insertOrder(Order order);
Integer insertOrderItem(OrderItem orderItem);
}
<?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.cy.store.mapper.OrderMapper">
<sql id="column1">
uid,
recv_name,
recv_phone,
recv_province,
recv_city,
recv_area,
recv_address,
total_price,
status,
order_time,
pay_time,
created_user,
created_time,
modified_user,
modified_time
</sql>
<sql id="column2">
oid,
pid,
title,
image,
price,
num,
created_user,
created_time,
modified_user,
modified_time
</sql>
<resultMap id="OrderEntityMap" type="com.cy.store.entity.Order">
<!--将表的资源和类的属性不一致的字段进行匹配指定,名称一致的字段可以省略不写-->
<!--在定义映射规则时主键是不可以省略的-->
<id column="oid" property="oid"/>
<result column="recv_name" property="recvName"/>
<result column="recv_phone" property="recvPhone"/>
<result column="recv_province" property="recvProvince"/>
<result column="recv_city" property="recvCity"/>
<result column="recv_area" property="recvArea"/>
<result column="recv_address" property="recvAddress"/>
<result column="total_price" property="totalPrice"/>
<result column="pay_time" property="payTime"/>
<result column="created_user" property="createdUser"/>
<result column="created_time" property="createdTime"/>
<result column="modified_user" property="modifiedUser"/>
<result column="modified_time" property="modifiedTime"/>
</resultMap>
<!---id属性:表示映射的接口中方法的名称,直接在标签的内容部来编写SQL语句-->
<!--
useGeneratedKeys属性:表示开启某个字段的值递增(主键设置为递增)
keyProperty属性:标签将表中的哪个字段作为主键进行递增
-->
<insert id="insertOrder" useGeneratedKeys="true" keyProperty="aid">
insert into t_order (<include refid="column1"/>)
values(
#{uid},
#{recv_name},
#{recv_phone},
#{recv_province},
#{recv_city},
#{recv_area},
#{recv_address},
#{total_price},
#{status},
#{order_time},
#{pay_time},
#{created_user},
#{created_time},
#{modified_user},
#{modified_time}
)
</insert>
<insert id="insertOrderItem" useGeneratedKeys="true" keyProperty="aid">
insert into t_order_item (<include refid="column2"/>)
values(
#{oid},
#{pid},
#{title},
#{image},
#{price},
#{num},
#{created_user},
#{created_time},
#{modified_user},
#{modified_time}
)
</insert>
</mapper>
public interface IOrderService {
Integer insertOrder(Order order);
Integer insertOrderItem(OrderItem orderItem);
}
public class IOrderServiceImpl implements IOrderService {
@Autowired
private OrderMapper orderMapper;
@Override
public Integer insertOrder(Order order) {
return orderMapper.insertOrder(order);
}
@Override
public Integer insertOrderItem(OrderItem orderItem) {
return orderMapper.insertOrderItem(orderItem);
}
}