SSM框架学习(三)mybatis的关联映射
前言在对数据库进行查询时,我们会遇到各种各样的查询需求,比如多表联结查询,这就需要了解一对一、一对多、多对多等概念。一对一顾名思义就是一个对象对应一个对象,比如一个班主任对应一个班级,这就是一对一,那么一对多可以理解为一个班级对应多个学生,在面向对象设计实体属性里就是班级类包含学生集合。下面用我的漫画查询作为例子来介绍这两种的关系。
例子主要介绍的是一对多。在一部漫画中,通常关系都是这样的,一部漫画有多个章节,一个章节有多张图片,即是漫画:章节=1:n,漫画章节:章节图片=1:n。因此,在查询一部漫画所有内容时候我们可以通过先查漫画id获得漫画简介信息,然后通过漫画id获得章节列表,再根据每一个章节的id获得每一章的图片集合。下面分别使用了xml映射文件形式和注解形式实现这种关联查询方法。
首先要看看每个的实体类,不难发现都是一对多的关系
@Datapublic class Message { private Integer comicId; private String comicName; private List<ChapterModel> ...
MySql相似度搜索
前言之前一直在用模糊查询来模拟搜索引擎的搜索功能,但这种查询方式得到的结果并不太理想。比如,有一条信息台湾长荣海运巨型货柜轮“长赐号”23日搁浅在苏伊士运河,造成双向航道阻塞。外媒最新报道称,“长赐号”搁浅前,其航行速度严重超出运河的限制标准。埃及总统目前已下令减轻搁浅货轮的负荷。,如果使用关键字苏伊士运河搁浅货轮来搜索该信息,则匹配不了对应项。这就是一般模糊查询的缺陷之处,搜索的关键字必须要一一对应上信息才会有结果,因此要让搜索功能有类似搜索引擎的效果就要使用相似度/分词查询。
mysql中的全文索引从mysql5.7.6开始,mysql内置了ngram全文解析器,用于支持中文、日文、韩文的分词。通过自带引擎的分词,我们可以通过对字段建立FULLTEXT索引,进行搜索时分词器会将关键字分词进行模糊查询最后整合出结果集。
使用全文索引的注意事项
只有varchar、char、text的字段才能创建FULLTEXT索引
中文分词的长度用ngram_token_size设定
当对表写入大量数据时,先建表写入数组再建索引速度会更快
使用方法
先设置分词长度ngram_token_size, ...
SSM框架学习(二)mybatis的动态sql以及主键回传、分页
前言
前几天写我的漫画存储项目时遇到个问题,因为设计的表结构主键自增的关系,在每次新插入漫画或章节信息时数据库会给每一个元组添加主键,每次我要按漫画信息->章节信息->图片信息的顺序插入时都要插入新数据后根据当前属性name值查一下id值才能根据id值进行下一步的插入,这样每次插入都多了一次查询操作,十分影响性能。后来通过mybatis的官方文档找到了解决方案,mybatis的insert、update方法可以通过设置useGeneratedKeys=true和keyProperty="id"实现主键回传功能然后在每次操作后返回操作元组的主键。这样一来每次操作完上一步的插入之后可以根据同一对象回传的id值进行下一步操作。
之前写批量的插入删除操作时都是对单条语句重复执行,极大地浪费性能,批量处理的语句可以通过动态sql的foreach来传值处理
查询分页通常分为物理分页和逻辑分页两种方法。物理分页就是在sql语句构建时候使用limit关键字进行查询,这一过程在数据库中已经完成。而逻辑分页通常是把所有结果集都查出来,然后在对应接口方法中添加指定了起始与长度 ...
SSM框架学习(一)mybatis的简单使用
前言这个学期学校开始教javaee框架,虽说我之前已经稍微学习了解过ssm,但学习的过程以及内容挺碎片化的。现在再按学校教程顺序重新过一遍理论。从这篇博文开始记录一下学习ssm的整个过程。
mybatis简介之前没有使用mybatis时通常都是使用jdbc的方法(主要的操作对象:Connection、Preparestatement、ResultSet)来操作数据库,每次执行sql操作都要频繁建立数据库连接,从而造成资源的浪费。mybatis是一种ORM框架,ORM框架可以完成对象模型和关系模型的映射。采用ORM框架后,应用程序不用再直接访问数据库,而是以面向对象的方法来操作持久化对象(PO),其通过面向对象的方法来代替程序操作底层SQL。简单理解就是mybatis不用执行jdbc方法中过多繁琐的操作,可以简化数据库操作。
mybatis的配置
如果在springboot项目中,只需在springboot整体的配置文件application.yml中配置即可
spring: datasource: username: 账号 password: 密码 url: jd ...
记录从一月份以来的漫画爬虫学习
前言从上一年年末开始,我一直使用各种爬虫工具看漫画,这些爬虫工具引起了我浓厚的学习兴趣。于是脑海中产生了自己写爬虫工具的想法。后来我通过对tachiyomi,cimoc等开源项目以及各种博客的学习中了解到了基本的爬虫原理,然后着手实践起来。
声明
本人博文内容皆仅限用于学习和研究,部分敏感内容来源于互联网
如果侵犯了您的版权请通过我的邮箱或B站账号与我获得联系,我会尽快删除相关内容
简单的漫画爬虫过程
使用抓包工具如Charles等截获浏览器或app的http和https请求
获取并分析截获的api接口,从中提取关键信息(漫画的搜索关键字、章节、每张图片等在URL中的位置)
从漫画关键字搜索api中获取精准漫画信息
从漫画信息中提取漫画id或漫画路径
使用漫画id等关键信息访问章节api获取当前漫画所有章节
从单个章节中获取其所有图片列表
使用IO流下载图片
爬虫实践过程
第一个爬虫项目:https://github.com/KBdog/crawler-comic-dmzj ,完成时间:2021-01-26这是我第一个爬虫项目,是通过分析dmzj网页版的标签来获取图片url下载,并 ...
插入标签
默认提示块标签
default提示块标签
primary提示块标签
success提示块标签
info提示块标签
warning提示块标签
danger提示块标签
插入dplayer插件
测试添加视频(function(){var player = new DPlayer({"container":document.getElementById("dplayer0"),"theme":"#FF69B4","lang":"zh-cn","preload":"auto","volume":0.7,"video":{"url":"/medialist/小碧蓝幻想.mkv","pic":"/images_chapters/beauty.jpg"}});window.dplayers||(window.dplayers=[]);window.dplayers.push(player);})()
github例子(function(){var player = new DPlayer({"container":document.getElementById("dplayer1"),"theme":"#FADFA3","loop":true,"video":{"url":"https://moeplayer.b0.upaiyun.com/dplayer/hikarunara.mp4" ...
插入图片
测试图片插入
插入代码
测试插入代码public void main(int []args){ System.out.println("Hello World!");}
插入aplayer插件
测试插入aplayer插件
var options = {"narrow":false,"autoplay":false,"showlrc":3,"volum":0.2,"music":[{"title":"稻香","author":"周杰伦","url":"/musiclist/周杰伦 - 稻香.mp3","pic":"/images_chapters/beauty.jpg"},{"title":"给我一首歌的时间-周杰伦","author":"周杰伦","url":"/musiclist/给我一首歌的时间-周杰伦.mp3","pic":"/images_chapters/beauty.jpg"}]};
options.element = document.getElementById("aplayer-uQkzBPMR");
var ap = new APlayer(options);
window.aplayers || (window.aplayers = []);
window.apl ...