Freemarker具有丰富前端展现能力,SpringBoot默认使用Freemarker展现前台页面。
POM.xml
4.0.0
com.test
Proj_Good
war
0.0.1-SNAPSHOT
Proj_Good Maven Webapp
http://maven.apache.org
org.springframework.boot
spring-boot-starter-parent
1.5.6.RELEASE
junit
junit
3.8.1
test
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-data-redis
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.0
org.springframework.boot
spring-boot-starter-freemarker
org.springframework.data
spring-data-solr
org.springframework.boot
spring-boot-devtools
true
true
com.alibaba
druid
1.1.6
com.alibaba
jconsole
com.alibaba
tools
mysql
mysql-connector-java
org.apache.tomcat.embed
tomcat-embed-jasper
javax.servlet
jstl
taglibs
standard
1.1.2
com.github.pagehelper
pagehelper-spring-boot-starter
1.1.2
commons-beanutils
commons-beanutils-core
1.8.3
Proj_Good
application.properties
#SpringBoot服务端口配置
server.port=6060
server.context-path=/
#spring.resources.static-locations=/css,/images,/img,/js
#SpringMVC JSP目录配置
#spring.mvc.view.prefix=/WEB-INF/jsp/
#spring.mvc.view.suffix=.jsp
spring.freemarker.template-loader-path=/WEB-INF/ftl/
spring.freemarker.suffix=.ftl
#Http编码配置
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
#数据源配置
spring.datasource.name=w2
spring.datasource.url=jdbc:mysql://localhost:3306/w2?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.maxActive=20
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1
#Mybatis实体类配置
mybatis.mapper-locations=classpath:mapper/*.xml
#Solr配置
spring.data.solr.host=http://localhost:8984/solr/new_core2
#日志配置
logging.file=d:/springboot.log
logging.level.com.test.mapper=DEBUG
logging.level.com.test.service.impl=DEBUG
Good.ftl
商品列表
Common.ftl
<#macro grid nameList valList colList btnName,btnOnclick>
全选
<#list nameList as c>
<#if c?string?ends_with("-order")>
<#local i=c?string?index_of("-order")>
${c?string?substring(0,i)}
<#if sort=="desc">
<#else>
<#else>
${c}
<#list valList as v>
<#list colList as c>
${v["${c}"]}
Add.ftl
商品添加
GoodCtrl.java
package com.test.ctrl;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.test.bean.GoodInfo;
import com.test.bean.TypeInfo;
import com.test.service.IGoodService;
import com.test.util.PageUtil;
import com.test.util.PageUtil2;
@Controller
public class GoodCtrl {
@Autowired
private IGoodService serv;
@RequestMapping("/list")
public String list(HttpServletRequest req,Integer page,Integer rows)
{
if(page == null)
page = 1;
if(rows == null)
rows = 4;
String gname = req.getParameter("gname");
String tname = req.getParameter("tname");
String sort = req.getParameter("sort");
if(sort == null || "".equals(sort))
sort = "asc";
System.out.println("gname="+gname+",tname="+tname+",sort="+sort);
//分页插件
PageHelper.startPage(page, rows);
List list = serv.findGood(gname, tname,sort);
//定义分页对象
PageInfo pi = new PageInfo(list);
Long total = pi.getTotal();
List goods = pi.getList();
//page 当前页
//rows 每页记录数
//total 全部记录数
//url 列表URL
String url = "/list";
//String pageHtml = PageUtil.toHtml(url, page, rows, total);
PageUtil2 pu2 = new PageUtil2(url, page, rows, total);
String pageHtml = pu2.toHtml();
req.setAttribute("pageHtml", pageHtml);
req.setAttribute("goods", goods);
req.setAttribute("gname", gname);
req.setAttribute("tname", tname);
req.setAttribute("sort", sort);
return "good";
}
@RequestMapping("/add")
public String add(HttpServletRequest req)
{
String id = req.getParameter("id");
List types = serv.findType();
if(id != null)
{
GoodInfo gi = serv.findGoodById(new Integer(id));
req.setAttribute("good", gi);
for(TypeInfo ti:types)
{
if(gi.getTypeId() == ti.getId())
ti.setSelected("selected");
}
}
else
{
req.setAttribute("good", new GoodInfo());
}
req.setAttribute("types", types);
return "add";
}
@RequestMapping("/save")
public String save(HttpServletRequest req,GoodInfo gi)
{
Integer id = gi.getId();
System.out.println("id==="+id);
if(id != null)
{
//修改
serv.updateGood(gi);
}
else
{
//新增
serv.saveGood(gi);
}
return "redirect:/list";
}
@RequestMapping("/delete")
public String delete(HttpServletRequest req,Integer[] chkid)
{
if(chkid != null)
{
for(Integer id:chkid)
serv.deleteGood(id);
}
return "redirect:/list";
}
}
IGoodService.java
package com.test.service;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.test.bean.GoodInfo;
import com.test.bean.TypeInfo;
public interface IGoodService {
public List findGood(String gname,String tname,String sort);
public List findType();
public GoodInfo findGoodById(Integer id);
public void saveGood(GoodInfo gi);
public void updateGood(GoodInfo gi);
public void deleteGood(Integer id);
}
GoodServiceImpl.java
package com.test.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.test.bean.GoodInfo;
import com.test.bean.TypeInfo;
import com.test.mapper.GoodMapper;
import com.test.service.IGoodService;
@Service
public class GoodServiceImpl implements IGoodService{
@Autowired
private GoodMapper mapper;
@Override
public List findGood(String gname, String tname,String sort) {
try
{
return mapper.findGood(gname, tname,sort);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
@Override
public List findType() {
try
{
return mapper.findType();
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
@Transactional(readOnly=true)
@Override
public GoodInfo findGoodById(Integer id) {
try
{
return mapper.findGoodById(id);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
@Transactional
@Override
public void saveGood(GoodInfo gi) {
try
{
mapper.saveGood(gi);
//typeServ.saveType()
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
public void updateGood(GoodInfo gi) {
try
{
mapper.updateGood(gi);
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Override
public void deleteGood(Integer id) {
try
{
mapper.deleteGood(id);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
代码下载
https://pan.baidu.com/s/15kWRW-0h5Tlx-CTpYJxECw