• 通用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

     

  • 相关阅读:
    C#Ref和Out作用于引用对象时的理解
    Docker-.Net Core部署
    微服务-基于Grpc的进程通信-Protobuf-net.Grpc(4-3)
    微服务-基于Grpc的进程通信-Grpc服务注册与发现 (4-2)
    微服务-基于Grpc的进程通信-简单使用(4-1)
    ELK-Windows下系统安装(1)
    Visual Studio 2019中如何使用Git
    VS2019下载速度快完成时突然变得极慢
    Swagger 发布服务器导出Excel失败,本地导出没问题
    发布到服务器后导出Excel失败
  • 原文地址:https://www.cnblogs.com/xiangyuqi/p/8571530.html
Copyright © 2020-2023  润新知