一、实现通用页面跳转
1、通用页面跳转的Controller代码
package com.taotao.manager.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 页面Controller
* @author Administrator
*
*/
@Controller
@RequestMapping("page")
public class PageController {
@RequestMapping(value="{pageName}")
public String toPage(@PathVariable String pageName){
return pageName;
}
}
2、访问页面效果
二、实现使用域名访问后台系统
1、使用ip地址访问存在的问题
开发环境和测试环境的ip不一样,每次环境变化时,都需要修改访问地址。
页面加载资源文件,有可能使用url的全路径,一旦更换环境(ip变了),资源文件就无法加载了。
ip地址没有意义,不容易记忆,用户不会通过ip访问,一般通过域名访问
2、使用域名进行访问
(1)、使用域名访问原理
(2)、修改本地hosts文件中的域名映射
(3)、访问效果
3、使用SwitchHosts进行管理
注意:SwitchHosts软件在本博客的资源文件中有
(1)、打开软件,设置本地方案
(2)、编写域名映射,点击切换配置
三、Nginx
1、Nginx介绍
2、Nginx反向代理
反向代理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。此时代理服务器对外就表现为一个反向代理服务器。
3、Nginx目录结构
注意:Nginx软件在本博客资源文件中有
4、Nginx配置文件
5、Nginx三个命令
启动:start nginx.exe
停止:nginx.exe –s stop
重载:nginx.exe –s reload
出现问题,查看日志文件
发现是端口号占用,使用命令查看端口号使用情况
查看任务管理器中占用的进程
解决问题:最终发现是taotao-manager项目占用了80端口,因此将taotao-manager项目端口号改为8080,将taotao-manager-web项目端口号改为8081
再次启动nginx,查看任务管理器,发现只有两个nginx进程即为成功启动
访问项目,实现nginx反向代理不需要写端口号的操作
6、Nginx访问流程
四、实现基础Service -- BaseService
1、为何要用BaseService
一般在项目开始时,就会编写BaseSerivce,否则后续编写BaseService时候,需要对所有service进行改造,增加开发成本
2、BaseService中常用的方法
queryById queryAll queryCountByWhere queryListByWhere queryByPage queryOne save updateById deleteById deleteByIds
3、创建BaseService接口
package com.taotao.manager.service;
import java.util.List;
/**
* 通用Service层接口
* @author Administrator
*
* @param <T>
*/
public interface BaseService<T> {
/**
* 根据id查询
*
* @param id
* @return
*/
public T queryById(Long id);
/**
* 查询所有
*
* @return
*/
public List<T> queryAll();
/**
* 根据条件查询数据条数
*
* @param t
* @return
*/
public Integer queryCountByWhere(T t);
/**
* 根据条件查询结果集
*
* @param t
* @return
*/
public List<T> queryListByWhere(T t);
/**
* 分页查询
*
* @param page
* @param rows
* @return
*/
public List<T> queryByPage(Integer page, Integer rows);
/**
* 查询一条数据
*
* @param t
* @return
*/
public T queryOne(T t);
/**
* 新增,不忽略空字段
*
* @param t
*/
public void save(T t);
/**
* 新增,忽略空字段
*
* @param t
*/
public void saveSelective(T t);
/**
* 根据id更新,不忽略空字段
*
* @param t
*/
public void updateById(T t);
/**
* 根据id更新,忽略空字段
*
* @param t
*/
public void updateByIdSelective(T t);
/**
* 根据id删除
*
* @param id
*/
public void deleteById(Long id);
/**
* 根据ids批量删除
*
* @param ids
*/
public void deleteByIds(List<Object> ids);
}
4、创建BaserServiceImpl实现类
package com.taotao.manager.service.impl;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.github.abel533.entity.Example;
import com.github.abel533.entity.Example.Criteria;
import com.github.abel533.mapper.Mapper;
import com.github.pagehelper.PageHelper;
import com.taotao.manager.service.BaseService;
/**
* 通用实现类
* @author Administrator
*
* @param <T>
*/
public class BaseServiceImpl<T> implements BaseService<T> {
//注入mapper,此处必须使用@Autowired注解,这种方式叫做泛型注入,是spring4的新特性
@Autowired
private Mapper<T> mapper;
/**
* 使用构造方法,创建实现类的时候获取泛型的class
*/
private Class<T> clazz;
public BaseServiceImpl() {
//获取父类的class类型
Type superclass = this.getClass().getGenericSuperclass();
//强转为子类,获取子类泛型
ParameterizedType type = (ParameterizedType) superclass;
//获取子类的字节码类型
clazz = (Class<T>) type.getActualTypeArguments()[0];
}
/**
* 根据Id查询
*/
public T queryById(Long id) {
return mapper.selectByPrimaryKey(id);
}
/**
* 查询所有
*/
public List<T> queryAll() {
List<T> list = mapper.select(null);
return list;
}
/**
* 根据条件查询记录数
*/
public Integer queryCountByWhere(T t) {
int count = this.mapper.selectCount(t);
return count;
}
/**
* 根据条件查询集合
*/
public List<T> queryListByWhere(T t) {
List<T> list = this.mapper.select(t);
return list;
}
/**
* 根据分页条件查询
*/
public List<T> queryByPage(Integer page, Integer rows) {
// 设置分页参数
PageHelper.startPage(page, rows);
//执行查询
List<T> list = this.mapper.select(null);
return list;
}
/**
* 根据条件查询一个
*/
public T queryOne(T t) {
T result = this.mapper.selectOne(t);
return result;
}
/**
* 新增
*/
public void save(T t) {
this.mapper.insert(t);
}
/**
* 新增
*/
public void saveSelective(T t) {
this.mapper.insertSelective(t);
}
/**
* 不会略null更新
*/
public void updateById(T t) {
this.mapper.updateByPrimaryKey(t);
}
/**
* 忽略null更新
*/
public void updateByIdSelective(T t) {
this.mapper.updateByPrimaryKeySelective(t);
}
/**
* 根据主键删除
*/
public void deleteById(Long id) {
this.mapper.deleteByPrimaryKey(id);
}
/**
* 根据id批量删除
*/
public void deleteByIds(List<Object> ids) {
//声明Example
Example example = new Example(this.clazz);
//获取条件对象
Criteria criteria = example.createCriteria();
//设置条件
criteria.andIn("id", ids);
//执行删除操作
this.mapper.deleteByExample(example);
}
}
5、改造商品类目的service和controller代码
(1)、ItemCatService接口
package com.taotao.manager.service;
import com.taotao.manager.pojo.ItemCat;
/**
* 商品类目业务层接口
* @author Administrator
*
*/
public interface ItemCatService extends BaseService<ItemCat> {
}
(2)、ItemCatService实现类
package com.taotao.manager.service.impl;
import org.springframework.stereotype.Service;
import com.taotao.manager.pojo.ItemCat;
import com.taotao.manager.service.ItemCatService;
/**
* 商品类目业务层实现类
* @author Administrator
*
*/
@Service
public class ItemCatServiceImpl extends BaseServiceImpl<ItemCat> implements ItemCatService {
}
(3)、ItemCatCotroller代码
package com.taotao.manager.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.taotao.manager.pojo.ItemCat;
import com.taotao.manager.service.ItemCatService;
/**
* 商品类目的web层
* @author Administrator
*
*/
@Controller
@RequestMapping("/item/cat")
public class ItemCatController {
@Autowired
private ItemCatService itemCatService;
/**
* 分页查询商品类目
* @PathVariable:将url中的参数映射的方法参数中
* @RequestParam:将url中?号后面的参数映射到方法参数中
* @param page
* @param rows
* @return
*/
@RequestMapping(value="query/{page}")
@ResponseBody
public List<ItemCat> queryItemCatByPage(@PathVariable Integer page, @RequestParam(value="row") Integer rows){
//调用服务进行分页查询
List<ItemCat> list = this.itemCatService.queryByPage(page, rows);
return list;
}
}
6、测试运行
五、实现后台新增商品中的类目选择功能
1、类目选择功能按钮位置
2、改造BaseServiceImpl,使用泛型继承限定泛型
修改save方法
/**
* 新增
*/
public void save(T t) {
// 判断是否有新增时间
if (t.getCreated() == null) {
// 如果没有设置,则在此处设置新增时间和修改时间
t.setCreated(new Date());
t.setUpdated(t.getCreated());
} else if (t.getUpdated() == null) {
// 如果用户只指定了创建时间,没有修改时间,则指定修改时间
t.setUpdated(t.getCreated());
}
this.mapper.insert(t);
}
/**
* 新增
*/
public void saveSelective(T t) {
// 判断是否有新增时间
if (t.getCreated() == null) {
// 如果没有设置,则在此处设置新增时间和修改时间
t.setCreated(new Date());
t.setUpdated(t.getCreated());
} else if (t.getUpdated() == null) {
// 如果用户只指定了创建时间,没有修改时间,则指定修改时间
t.setUpdated(t.getCreated());
}
this.mapper.insertSelective(t);
}
3、jsp页面中的选择类目按钮
(1)、jsp中按钮位置
(2)、点击选择类目按钮触发的事件
4、修改ItemCat中的get方法
5、后台获取类目树数据的方法
(1)、ItemCatController中获取节点数据的方法
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<ItemCat> queryItemCatByParentId(@RequestParam(value = "id", defaultValue = "0") Long parentId){
//根据父节点id获取类目集合
List<ItemCat> list = this.itemCatService.queryItemCatByParentId(parentId);
return list;
}
(2)、ItemCatService接口和实现类中的方法
package com.taotao.manager.service;
import java.util.List;
import com.taotao.manager.pojo.ItemCat;
/**
* 商品类目业务层接口
* @author Administrator
*
*/
public interface ItemCatService extends BaseService<ItemCat> {
/**
* 根据父节点id获取子节点商品类目集合
* @param parentId
* @return
*/
public List<ItemCat> queryItemCatByParentId(Long parentId);
}
package com.taotao.manager.service.impl;
import java.util.List;
import org.springframework.stereotype.Service;
import com.taotao.manager.pojo.ItemCat;
import com.taotao.manager.service.ItemCatService;
/**
* 商品类目业务层实现类
* @author Administrator
*
*/
@Service
public class ItemCatServiceImpl extends BaseServiceImpl<ItemCat> implements ItemCatService {
/**
* 根据父节点获取子节点集合
*/
public List<ItemCat> queryItemCatByParentId(Long parentId) {
//设置条件
ItemCat itemCat = new ItemCat();
itemCat.setParentId(parentId);
//执行查询
List<ItemCat> list = super.queryListByWhere(itemCat);
return list;
}
}
6、测试运行
六、新增商品
1、导入商品表
2、导入pojo类
3、编写ItemMapper和ItemDescMapper接口
ItemMapper.java
package com.taotao.manager.mapper;
import com.github.abel533.mapper.Mapper;
import com.taotao.manager.pojo.Item;
/**
* 商品操作的持久层接口
* @author Administrator
*
*/
public interface ItemMapper extends Mapper<Item> {
}
package com.taotao.manager.mapper;
import com.github.abel533.mapper.Mapper;
import com.taotao.manager.pojo.ItemDesc;
/**
* 商品描述操作的持久层接口
* @author Administrator
*
*/
public interface ItemDescMapper extends Mapper<ItemDesc> {
}
4、编写业务层接口和实现类
ItemService.java
package com.taotao.manager.service;
import com.taotao.manager.pojo.Item;
/**
* 商品操作业务层接口
* @author Administrator
*
*/
public interface ItemService extends BaseService<Item>{
}
ItemDescService.java
package com.taotao.manager.service;
import com.taotao.manager.pojo.ItemDesc;
/**
* 商品描述操作业务层接口
* @author Administrator
*
*/
public interface ItemDescService extends BaseService<ItemDesc>{
}
ItemServiceImpl.java
package com.taotao.manager.service.impl;
import org.springframework.stereotype.Service;
import com.taotao.manager.pojo.Item;
import com.taotao.manager.service.ItemService;
/**
* 商品操作业务层实现类
* @author Administrator
*
*/
@Service
public class ItemServiceImpl extends BaseServiceImpl<Item> implements ItemService {
}
ItemDescServiceImpl.java
package com.taotao.manager.service.impl;
import org.springframework.stereotype.Service;
import com.taotao.manager.pojo.ItemDesc;
import com.taotao.manager.service.ItemDescService;
/**
* 商品描述业务层实现类
* @author Administrator
*
*/
@Service
public class ItemDescServiceImpl extends BaseServiceImpl<ItemDesc>implements ItemDescService {
}
5、声明dubbo服务的发布和调用
applicationContext-service.xml
springmvc.xml
6、前端页面中富文本编辑器提交数据的分析
7、后台添加商品代码的实现
ItemController.java
package com.taotao.manager.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.taotao.manager.pojo.Item;
import com.taotao.manager.service.ItemService;
/**
* 商品操作的表现层
* @author Administrator
*
*/
@Controller
@RequestMapping(value="item")
public class ItemController {
@Autowired
private ItemService itemService;
/**
* 新增商品
*/
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public void saveItem(Item item, String desc){
itemService.saveItem(item, desc);
}
}
ItemService.java
/**
* 保存商品
* @param item
* @param desc
*/
public void saveItem(Item item, String desc);
ItemServiceImpl.java
package com.taotao.manager.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.taotao.manager.pojo.Item;
import com.taotao.manager.pojo.ItemDesc;
import com.taotao.manager.service.ItemDescService;
import com.taotao.manager.service.ItemService;
/**
* 商品操作业务层实现类
* @author Administrator
*
*/
@Service
public class ItemServiceImpl extends BaseServiceImpl<Item> implements ItemService {
@Autowired
private ItemDescService itemDescService;
/**
* 新增商品
*/
public void saveItem(Item item, String desc) {
//设置商品数据
item.setStatus(1);
//保存商品基础数据
super.save(item);
//保存商品描述信息
ItemDesc itemDesc = new ItemDesc();
itemDesc.setItemDesc(desc);
itemDesc.setItemId(item.getId());
this.itemDescService.save(itemDesc);
}
}