通用mapper和分类实现

通用Mapper

1.1 通用Mapper介绍

1.1.1 架构设计

 

说明:使用了通用Mapper,单表的增删改查操作会自动的进行维护.

问题:如何才能实现数据的通用并且是动态的?

1.2 JPA介绍

1.2.1 JPA的思想

 

说明:以面向对象的思维操作数据库!!

举例说明:

  1. 早期sql语句都需要人为的编辑.
  2. 关系型数据库中数据表与pojo一一对应.所以可以使用对象操作数据库
  3. Sql:insert into user values(XXXX);

UserMapper.insert(user);

1.2.2 JPA的发展

说明:有了JPA思想后,HaibernateJPA实现.

特点:

  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="MYSQL" />
            <!--通用Mapper接口,多个通用接口用逗号隔开 -->
            <property name="mappers" value="com.jt.common.mapper.SysMapper" />
        </plugin>

1.2.4 Mapper的接口的注解形式

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

 

1.2.5 通用Mapper调用规则

 

方法名称是对应的,可以自动的进行调用

 

1.3 商品的新增

1.3.1 商品分类的级数

说明:一般的电商网站的商品分类一般都是3.经过了科学的考证的

 

1.3.2 构建ItemCat对象

 

1.3.3 构建ItemCatMapper

 

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

 

1.4 商品分类列表的实现

1.4.1 页面的Url分析

 

 

1.4.2 分析树形结构

 

{"id":2,"text":"商品名",state:"closed"}

:state的属性如果是closed,表示这个是父节点,它还有子节点。open代表子节点

1.4.3  扩展节点

 

1.4.4 编辑Pojo对象

说明:根据格式要求编辑get方法:

 

1.4.5 编辑Controller

/**
     * 1.@ResponseBody 
     *  作用:
     *      如果返回的数据时对象则自动的转化为JSON{key:value}
     *      如果返回的数据为String  则按照字符串原样返回 String
     *  注意:转化JSON数据时,调用的是对象中的getXXX()方法
     * @return
     */
    //商品分类实现
    @RequestMapping("/list")
    @ResponseBody
    public List<ItemCat> findItemCat
    (@RequestParam(value="id",defaultValue="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 效果展现

 

1.5 商品的新增

1.5.1 分析页面url

 

 

1.5.2 编辑pojo对象

说明:pojo对象与数据库表一一对应

 

1.5.3 编辑Controller

 

1.5.4 编辑Service

 

1.5.5 效果展现

 

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分析

 

 

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

 

1.6.4 动态更新操作(知识回顾)

<!--测试的动态更新 
        set作用:
            1.动态更新时使用
            2.能够去除where条件之前的多余的1个逗号
     -->
    <update id="updateUser">
        update tb_user  set 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 页面分析

 

 

1.7.2 编辑Controller

 

1.7.3 编辑Service

 

1.8 商品上架下架

1.8.1 上架和下架的页面分析

 

1.8.2 编辑Controller

 

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.如果传递的数据是Map        map中的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. 项目可以自动的扫描 esourceslog4j.properties.名称必须固定.
  2. 引入jar包文件

 

补充知识

2.1 快捷配置

说明:能够在new中出现class interfacejava的工具类

 

2.1.1 jQuery Validate

 

原文地址:https://www.cnblogs.com/xiangyuqi/p/8571530.html