SSM综合项目实战(TTSC) -- day03 Nginx,类目选择,新增商品

一、实现通用页面跳转

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> {

}


ItemDescMapper.java
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);
		
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值