porm文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itlaoqi</groupId>
<artifactId>babytun</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>babytun</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
main文件
package com.itlaoqi.babytun;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.itlaoqi.babytun") //mybatis在SpringBoot启动的时候自动扫描mybatis实现的接口
public class BabytunApplication {
public static void main(String[] args) {
SpringApplication.run(BabytunApplication.class, args);
}
}
controller文件
package com.itlaoqi.babytun.controller;
import com.itlaoqi.babytun.entity.Goods;
import com.itlaoqi.babytun.service.GoodsService;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import org.slf4j.*;
@Controller
public class GoodsController {
Logger logger = LoggerFactory.getLogger(GoodsController.class);
@Resource
private GoodsService goodsService;
@GetMapping("/goods") //http://localhost/goods?gid=xxx
public ModelAndView showGoods(Long gid){
logger.info("gid:" + gid);
ModelAndView mav = new ModelAndView("/goods");
Goods goods = goodsService.getGoods(gid);
mav.addObject("goods", goods);
mav.addObject("covers", goodsService.findCovers(gid));
mav.addObject("details", goodsService.findDetails(gid));
mav.addObject("params", goodsService.findParams(gid));
return mav;
}
}
service文件
package com.itlaoqi.babytun.service;
import com.itlaoqi.babytun.dao.GoodsCoverDAO;
import com.itlaoqi.babytun.dao.GoodsDAO;
import com.itlaoqi.babytun.dao.GoodsDetailDAO;
import com.itlaoqi.babytun.dao.GoodsParamDAO;
import com.itlaoqi.babytun.entity.Goods;
import com.itlaoqi.babytun.entity.GoodsCover;
import com.itlaoqi.babytun.entity.GoodsDetail;
import com.itlaoqi.babytun.entity.GoodsParam;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class GoodsService {
@Resource
private GoodsDAO goodsDAO;
@Resource
private GoodsCoverDAO goodsCoverDAO;
@Resource
private GoodsDetailDAO goodsDetailDAO;
@Resource
private GoodsParamDAO goodsParamDAO;
//view -> controller -> service -> dao
public Goods getGoods(Long goodsId) {
return goodsDAO.findById(goodsId);
}
public List<GoodsCover> findCovers(Long goodsId){
return goodsCoverDAO.findByGoodsId(goodsId);
}
public List<GoodsDetail> findDetails(Long goodsId){
return goodsDetailDAO.findByGoodsId(goodsId);
}
public List<GoodsParam> findParams(Long goodsId){
List list = goodsParamDAO.findByGoodsId(goodsId);
return list;
}
}
Dao文件
package com.itlaoqi.babytun.dao;
import com.itlaoqi.babytun.entity.Goods;
public interface GoodsDAO {
public Goods findById(Long goodsId);
}
entity 文件
package com.itlaoqi.babytun.entity;
public class Goods {
private Long goodsId;
private String title;
private String subTitle;
private Float originalCost;
private Float currentPrice;
private Float discount;
private Integer isFreeDelivery;
private Long categoryId;
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSubTitle() {
return subTitle;
}
public void setSubTitle(String subTitle) {
this.subTitle = subTitle;
}
public Float getOriginalCost() {
return originalCost;
}
public void setOriginalCost(Float originalCost) {
this.originalCost = originalCost;
}
public Float getCurrentPrice() {
return currentPrice;
}
public void setCurrentPrice(Float currentPrice) {
this.currentPrice = currentPrice;
}
public Float getDiscount() {
return discount;
}
public void setDiscount(Float discount) {
this.discount = discount;
}
public Integer getIsFreeDelivery() {
return isFreeDelivery;
}
public void setIsFreeDelivery(Integer isFreeDelivery) {
this.isFreeDelivery = isFreeDelivery;
}
public Long getCategoryId() {
return categoryId;
}
public void setCategoryId(Long categoryId) {
this.categoryId = categoryId;
}
}
mapper文件
<?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.itlaoqi.babytun.dao.GoodsDAO">
<select id="findById" parameterType="long" resultType="com.itlaoqi.babytun.entity.Goods">
select * from t_goods where goods_id = #{value}
</select>
</mapper>
application.yml文件
server:
port: 80
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/babytun?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
mvc:
favicon:
enabled: false
mybatis:
mapper-locations: classpath:/mapper/*.xml
configuration:
map-underscore-to-camel-case: true
templates目录下模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>${goods.title}</title>
<link href="./layui/css/layui.css" rel="stylesheet">
<script src="./layui/layui.all.js"></script>
<style>
.bb-info li {
margin-top: 20px;
}
.bb-description img {
width: 100%;
}
.bb-param td:first-child {
background-color: #eeeeee;
}
.layui-this a{
font-size: 18px;
}
</style>
</head>
<body style="background-color: #eeeeee">
<ul class="layui-nav layui-bg-green">
<div class="layui-container">
<li class="layui-nav-item" style="background-color: orange;margin-left: -14px"><a href="javascript:void(0)" style="font-size: 18px;color: white">宝宝团商城</a></li>
<li class="layui-nav-item layui-this"><a href="">宝宝团</a></li>
<li class="layui-nav-item"><a href="">全球购</a></li>
<li class="layui-nav-item"><a href="">旗舰店</a></li>
<li class="layui-nav-item"><a href="">宝宝社区</a></li>
</div>
</ul>
<div class="layui-container" style="padding: 10px;border: 1px solid #ccc;background-color:white">
<span class="layui-breadcrumb" style="visibility: visible;">
<a href="/">首页</a><span lay-separator="">/</span>
<a><cite>${goods.title}</cite></a>
</span>
<div class="layui-row" style="padding-top: 10px">
<div class="layui-col-xs4">
<div class="layui-carousel" id="test1">
<div carousel-item>
<#list covers as c>
<div>
<img src="${c.gcPicUrl}" style="width:100%">
</div>
</#list>
</div>
</div>
</div>
<div class="layui-col-xs8" style="padding: 10px">
<ul class="bb-info">
<li>
<h2>${goods.title}</h2>
</li>
<li class="layui-bg-green" style="padding:10px;line-height: 30px">
${goods.subTitle}
</li>
<li style="color: darkgrey">
<span>宝宝团价:</span><span style="font-size: 26px;color: orange;font-weight: bold">${goods.currentPrice?string('¥0.00')}</span><span
style="text-decoration: line-through">¥${goods.originalCost?string('¥0.00')}</span>
</li>
<li>
<span>运费: 6.0元 <#if goods.isFreeDelivery == 1>满58.0元包邮</#if></span>
</li>
<li>
数量:
<div class="layui-btn-group">
<button class="layui-btn layui-btn-primary layui-btn-sm">
<span style="font-size: 18px">-</span></button>
<button class="layui-btn layui-btn-primary layui-btn-sm" style="width: 50px">1</button>
<button class="layui-btn layui-btn-primary layui-btn-sm"><span style="font-size: 18px">+</span>
</button>
</div>
</li>
<li>
<button class="layui-btn layui-btn-radius layui-btn-normal">立即购买</button>
<button class="layui-btn layui-btn-radius layui-btn-danger">加入购物车</button>
</li>
</ul>
</div>
</div>
<div class="layui-row">
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<ul class="layui-tab-title">
<li class="layui-this">产品详情</li>
<li>产品参数</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show bb-description layui-col-xs8 layui-col-xs-offset2">
<#list details as d>
<img src="${d.gdPicUrl}">
</#list>
</div>
<div class="layui-tab-item layui-col-xs8 layui-col-xs-offset2">
<table class="layui-table bb-param" lay-size="lg">
<colgroup>
<col width="30%">
<col width="70%">
</colgroup>
<tbody>
<#list params as p>
<tr>
<td>${p.gpParamName}</td>
<td>${p.gpParamValue}</td>
</tr>
</#list>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<script>
//由于模块都一次性加载,因此不用执行 layui.use() 来加载对应模块,直接使用即可:
;!function () {
var layer = layui.layer
, form = layui.form;
}();
</script>
<script>
layui.use('carousel', function () {
var carousel = layui.carousel;
//建造实例
carousel.render({
elem: '#test1'
, width: '380px' //设置容器宽度
, height: '380px'
, arrow: 'hover' //始终显示箭头
, anim: 'fade' //切换动画方式
});
});
</script>
</body>
</html>