MyBatis

MyBatis源码解析 - 反射模块

徘徊边缘 提交于 2020-03-12 02:42:01
MyBatis源码解析 - 反射模块 1. 前言 ​ 该模块位于 org.apache.ibatis.reflection 包中,MyBatis在进行参数处理、结果映射等操作时,会涉及大量的反射操作。Java 中的反射虽然功能强大,但是代码编写起来比较复杂且容易出错,为了简化反射操作的相关代码,MyBatis提供了专门的反射模块,它对常见的反射操作做了进一步封装,提供了更加简洁方便的反射API。本节就来为读者介绍该模块中核心代码的实现。 2. Reflector Reflector 是MyBaits中反射模块的基础,Reflector中缓存了很多反射操作需要使用的元数据。各个字段如下: private final Class<?> type; //对应的class类型 private final String[] readablePropertyNames; //可读属性的名称集合,可读属性就是存在相应getter方法的属性 private final String[] writablePropertyNames; //可写属性的名称集合,可写属性就是存在相应setter方法的属性 //记录了属性相应的setter方法,key是属性名称,value 是Invoker对象,它是对setter方法对应 // Method 对象的封装 private final Map<String,

Spring Boot-整合MyBatis

限于喜欢 提交于 2020-03-12 02:00:44
Spring Boot整合MyBatis 引入MyBatis和数据库驱动依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency> 使用mybatis-spring-boot-starter,这样可以减少很多配置 减少XML配置; 自动检测存在的DataSource; 自动使用SqlSessionFactoryBean传递DataSource作为一个输入创建和注册一个SqlSessionFactory实例;

Spring Boot 自动装配流程

天涯浪子 提交于 2020-03-11 20:10:37
Spring Boot 自动装配流程 本文以 mybatis-spring-boot-starter 为例简单分析 Spring Boot 的自动装配流程。 Spring Boot 发现自动配置类 这里说的自动配置类指的是在 META-INF/spring.factories 文件中声明的 XXXAutoConfiguration 类。 首先,我们从 @SpringBootApplication 注解的定义中,我们可以发现有一个叫做 @EnableAutoConfiguration 的注解,这也是 SpringBoot 实现自动装配最关键的注解。 //@EnableAutoConfiguration 注解的定义 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[]

SpringBoot整合分页插件

戏子无情 提交于 2020-03-11 19:07:50
导读 很久以前的项目分页查询的话大概会用limit,如果要统计总数还需要使用count,总之大多数情况下都是很麻烦的一件事,特别是使用Mybatis。 分页插件确实解放了我们的双手,不用再写重复的sql,利用mybatis的插件的原理帮我们解决了系列问题。 SpringBoot整合 SSM的整合这里就不再说了,相信现在大部分公司都在使用SpringBoot,当然万变不离其中,你会了SSM的整合,SpringBoot当然不在话下了。 整合之前 在整合之前需要准备环境,数据源,mybatis整合,这里就不再细说了,有不了解的可以会看我之前的文章 https://chenjiabing666.github.io/2018/09/02/springBoot%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8/ 开干 添加Maven依赖 <!--mybatis分页插件--> < dependency > < groupId > com.github.pagehelper </ groupId > < artifactId > pagehelper </ artifactId > < version > 5.1.6 </ version > </ dependency > 自定义一个配置类,如下: /** * @Description 分页插件的参数 * @Author

数据库开发

泄露秘密 提交于 2020-03-11 18:01:48
#MyBatis进阶 复杂Java对象与多张数据库表之间的映射关系 配置数据库连接池提高MyBatis对后端数据库访问的性能 ##更为复杂的E-R图 学员对课程是多对多关系,而教员与课程是一对多关系 学员 User 课程 Couser 教员 Author 以上实体对应的关系图如下: 以上关系对应的数据库表关系如下: 各个实体都具有对应的属性,但是由于User与Cousre是多对多关系,则我们还需要一个多对多关系表UserCourse,来保存User与Course的关系。由于Teacher与Course是一对多的关系,则我们在Course中添加Teacher的唯一标示。 ##复杂对象关系 Java对象 关联 容器 嵌套 ##ResultMap 复杂Java关系映射解决,帮助我们复杂对象到多张数据库表的转换。 ResultMap元素师MyBatis中最重要最强大的元素。 数据库永远不是你想要的或需要它们是什么样的。 ResultMap可以实现复杂查询结果到复杂对象关联关系的转化。 ##Constructor 通过构造方法的方式,对对象进行赋值建立映射关系,这种方法一般用于处理关联时,使用。 类在实例化时,用对象的构造函数注入到对象中: idArg - ID参数;标记结果作为ID可以帮助提高整体效能 arg - 注入到构造方法的一个普通结果 ##ResultMap通过构造函数实例 ##

【Mybatis进阶之多表查询】MyBatis resultMap 多表查询

喜你入骨 提交于 2020-03-11 17:49:02
resultMap 用于映射 对象关系的 时使用。 对照对象的属性可以很方便的写出 mapper.xml 映射文件。 下面用一个例子来再次说明resultMap 的映射过程。 场景如下:(多表关联查询) 需要查询 多个用户,当点击查看是可以查看他的所有的订单,点击订单时可以查看里面的商品 如果要完成这个需求,对应的实体对象如下: java类 对象结构(get set 这里没写) Order//订单类 |--int id |--int userId |--date createTime |--User user User //用户信息 |--int id |--String name |--String address |--List<Order> orderList //该用户的所有订单 |--List<OrderItem> orderItemList//该订单的详情记录 OrderItem //订单详情 |--int id |--orderId //订单id |--int goodsId //商品id |--int number //购买数量 |--goods goods goods //商品对象 |--id |--name |--price 下面对应上面的文件 编写 Mapper.xml 的 ResultMap映射代码: 映射文件 OrderDao.xml <!--

Mybatis之多表关系

戏子无情 提交于 2020-03-11 17:41:30
mybatis中多表关联,主要修改mapper.xml文件和eitity实体。 mapper.xml文件中通过resultmap配置返回映射,eitity实体中通过对象引用定义关系。 spring-mybatis.xml文件与pom.xml文件与 spring-mybatis 中相同,选择其中第一种整合方式。 1、数据库执行脚本 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for item -- ---------------------------- DROP TABLE IF EXISTS `item`; CREATE TABLE `item` ( `itemid` int(11) NOT NULL AUTO_INCREMENT, `itemname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, PRIMARY KEY (`itemid`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW

学生管理系统(SSM简易版)总结

巧了我就是萌 提交于 2020-03-11 16:34:25
之前用 Servlet + JSP 实现了一个 简易版的学生管理系统 ,在学习了 SSM 框架之后,我们来对之前写过的项目重构一下! 技术准备 为了完成这个项目,需要掌握如下技术: Java 基础知识 前端: HTML, CSS, JAVASCRIPT, JQUERY J2EE: Tomcat, Servlet, JSP, Filter 框架: Spring , Spring MVC , MyBatis , Spring 与 MyBatis 整合 , SSM 整合 数据库: MySQL 开发工具: IDEA, Maven 开发流程 之前虽然已经使用 Servlet + JSP 完成了简单的开发,这次使用 SSM 仅仅是重构工作,但我们仍然按照商业项目的开发步骤来一步一步完成,进一步熟悉这个过程, 重复的部分我就直接复制了。 ① 需求分析 首先要确定要做哪些功能 使用 数据库 来 保存数据 能 增删改查 学生的信息 (学号,名称,年龄,性别,出生日期) ② 表结构设计 根据需求,那么只需要一个 student 表就能够完成功能了。 创建数据库:student 将数据库编码格式设置为 UTF-8 ,便于存取中文数据 DROP DATABASE IF EXISTS student; CREATE DATABASE student DEFAULT CHARACTER SET utf8;

Spring+SpringMVC+ Mybatis(Spring Tools Suites 3) 简单项目

孤人 提交于 2020-03-11 13:10:22
STS 3 tomcat 9.0, JDK 8 一、项目结构 二、项目依赖 三、创建项目前生成web.xml文件 项目右键--》Java EE Tools-->Generate Deployment Descriptor Stub-->生成web.xml文件 四、创建项目代码 1.创建实体类 例如:Dept.java package com.dxj.entity; import java.sql.Timestamp; import org.apache.ibatis.type.Alias; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * 部门 Dept * @author Administrator * */ @Alias("Dept") @Data @AllArgsConstructor @NoArgsConstructor public class Dept { private Integer id; private String name; private String loc; private Timestamp date; private String person; } 2.创建数据持久层Mapper 例如:DeptMapper

Spring Boot MyBatis

不想你离开。 提交于 2020-03-11 10:17:57
Spring Boot 整合 Druid 概述 Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和 SQL 解析器组成。该项目主要是为了扩展 JDBC 的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计 SQL 信息、SQL 性能收集、SQL 注入检查、SQL 翻译等,程序员可以通过定制来实现自己需要的功能。 Druid 是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括 DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid 已经在阿里巴巴部署了超过 600 个应用,经过多年生产环境大规模部署的严苛考验。Druid 是阿里巴巴开发的号称为监控而生的数据库连接池! 引入依赖 在 pom.xml 文件中引入 druid-spring-boot-starter 依赖 com.alibaba druid-spring-boot-starter 1.1.10 1 2 3 4 5 引入数据库连接依赖 mysql mysql-connector-java runtime 1 2 3 4 5 配置 application.yml 在 application.yml 中配置数据库连接 spring: datasource: druid: url: jdbc:mysql://ip