自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ConstXiong

记录编程实践...

  • 博客(705)
  • 资源 (7)
  • 论坛 (1)
  • 收藏
  • 关注

原创 Spring 中如何配置 MyBatis?

单纯使用 spring-context 和 spring-jdbc 集成 MyBatis,配置步骤:加载 spring-context、spring-jdbc、MyBatis、MyBatis-Spring 的 jar 包 spring 集成 MyBatis 的 xml 配置文件,配置 dataSource、sqlSessionFactory、Mapper 接口包扫描路径 Mapper 接口代理 bean 直接从 spring ioc 容器中获得使用即可最核心的就是 spring 的配置文件,如下

2020-10-28 09:08:33 74

原创 MyBatis 插件的运行原理是什么?

MyBatis插件的运行是基于JDK 动态代理 + 拦截器链实现Interceptor 是拦截器,可以拦截 Executor, StatementHandle, ResultSetHandler, ParameterHandler 四个接口 InterceptorChain 是拦截器链,对象定义在 Configuration 类中 Invocation 是对方法、方法参数、执行对象和方法的执行的封装拦截器的解析是在XMLConfigBuilder对象的 parseConfiguration...

2020-10-27 19:17:28 50

原创 MyBatis 如何编写一个自定义插件?

先看如何自定义一个插件1、新建类实现 Interceptor 接口,并指定想要拦截的方法签名/** * MyBatis 插件 */@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})public class ExamplePlugin imple

2020-10-26 21:02:17 82

原创 MyBatis 的源码中的核心类有哪些?如何实现框架功能的?

Configuration: 配置类 Environment: 环境信息 SqlSessionFactoryBuilder: SqlSessionFactory 构造者类 SqlSessionFactory: SqlSession 工厂类 SqlSession: 执行 SQL 的一次会话 XMLConfigBuilder: MyBatis xml 配置文件构造者类 XMLMapperBuilder: Mapper xml 配置文件构造者类 ..

2020-10-13 21:41:17 58

原创 MyBatis 中的本地缓存和二级缓存的作用是什么?怎么实现的?

本地缓存作用:SqlSession 级别的缓存,默认开启,在 MyBatis 配置文件中可以修改 MyBatis 文件中 < setting> 标签 localCacheScope 参数值改变缓存的作用域。statementId、boundSql.getSql() 执行 sql、查询参数、RowBounds 都相同,即认为是同一次查询,返回缓存值。实现原理:每个 SqlSession 对象包含一个 Executor 对象,Executor 对象中 localCache 属性使用

2020-10-13 21:40:24 90

原创 MyBatis 如何支持延迟加载?现实原理是什么?

支持延迟加载的配置:在配置文件的标签内设置参数 lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态 aggressiveLazyLoading:开启时,任一方法的调用都会加载该对象的所有延迟加载属性。否则,每个延迟加载属性会按需加载 lazyLoadTriggerMethods:指定对象的哪些方法触发一次延迟加载 resultMap 中配置 <associat

2020-10-13 21:39:31 97

原创 MyBatis 中注册 Mapper 有哪些方式?

方式一:在配置文件 mybatis-config.xml 中添加及其子标签,编写对应的 Mapper 接口与 XML< mappers> < mapper resource="constxiong/mapper/UserMapper.xml"/>< /mappers>方式二、硬编码方式在 configuration 对象中注册 Mapper 接口//配置Configuration configuration = new Configura.

2020-10-13 21:38:38 35

原创 MyBatis 的 SQL 执行日志如何开启?

在配置文件的<setting>标签上设置 logImpl 参数值(SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING),指定 MyBatis 所用日志的具体实现,未指定时将自动查找。如 MyBatis实现的标准输出的配置< settings> < setting name="logImpl" value="STDOUT_LOGGIN...

2020-10-13 21:37:45 75

原创 什么是 MyBatis 的接口绑定?有哪些实现方式?

接口绑定就是把接口里的方法与对应执行的 SQL 进行绑定,以及 SQL 执行的结果与方法的返回值进行转换匹配。方式: 接口与对应 namespace 的 xml 进行绑定,接口方法名与 xml 中< select>、< delete>、< update>、< delete> 标签的 id 参数值进行绑定 接口方法与方法上的 @Select 或 @Update 或 @Delete 或 @Insert 的注解及注解里 SQL 进行绑定 .

2020-10-13 21:36:52 49

原创 MyBatis 如何进行 1对1 和 1对多 的关联查询?

在 Mapper xml 中的标签里使用可以完成 1对1 关联查询 在 Mapper xml 中的标签里使用可以完成 1对多 关联查询 //sqlcreate table user (id int primary key,name varchar(400));insert user info VALUES(1, 'ConstXiong1');create table info (user_id int primary key,name varchar(400));i..

2020-10-13 21:35:59 43

原创 为什么说 MyBatis 是半自动 ORM?

说 MyBatis 是 半自动 ORM 最主要的一个原因是,它需要在 XML 或者注解里通过手动或插件生成 SQL,才能完成 SQL 执行结果与对象映射绑定。【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...

2020-10-13 21:35:06 72

原创 不同 Mapper XML 文件中 id 是否可以相同?

新版本 Mapper XML mapper 标签的 namespace 参数值不能为空 两个 Mapper XML mapper 标签的 namespace 参数值相同,id 不可以相同。否则,提示异常 Mapped Statements collection already contains value 两个 Mapper XML mapper 标签的 namespace 参数值不同,id 可以相同 从源码实现上看,namespace.id 是 MappedStateme..

2020-10-13 21:34:13 56

原创 Mapper XML 映射文件中支持哪些标签?分别什么作用?

select: 映射查询语句 insert: 映射插入语句 updae: 映射更新语句 delete: 映射删除语句 resultMap: 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素 parameterMap: 老式风格的参数映射,已废弃 sql: 定义可被其它语句引用的可重用语句块 include: 引入 sql 片段 selectKey: 为不支持自增的主键生成策略标签 cache: 该命名空间..

2020-10-11 13:03:21 49

原创 MyBatis 中有哪些动态 SQL 标签?它们的作用分别是什么?如何实现的?

9 种动态 SQL 标签:if、choose、when、otherwise、trim、where、set、foreach、bind1 种注解中使用动态 SQL 标签:script if: 根据条件判断 choose、when、otherwise: 组合使用,选择多个条件中的一个 where: where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除 trim: 定制类似 wh

2020-10-11 13:02:28 85

原创 Mapper 接口如何传递多个参数?

方式一、接口中传多个参数,在 xml 中使用 #{param0}、#{param1}… 方式二、使用 @param 注解指定名称,在 xml 中使用 #{名称} 方式三、多个参数封装到 Java bean 中 方式四、多个参数指定 key,put 到 Map 中//方式一//javaSystem.out.println("------ selectUserByParamIndex ------");user = userMapper.selectUserByParamIndex(31, "C

2020-10-11 13:01:35 68

原创 MyBatis 如何获取返回自增主键值?

主键自增,可以在 insert 方法执行完之后把 id 设置到传入的对象的属性#建表 SQLcreate table user(id int PRIMARY KEY auto_increment,name varchar(400));<!--Mapper xml 配置-->< insert id="insertUser" parameterType="constxiong.po.User" useGeneratedKeys="true" keyProperty="id"

2020-10-11 13:00:42 35

原创 MyBatis 如何批量插入?

方式一、打开批量插入的 SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);UserMapper userMapper = sqlSession.getMapper(UserMapper.class);for (int i = 36; i <= 45; i++) { userMapper.insertUser(new User(i, "ConstXiong" + i))

2020-10-11 12:59:48 63

原创 MyBatis 是如何将 sql 执行结果转换为目标对象并返回的?有哪些映射形式?

方式一、<select> 标签使用 resultType 参数,传递 Java 类,sql 中 select 的字段名保持与 Java 类属性名称一致 方式二、使用 <resultMap> 标签,定义数据库列名和对象属性名之间的映射关系 方式三、使用注解 select 的字段名保持与接口方法返回的 Java 类或集合的元素类的属性名称一致 方式一<select id="selectUser" resultType="constxiong.po.U..

2020-10-09 00:06:22 113 1

原创 MyBatis 有哪些分页的方式?分页插件的原理是什么?

使用 RowBounds 对象进行分页,它是对 ResultSet 结果集进行内存分页 在 xml 或者 注解的SQL 中传递分页参数 使用分页插件 Mybatis-PageHelper 其中分页插件的原理是,使用 MyBatis 提供的插件接口,拦截待执行的 SQL,根据数据库种类的配置与分页参数,生成带分页SQL 语句,执行。【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结...

2020-10-09 00:04:58 123 1

原创 Mapper 接口中能不能根据参数不同进行重载?

不能 MapperedStatement 的 id 属性值等于 Mapper 接口的包名.接口名.方法名作为 key 添加到 Configuration 对象的 Map 结构的 mappedStatements 属性里 查找 MapperedStatement 执行 SQL 时,也是根据 Mapper 接口的包名.接口名.方法名作为 SqlCommand 的 name 属性值,在 Configuration 对象的 mappedStatements 找到对应的 MapperedSta...

2020-10-09 00:04:05 78 1

原创 Mapper 接口并没有实现类,它是如何工作的?

apper 接口的 Class 对象,被解析包装成 MapperProxyFactory 对象 SqlSession 获取 Mapper 接口时,通过 MapperProxyFactory 对象实例化 MapperProxy 动态代理 Mapper 接口 执行 Mapper 接口的方法时,动态代理反射调用 MapperProxy 的 invoke 方法,根据接口与方法找到对应 MappedStatement 执行 SQL 源码入口与上题同。【Java面试题与答案】...

2020-10-09 00:03:12 217 1

原创 Mapper 接口方法如何与注解里的 SQL 进行绑定的?

根据 Mapper 接口、其方法、方法上的注解,生成 mappedStatementId 与 MapperStatement,注册到 configuration 对象中 根据 Mapper 接口方法查到并调用对应的 MappedStatement,执行 SQL 流程与Mapper 接口与 xml 绑定类似。分析解析生成注册 MapperStatement 的代码入口在 MapperRegistry addMapper 方法//使用MapperProxyFactory...

2020-10-09 00:02:19 70 1

原创 Mapper 接口如何与写 SQL 的 XML 文件进行绑定的?

Mapper 接口与 XML 文件的绑定是通过 XML 里 mapper 标签的 namespace 值与 Mapper 接口的包路径.接口名进行绑定 Mapper 接口的方法名与 XML 文件中的 sql、select、insert、update、delete 标签的 id 参数值进行绑定 其中涉及到了MappedStatement 的 id、SqlCommand 的name的值为 Mapper 接口的包路径.接口名.方法名 源码分析要点 1、Mapper...

2020-10-09 00:01:26 70 1

原创 用 MyBatis 如何使用模糊查询?

1、XML 中使用#{},Java 代码中传入 "%参数值%"Java: list< User> users = mapper.select(Collections.singleMap("name", "%constxiong%")); XML: < select id=”select” resultMap="User" parameterType="String"> select * from user where name like #{n.

2020-09-27 21:49:16 50

原创 MyBatis 中如何配置连接中断或执行超时?

Mybatis 的 XML 配置中,在 < settings> 节点中添加子节点 < setting>,name=defaultStatementTimeout,设置等待数据库响应的超时时间。< settings> <!-- 设置超时时间,它决定数据库驱动等待数据库响应的秒数 --> < setting name="defaultStatementTimeout" value="25"/>< /settings>.

2020-09-27 21:48:23 75

原创 MyBatis 中实体类的属性名与表中的字段名不一致怎么处理?

1、修改 SQL,给查询字段重命名,如 将 user_id 重命名为 userIdselect user_id as userId from table2、MyBatis 的 XML 映射文件中,使用 <resultMap> 标签,定义数据库字段名与实体 bean 的属性字段名的映射关系< select id="getUser" parameterType="int" resultMap="”UserMap”"> select * from user ..

2020-09-27 21:47:30 45

原创 #{} 和 ${} 的区别

MyBatis 在处理 #{} 时,会将 SQL 中的 #{} 替换为 ?,预编译 SQL,通过 PreparedStatement 的 setXxxx 的方法进行参数赋值。使用 #{} 可以有效地防止 SQL 注入。 MyBatis 在处理 ${} 时,会直接把 ${} 替换为参数值,存在 SQL 注入的风险。 #{} 比${} 安全,但还是提供了${} 这种动态替换参数的方式,是因为有些复杂的 SQL 使用场景通过预编译的方式比较麻烦,且在代码中完全可以做到控制非法参数,有些参数可能是一些常量或..

2020-09-27 21:46:37 34

原创 MyBatis 与 Hibernate 的区别

MyBatis 不完全是一个 ORM 框架,它需要程序员自己编写 SQL;Hibernate 可以做到无 SQL 对数据库进行操作 MyBatis 直接编写原生 SQL,可以严格控制 SQL 执行性能,灵活度高,适合对关系数据模型要求不高的软件开发,快速响应需求变化 MyBatis 书写 SQL 可能依赖数据库特性,导致应用程序数据库一致性差;Hibernate 可以屏蔽掉数据库差异,数据库一致性好 MyBatis 考验程序编写 SQL 的功底,编写大量 SQL,效率可能不高;Hibernate 对象

2020-09-24 22:37:00 41

原创 MyBatis 的适用场景

直接编写 SQL,对应多变的需求改动较小 对性能的要求很高,做 SQL 的性能优化相对简单、直接【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...

2020-09-24 22:36:07 61

原创 Mybaits 的优缺点

优点:消除 JDBC 中的重复代码 可以在 XML 或注解中直接编写 SQL 语句,比较灵活,方便对 SQL 的优化与调整 SQL 写在 XML 中,与代码解耦,按照对应关系方便管理 XML 中提供了动态 SQL 的标签,方便根据条件拼接 SQL 提供了 XML、注解与 Java 对象的映射机制 与 Spring 集成比较方便缺点:字段较多、关联表多时,编写 SQL 工作量较大 SQL 语句依赖了数据库特性,会导致程序的移植性较差,切换数据库困难【Java面试题与答...

2020-09-24 22:35:14 35

原创 介绍一下 MyBatis

MyBatis 是一款优秀的持久层框架。支持自定义 SQL、存储过程以及高级映射 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作 通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录ps: 摘自官网https://mybatis.org/mybatis-3/zh/index.html【Java面试题与答案】整理推荐基础与语法 集合 网络编程...

2020-09-24 22:34:21 29

原创 如何实现分库分表?怎么配置?

分库分表的实现方案,一般分为两种1、增加一个中间层,中间层实现 MySQL 客户端协议,可以做到应用程序无感知地与中间层交互。由于是基于协议层的代理,可以做到支持多语言,但需要多启动一个进程、SQL 的解析也耗费大量性能、由于协议绑定仅支持单个种类的数据库库。2、在代码层面增加一个路由程序,控制对数据库与表的读写。路由程序写在项目里,与编程语言绑定、连接数高、但相对轻量(比如 Java 仅需要引入 SharingShpere 组件中 Sharding-JDBC 的 jar 即可)、支持任意数据库。

2020-09-24 22:29:51 93

原创 JDK1.8 中的日期与时间 API

为什么 JDK 1.8 之前的时间与日期 API 不好用?1、java.util.Date 是从 JDK 1.0 开始提供,易用性差 默认是中欧时区(Central Europe Time) 起始年份是 1900 年 起始月份从 0 开始 对象创建之后可修改 2、JDK 1.1废弃了 Date 中很多方法,新增了并建议使用java.util.Calendar 类 相比 Date 去掉了年份从 1900年开始 月份依然从 0 开始 选...

2020-09-21 22:16:53 43

原创 Sharding-JDBC 实现读写分离

Sharding-JDBC 是 apache 旗下的 ShardingSphere 中的一款产品,轻量,引入 jar 即可完成读写分离的需求,可以理解为增强版的 JDBC,现在被使用的较多。搭建项目maven 依赖的库<!-- 当前最新版 sharding-jdbc --><dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardin

2020-09-21 22:16:00 46

原创 执行MySQL脚本

1、登录 mysql、执行 source 文件目录mysql -uroot -puse 数据库名source E:\a.sql2、mysql bin目录,通过 mysql 命令# -D 后面是数据库名,最后一个参数是文件绝对路径mysql -uroot -p -Dblog<E:\a.sql【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linu...

2020-09-21 22:13:47 31

原创 input 仅支持输入数字

<input oninput="value=value.replace(/[^\d]/g, '')">【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...

2020-09-21 22:12:54 22

原创 Linux指令 查找包含指定内容的文件

# 在指定目录,查找指定内容的文件grep -r "查询内容" 目录# 在指定目录,显示包含指定内容的文件名grep -r -l "查询内容" 目录# 在指定目录,查找find 目录 -name "文件名"【Java面试题与答案】整理推荐基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 框架 算法与数据结构 异常 文件解析与生成 Linux MySQL Oracle Redis Dubbo...

2020-09-16 21:48:55 47

原创 mysql-8.0.21-winx64 集群-主从配置

主:172.31.32.1841、主节点在 my.ini 文件新增配置server-id=1log-bin=mysql-bin2、重启服务net stop mysqlnet start mysql3、为从节点创建账号同步账号,授权CREATE USER 'slave'@'%' IDENTIFIED BY 'constxiong@123';GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slav...

2020-09-16 21:48:02 57

原创 mysql-8.0.21-winx64 安装

MySQL windows 64 bits 下载文件地址https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.21-winx64.zip1、解压2、初始化脚本 my.ini,放到 mysql 的解压目录,与 bin 目录平级# 设置3306端口port=3306# 设置mysql的安装目录basedir=E:\install\mysql8\product# 设置mysql数据库的数据的存放目录#datadir=E:\insta.

2020-09-16 21:47:09 98

原创 一览 JDK 并发包(J.U.C)

JDK 并发包的知识不像设计模式,设计模式的知识点是易懂难精,而 JDK 并发包尤其是从源码角度去看,刚开始比较难理解,但理解之后就可以拿去使用也不易忘记。通过这次整理并发包的结构,越发觉得从学习到掌握知识需要有个过程。两三年前看到并发包里的类(接口)名大多不知道它们是干嘛的,而现在基本能明白包中 80% 的类(接口)是用来解决什么问题的。这里顺带分享一个经验,就是很多学习编程的同学,喜欢一上来就看源码。当初我也是这样,并发包里的源码我看过两遍,第一遍硬着头皮基本啥也没看懂。看不懂源码最..

2020-09-10 23:41:27 68

eclipse使用教程ppt

ppt版,eclipse的使用教程。简单介绍了eclipse的使用。

2018-09-03

Eclipse入门教程

eclipse的入门教程,介绍了如何使用eclipse开发java项目。

2018-08-31

JasperReport中文用户手册

JasperReport是一款开源报表引擎,用纯java编写。文档是对JasperReport的介绍。包含设计工具和模板文件等...

2018-08-30

无线wifi破解教程

简单介绍了wifi的工作原理。讲解了如何使用破解工具,搭建工作环境。使用字典破解wifi的密码。

2018-08-30

计算机网络第五版【谢希仁】

《计算机网络》一书自1989年首次出版以来,于1994年、1999年和2003年分别出了修订版。2006年8月本教材通过了教育部的评审,被纳入普通高等教育“十一五”国家级规划教材。《计算机网络》的第5版,在内容和结构方面都有了很大的修改。   全书分为10章,比较全面系统地介绍了计算机网络的发展和原理体系结构、物理层、数据链路层、网络层、运输层、应用层、网络安全、因特网上的音频/视频服务、无线网络和下一代因特网等内容。各章均附有练习题。此外,附录A给出了部分习题的答案和提示。随书配套的光盘中,有全书课件和作者教学中经常遇到的 150多个问题及解答,计算机网络最基本概念的演示(PowerPoint文件),以及本书引用的全部RFC文档等,供读者参阅。   本书的特点是概念准确、论述严谨、内容新颖、图文并茂。突出基本原理和基本概念的阐述,同时力图反映出计算机网络的一些最新发展。本书可供电气信息类和计算机类专业的大学本科生和研究生使用,对从事计算机网络工作的工程技术人员也有学习参考价值。

2018-08-29

计算机网络原理 自顶向下方法 英文第6版

自顶向下的方法来讲授计算机网络的原理及其协议,即从应用层协议开始沿协议栈向下讲解,强调应用层范例和应用编程接口,使读者尽快进入每天使用的应用程序环境之中进行学习和“创造”。《计算机网络(自顶向下方法原书第4版)》的讲解以因特网为例,学以致用,注重教学法,深入浅出地重点讲解计算机网络的基本原理。

2018-08-27

计算机网络 自顶向下方法 中文第6版

计算机网络-自顶向下方法-第6版。 从应用层开始沿协议栈向下讲解计算机网络的基本原理,强调应用层范例和应用编程接口,内容深入浅出,注重教学方法,理论与实践相结合。第3版的内容相应更新并反映了网络领域的最新进展,如增加了无线和移动网络一章,扩充了对等网络、BGP、MPLS、网络安全、广播选路和因特网编址及转发方面的材料;还增加了一套实用的实验,并修订了习题。本书适合作为计算机、电子、通信工程相关专业的本科生和研究生的计算机网络课程教科书,对于网络业界甚至网络科研人员,本书也是一本不可多得的参考书。

2018-08-27

ConstXiong的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除