Live2D

菜狗阿金技术总结

技术概述

个人技术学习角度和团队开发技术角度中我最擅长的一个相关技术应该是对java spring boot与mybatis的数据库操作。MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。通过使用mybatis对mysql数据库的使用与了解更上一个档次。

技术详述

技术原理与配置

增删查改的原理图
增删查改的原理图
配置
配置

使用这个技术

    @Insert("insert into `match`(occasion_id,introduce,user_id) value(#{occasion_id},#{introduce},#{user_id})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insertMatch(Match match);
    @Select("SELECT * FROM clothing INNER JOIN subtype on clothing.subtype_id=subtype.id WHERE user_id=#{userId} AND #{level}>=subtype.min_level AND #{level}<=subtype.max_level")
    List<Clothing> listLevelClothing(int userId,int level);
 //根据用户反馈和天气接口的穿衣等级,筛选出符合的衣物类别
        List<Clothing> clothingList= wardrobeDao.listLevelClothing(userId,ClimateUtil.getLevel(location)-offset);

通过注解的方式使用mybatis,因为项目中对数据库的调用也不是有非常多的表进行关联,所以使用注解的方式不会出现问题,也更容易让人读懂代码。由于团队一些同学也不是很熟悉spring boot,所以使用的通俗易懂比较重要。

接口调用

            int userId = Integer.parseInt(code.get("ID").toString());
            Match match=new Match(-1,request.getInteger("occasionId"),request.getString("introduce"),userId);
            int num = matchDao.insertMatch(match);
            int matchId=match.getId();
            //新建搭配成功

在使用完mybatis注解对数据库增删改查后那必然要调用这个接口,上面便是调用接口的实例。

技术使用中遇到的问题和解决过程

困难一、SpringBoot + mybatis sql 根据条件获取最后一条数据

在插入数据时需要获得主键的id,这时候对于注解的mybatis操作来说是一个大问题,所以我们当时找到的解决方法是在insert注解后面添加一个注解options,以此获取最后一条数据+1的id值。

    @Insert("insert into `match`(occasion_id,introduce,user_id) value(#{occasion_id},#{introduce},#{user_id})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insertMatch(Match match);

困难二、数据库版本与导入的mysql包不一致导致操作失败,mysql版本:8.0.15

问题一中的SSL问题需要通过在url配置中设置useSSL来解决。useSSL主要是用于mysql版本不匹配问题设置的,在mysql8.0以上版本一般由于兼容性问题都会用到这个配置。
基于以上出现的问题找了下解决方案,发现主要是由于mysql版本不匹配出现的问题。解决方案如下,主要有两处修改。
方法一
方法二

困难三、防止sql注入问题

一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者),#{}是经过预编译的,是安全的,所以一般我们的注解代码都是使用#{},例如:

    @Select("select * from blog where blog_title like concat('%',#{keyword},'%')")
    List<Blog> titleSearch(String keyword);

进行总结

通过学习了spring boot,我觉得对我之前开始定下的目标向前迈进了一大步,一开始我并不知道spring boot能和android结合起来,是团队里的同学向我介绍了然后使用。虽然原本的目标没有实现,但是,对数据库的掌握,对接口编写的熟练,对目标做个小app已经不是大问题了。而且,对mybatis的学习使我更加知道我喜欢做哪方面的工作,数据库真的是一门大学问。

参考文献、参考博客(标题、作者、链接)

posted @ 2021-06-26 15:47  盫曌  阅读(66)  评论(0编辑  收藏  举报