MyBatis

Mybatis源码架构

久未见 提交于 2021-02-02 06:57:58
一、JDBC实现查询分析 如果不使用mybatis,使用原生的API来进行JDBC查询时的实现如下: public static List<Map<String,Object>> jdbcQuery(){ Connection connection = null; ResultSet rs = null; PreparedStatement stmt = null; List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>(); try { //1、加载JDBC驱动 Class.forName("com.mysql.jdbc.Driver").newInstance(); String url = "jdbc:mysql://127.0.0.1:3306/mysql?characterEncoding=UTF-8"; //2、获取数据库连接 connection = DriverManager.getConnection(url,"root","123456"); String sql = "select * from user where id = ? "; //3、创建Statement对象(每一个Statement为一次数据库执行请求) stmt = connection

PageHelper分页插件的原理是什么

前提是你 提交于 2021-02-02 04:43:07
作者:祖大俊 原文: https: / /my.oschina.net/zudajun /blog/ 745232 PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美。 原本以为分页插件,应该是很简单的,然而PageHelper比我想象的要复杂许多,它做的很强大,也很彻底,强大到使用者可能并不需要这么多功能,彻底到一参可以两用。但是,我认为,作为分页插件,完成物理分页任务是根本,其它的很多智能并不是必要的,保持它够傻够憨,专业术语叫stupid,简单就是美。 我们将简单介绍PageHelper的基本使用和配置参数的含义,重点分析PageHelper作为Mybatis分页插件的实现原理。 1. PageHelper的maven依赖及插件配置 < dependency > < groupId > com.github.pagehelper </ groupId > < artifactId > pagehelper </ artifactId > < version > 4.1.6 </ version > </ dependency > PageHelper除了本身的jar包外,它还依赖了一个叫jsqlparser的jar包,使用时

Java高并发秒杀系统【观后总结】

落爺英雄遲暮 提交于 2021-02-01 09:23:54
项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番。 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并非视频源代码): https://github.com/codingXiaxw/seckill 我结合其资料和观看视频的时候整理出从该项目学到了什么... 项目Dao层 日志记录工具: <!--1.日志 java日志有:slf4j,log4j,logback,common-logging slf4j:是规范/接口 日志实现:log4j,logback,common-logging 使用:slf4j+logback --> Mybatis之前没注意到的配置属性: 使用jdbc的getGeneratekeys获取自增主键值 ,这个属性还是挺有用的。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--配置全局属性--> <settings> <!-

Java秒杀系统方案优化 高性能高并发实战(1)

五迷三道 提交于 2021-02-01 09:23:17
首先先把 springboot +thymeleaf 搞起来 ,参考 springboot 官方文档 本次学习 使用 springboot + thymeleaf+mybatis+redis+RabbitMQ 等实现,未完待继续补充 开发环境: IDEA 接口测试: PostMan 鸭梨测试:JMeter 整体结构 ####那么使用 idea ——>file -->new project --> maven project 修改 pom.xml 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springbootdemo</groupId> <artifactId>springbootdemo</artifactId> <version>1.0

Mybatis一对多查询中集合只封装了一条数据

孤街醉人 提交于 2021-02-01 09:05:33
描述: 一对多查询的时候,一条信息对应有多条数据,我们用集合来存储多的一方的数据。使用resultMap标签来定义封装的格式,今天在做测试时,出现集合内只封装到一条数据。 原因: 后面查阅资料得知,是因为两张表都有id字段,但是都没有讲明原因,我没有深究,但是猜测应该是因为查询的结果集有两个id字段,mybatis将主表的id值同时存到子表的id字段 当读取第一行数据时因为不确定后面是否还有这个id的行返回,mybatis会将第一行存在Cahce类中,在读取第二行时,mybatis判断子表id值时发现值是一样的,会认为是同一条数据。 解决方式: 给其中一个id字段添加别名 运行结果 来源: oschina 链接: https://my.oschina.net/u/4377703/blog/4939449

java框架之MybatisSQL注入漏洞

牧云@^-^@ 提交于 2021-02-01 05:50:20
嗨咯大家好... 我是小鹿... 今天呢小鹿将给大家来讲解 java框架之MybatisSQL注入漏洞 恩..前方高能... 请大家耐心往看完... let's go.... 一、SQL注入漏洞基本原理 在常见的web漏洞中,SQL注入漏洞较为常见,危害也较大。攻击者一旦利用系统中存在的SQL注入漏洞来发起攻击,在条件允许的情况下,不仅可以获取整站数据,还可通过进一步的渗透来获取服务器权限,从而进入内网。 注入攻击的本质,是把用户输入的数据当做代码执行。这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。接下来说下SQL注入漏洞的原理。 举个栗子。 当用户发送GET请求: http://www.xxx.com/news.jsp?id=1 这是一个新闻详情页面,会显示出新闻的title和content,程序内部会接收这个id参数传递给SQL语句,SQL如下: SELECT title,content FROM news WHERE id = 1 这是SQL的原义,也是程序员想要得到的结果,但是如果用户改变了id的内容,修改成如下: http://www.jd.com/news.jsp?id=1 and 1=2 UNION SELECT userna-me, password FROM admin 此时内部程序执行的SQL语句为:

关于SpringBoot的详细配置

只愿长相守 提交于 2021-02-01 01:49:03
SpringBoot 1. 基本概念 每次创建新的SSM项目,都需要:创建Maven项目,添加依赖,配置web.xml,添加spring的配置文件,进行springmvc的相关配置,添加数据库的配置文件,配置mybatis等……准备工作相当的多,而且,随着项目的深入,可能还需要在开发过程中添加新的依赖或新的配置。 事实上,每个不同的项目,经历以上的过程是极为相似的! 使用SpringBoot可以快速的创建项目,却不用关心以上各种配置,在SpringBoot中,有一项开发理念就是“约定大于配置”,即:大多数人共同遵守的配置习惯,将在SpringBoot中成为默认配置,开发者就不必再关心这些配置了! 当然,SpringBoot还有更多特性,后续再补充! 2. 基本使用 访问默认的界面:Strat.springio 点击绿色按钮偏上方的 Switch to the full version. 链接可以展开完整界面,例如: 然后,确定当前需要创建的项目的参数,主要是: 顶部的项目类型、开发语言、SpringBoot版本; Group,例如填写为com.springboot; Artifact,例如填写为sample; Name,表示项目名称,自动为Artifact的值,可以不更改; Description:项目描述; Package Name:项目的根包,在SpringBoot中

SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

╄→гoц情女王★ 提交于 2021-01-31 23:22:05
这篇文章主要介绍了SpringBoot整合MyBatis实现乐观锁和悲观锁的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本文以转账操作为例,实现并测试乐观锁和悲观锁。 全部代码:https://github.com/imcloudfloating/Lock_Demo GitHub Page:https://cloudli.top 死锁问题 当 A, B 两个账户同时向对方转账时,会出现如下情况: 时刻 事务 1 (A 向 B 转账) 事务 2 (B 向 A 转账) T1 Lock A Lock B T2 Lock B (由于事务 2 已经 Lock A,等待) Lock A (由于事务 1 已经 Lock B,等待) 由于两个事务都在等待对方释放锁,于是死锁产生了,解决方案:按照主键的大小来加锁,总是先锁主键较小或较大的那行数据。 建立数据表并插入数据(MySQL) create table account ( id int auto_increment primary key, deposit decimal ( 10, 2 ) default 0.00 not null, version int default 0 not null ) ; INSERT INTO vault.account (

Mybatis plus通用字段自动填充的最佳实践总结

a 夏天 提交于 2021-01-31 15:29:24
在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time、update_time、update_by、create_by等用来维护数据记录的创建时间、修改时间、修改人、创建人等信息。通常情况下我们需要对这些字段进行手动赋值。赋值的过程也比较冗余,都是重复操作。 通常是为create_time赋值为系统的当前时间、update_time赋值为系统修改操作执行时的当前时间。 create_by(创建人)、update_by(修改人)赋值为当前的登录用户的用户名 xxxYyyZzz.setUpdateBy("zimug"); //数据记录更新操作人 xxxYyyZzz.setUpdateTime(new Date()); //数据记录更新操作的时间 Mybatis plus 为我们提供了一种一劳永逸的自动化赋值方式。 一、调整数据库表结构 以mysql数据库环境下的xxx_yyy_zzz表为例,在原有的表字段的基础上,添加下面的四个通用数据维护字段。 ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `create_by` VARCHAR(64) NOT NULL COMMENT '本条记录创建人'; ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `create_time` DATETIME

阿里P6+Java研发工程师,到底牛在哪儿?P8大佬儿说出实情,真相了!

对着背影说爱祢 提交于 2021-01-31 11:17:45
很多从事Java开发岗位的人,都期望努力成为一名优秀的架构师。薪资高,薪资范围高达30K——90K,社会认同感也极高。在国内,架构师 = 三分之二的工程能力 + 三分之一的规划能力。这就意味着一名Java开发工程师,成长为架构师需要具备以下能力: 要拥有坚实Java基础,深入理解操作系统、网络、数据库等基础原理,熟练掌握常用数据结构与算法,懂得常用设计模式。 其次,对高并发、分布式、微服务等领域要有深入研究。熟悉MySQL、NoSQL、Redis等数据中心建设方案,可以进行产品的独立部署,高可用架构和性能优化,熟悉开源社区解决方案。 重要的是,要具备一定的业务思维,深入到业务,从特定的业务场景出发,设计出高度可扩展性的系统架构...... 别小看这三条要求,阿里、腾讯、滴滴等很多互联网大厂在招聘中对于架构师的要求,来来回回也绕不过这些。因此,打好Java基础,提升技术能力真的尤为重要,坚实的基础和优秀的项目经历能让技术道路越走越宽。 今天就给大家推荐一门 【奈学教育】 携众多一线互联网大厂优秀架构师联合打造的课程 《Java资深开发工程师》 ,这门课程对标阿里P6+级别的资深研发工程师, 由前阿里巴巴架构师、前阿吉豆(AJIDOU)IT副总裁肖秋平主讲 ,旨在帮助在Java开发工程师岗位上遇到瓶颈的技术人员,为后期晋升架构师打下坚实的基础。 课程注重实战演练并深挖技术点的底层原理