通用mapper和分类实现

时人不识凌云木,直待凌云始道高。这篇文章主要讲述通用mapper和分类实现相关的知识,希望能为你提供帮助。
1  通用Mapper 1.1  通用Mapper介绍 1.1.1  架构设计
 

通用mapper和分类实现

文章图片

说明:使用了通用Mapper后,单表的增删改查操作会自动的进行维护.
问题:如何才能实现数据的通用并且是动态的?
 
1.2  JPA介绍 1.2.1  JPA的思想
 
通用mapper和分类实现

文章图片

说明:以面向对象的思维操作数据库!!
举例说明:
  1. 早期sql语句都需要人为的编辑.
  2. 关系型数据库中数据表与pojo一一对应.所以可以使用对象操作数据库
  3. Sql:insert into user values(XXXX);
UserMapper.insert(user);
1.2.2  JPA的发展
说明:有了JPA思想后,Haibernate将JPA实现.
特点:
  1. 能够实现面向对象的操作
  2. 能够实现自动的对象关系映射(orm)
  问题:
例子:
如果做插入操作,先会执行查询操作,之后再插入.
实现业务逻辑时,会产生大量的冗余的sql语句.数据库的执行速度变慢.
    2.需要学习特定的数据库语句Hql(适用于多表操作)
 
发展:
Mybatis的发展.
  特点:
  1. 能够实现自动的对象关系映射
  2. Sql语句需要自己根据业务逻辑自己实现,性能更高
  3. 通用Mapper出现后,Mybatis也有了面向对象的功能.
1.2.3  通用Mapper引入
< !-- 通用Mapper插件 --> < plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor"> < !--主键自增回写方法,默认值mysql,详细说明请看文档 --> < property name="IDENTITY" value="https://www.songbingjia.com/android/MYSQL" /> < !--通用Mapper接口,多个通用接口用逗号隔开 --> < property name="mappers" value="https://www.songbingjia.com/android/com.jt.common.mapper.SysMapper" /> < /plugin>

1.2.4  Mapper的接口的注解形式
/** * Mybatis的接口中可以添加注解,完成特定的操作 * 说明: *Mybatis中的直接根据映射标签后期开发的. *功能上与映射文件一致. * @return */ @Select(value="https://www.songbingjia.com/android/select * from item") //@Insert("") //@Delete("") //@Update("") List< Item> selectAll();

 
1.2.5  通用Mapper调用规则
 
通用mapper和分类实现

文章图片

方法名称是对应的,可以自动的进行调用
 
通用mapper和分类实现

文章图片

 
1.3  商品的新增 1.3.1  商品分类的级数
说明:一般的电商网站的商品分类一般都是3级.经过了科学的考证的
 
通用mapper和分类实现

文章图片

1.3.2  构建ItemCat对象
 
通用mapper和分类实现

文章图片

1.3.3  构建ItemCatMapper
 
通用mapper和分类实现

文章图片

1.3.4  定义ItemCatService
@Service public class ItemCatServiceImpl implements ItemCatService {@Autowired private ItemCatMapper itemCatMapper; /** * 使用通用Mapper(JPA),传入的对象最终充当了查询的where条件 * select * from tb_item_cat where id = 100 and status = 1 * * 总结:ItemCat对象会将不为Null的属性充当where条件 * /如果需要添加查询条件 * 为对象的属性赋值即可!!! * */ @Override public List< ItemCat> findItemCat() { //ItemCat itemCat = new ItemCat(); //itemCat.setId(100L); //itemCat.setStatus(1); return itemCatMapper.select(null); }

 
1.3.5  编辑ItemCatController
 
通用mapper和分类实现

文章图片

1.4  商品分类列表的实现 1.4.1  页面的Url分析
 
 
通用mapper和分类实现

文章图片

 
通用mapper和分类实现

文章图片

1.4.2  分析树形结构
 
通用mapper和分类实现

文章图片

{"id":2,"text":"商品名",state:"closed"}
注:state的属性如果是closed,表示这个是父节点,它还有子节点。open代表子节点
 
1.4.3    扩展节点
 
通用mapper和分类实现

文章图片

【通用mapper和分类实现】 
1.4.4  编辑Pojo对象
说明:根据格式要求编辑get方法:
 
通用mapper和分类实现

文章图片

1.4.5  编辑Controller
/** * 1.@ResponseBody *作用: *如果返回的数据时对象则自动的转化为JSON{key:value} *如果返回的数据为String则按照字符串原样返回 String *注意:转化JSON数据时,调用的是对象中的getXXX()方法 * @return */ //商品分类实现 @RequestMapping("/list") @ResponseBody public List< ItemCat> findItemCat (@RequestParam(value="https://www.songbingjia.com/android/id",defaultValue="https://www.songbingjia.com/android/0") Long parentId){ //Long parentId = 0L; //定义一级菜单的父级//根据parentId查询商品的分类信息 return itemCatService.findItemCatByParentId(parentId); }

 
1.4.6  编辑Service
@Override public List< ItemCat> findItemCatByParentId(Long parentId) { ItemCat itemCat = new ItemCat(); itemCat.setParentId(parentId); itemCat.setStatus(1); //正常的分类信息return itemCatMapper.select(itemCat); }

 
1.4.7  效果展现
 
通用mapper和分类实现

文章图片

 
1.5  商品的新增 1.5.1  分析页面url
 
通用mapper和分类实现

文章图片

 
通用mapper和分类实现

文章图片

1.5.2  编辑pojo对象
说明:将pojo对象与数据库表一一对应
 
通用mapper和分类实现

文章图片

1.5.3  编辑Controller
 
通用mapper和分类实现

文章图片

1.5.4  编辑Service
 
通用mapper和分类实现

文章图片

1.5.5  效果展现
 
通用mapper和分类实现

文章图片

1.5.6  EasyUI的校验
  1. 必填项
data-options="required:true"
  1. 设定值的范围
data-options="min:1,max:99999999,precision:2,required:true"
  1. 定义字符的个数
data-options="validType:\'length[1,30]\'
1.6  商品的修改 1.6.1  页面js分析
 
 
通用mapper和分类实现

文章图片

 
通用mapper和分类实现

文章图片

1.6.2  编辑Controller
//引入日志工具类 private static final Logger logger = Logger.getLogger(ItemController.class); @RequestMapping("/update") @ResponseBody public SysResult updateItem(Item item){ try { itemService.updateItem(item); logger.info("{~~~~~更新成功}"); return SysResult.build(200,"更新成功"); } catch (Exception e) { e.printStackTrace(); //throw new Exception(); //记录日志 //System.out.println("sssssss"); logger.error("{更新操作失败}"); return SysResult.build(201, "更新失败"); } }

 
1.6.3  编辑Service
 
通用mapper和分类实现

文章图片

1.6.4  动态更新操作(知识回顾)
< !--测试的动态更新 set作用: 1.动态更新时使用 2.能够去除where条件之前的多余的1个逗号 --> < update id="updateUser"> update tb_userset name = #{name} age=#{age} where id = #{id} < set> < if test="name !=null"> name = #{name},< /if> < if test="age!=null"> age = #{age},< /if> < /set> where id = #{id} < /update>

 
1.7  商品删除 1.7.1  页面分析
 
通用mapper和分类实现

文章图片

 
 
通用mapper和分类实现

文章图片

 
1.7.2  编辑Controller
 
通用mapper和分类实现

文章图片

 
1.7.3  编辑Service
 
通用mapper和分类实现

文章图片

 
1.8  商品上架下架 1.8.1  上架和下架的页面分析
 
通用mapper和分类实现

文章图片

1.8.2  编辑Controller
 
通用mapper和分类实现

文章图片

1.8.3  编辑service
@Override public void updateStatus(int status, Long[] ids) {/** * 方案1: *在service层通过循环遍历的形式实现操作 * 方案2: *通过Mybatis实现一次批量修改数据的操作 */itemMapper.updateStatus(status,ids); /*for (Long id : ids) { Item item = new Item(); item.setId(id); //封装主键 item.setStatus(status); item.setUpdated(new Date()); itemMapper.updateByPrimaryKeySelective(item); }*/ }

 
1.8.4  编辑Mybatis
< !--批量修改状态 collection 的取值有如下的几种 1.如果传递的数据是数组array 2.如果传递的数据是List集合list 3.如果传递的数据是Mapmap中的key --> < update id="updateStatus"> update tb_item set status = #{status} where id in( < foreach collection="ids" item="id" separator=","> #{id} < /foreach> )
< /update>

 
1.9  Log4j日志 1.9.1  说明:
  1. 项目可以自动的扫描\\resources\\log4j.properties.名称必须固定.
  2. 引入jar包文件
 
通用mapper和分类实现

文章图片

2  补充知识 2.1  快捷配置说明:能够在new中出现class  interface等java的工具类
 
通用mapper和分类实现

文章图片

 
2.1.1  jQuery Validate
 
通用mapper和分类实现

文章图片

 

    推荐阅读