这是我的第一个SSM项目 也是我第一次系统的接触一个完整的框架,本项目分为前台和后台系统,分别是用户界面和管理员界面。主要技术为:Spring,Springmvc,mybatis,并且在前台的数据缓存中用到了基于No-sql技术的Redis。
我对这些技术的理解:
Spring:Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建,是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
Spring 的主要核心点:
Spring的优势:
1.低侵入式设计,代码污染极低
2.独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
3.Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
4.Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
5.Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
Mybatis:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
在使用Mybatis时,我使用了代码自动生成器 Generator,它可以根据数据库对象来自动生成实体类Model和映射Mapper。它提供了标准的增删改查功能,极大的增加了我的工作效率。
Mybatis的优势:
这是本次项目的一个重要核心点,单独使用Mybatis 是有很多限制的(比如无法实现跨越多个session的事务),而且很多业务系统本来就是使用spring来管理的事务,因此Mybatis 最好与spring集成起来使用。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
Redis 主要用在前台数据的操作,他使得用户在对我们的网站进行浏览时不需要频繁的访问数据库,从而大大的提高了数据传输的效率
最近浏览我用到了Redis技术,在用户访问商品详情时,记录下当前的商品ID:
@GetMapping("/detail/{id}")
public String detail (@PathVariable Integer id, Model model){
Goods goods = goodsService.getById(id);//根据商品ID查找商品详情
Member member=(Member)session.getAttribute("sessionUser");//获取当前登录的用户
redisTemplate.opsForHash().put(prefix+goods.getId()+memberId,"record",goods);//把用户浏览的商品加到Redis中
redisTemplate.expire(prefix+goods.getId()+memberId,5,TimeUnit.MINUTES);//设置Redis的有效生命周期为5分钟
model.addAttribute("goods",goods);
return "goods/goods_detail";
}
在提交订单时,应该把当前购物车中的商品删除:
编辑收货地址:
在收货地址这个模块,我在AddressMapper 写了三个方法:
//查询默认地址
//查询非默认地址
//根据当前用户ID查询所有收货地址
在上面的界面中 我写了一个 设为默认的功能。点击可把需要的地址设置成默认地址:具体代码实现:
Controller层:
@GetMapping("/address")
public String address(Model model){
Address address = new Address();
address.setMemberId(getMemberId());
Listlist=addressService.findList(address);
model.addAttribute("defaultAddress",addressService.findDefault());
model.addAttribute("addressList",list);
return "member/member_address";
}
@GetMapping("/address1")
public String set(@RequestParam Integer addressId){
Address address=addressService.getById(addressId);
address.setIsDefault(0);
addressService.update(address);
Listlist=addressService.findAllById();
for (Address address1:list){
if (address1.getId()!=addressId){
address1.setIsDefault(1);
addressService.update(address1);
}
}
return "redirect:/member/address";
}
Service层:
public Address findDefault(){
Member member= (Member) session.getAttribute("sessionUser");
Address address=addressMapper.findDefault(member.getId());
return address;
}
@Override
public List findList(Address param) {
Member member= (Member) session.getAttribute("sessionUser");
return addressMapper.findUnDefaultList(member.getId());
}
public ListfindAllById(){
Member member= (Member) session.getAttribute("sessionUser");
Listlist=addressMapper.getAllById(member.getId());
return list;
}