mapper

Mybatis精讲(二)---生命周期

依然范特西╮ 提交于 2019-12-05 02:35:23
目录 回顾 SqlSessionFactoryBuilder SqlSessionFactory openSessionFromDataSource Executor SqlSession Mapper 总结 # 加入战队 微信公众号 回顾 上一章节我们通过xml和代码的方式实现了Mybatis环境的配置。代码方式只是简单介绍下。我们也知道我们大部分情况使用的是xml方式的配置。在实际开发中我们那样开发显然是不合理的。 上章节提到的组件显示不可能每次执行sql都要重新创建的。这样性能上肯定是过不去的。今天我们就来简单聊聊SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper这些组件的生命周期吧。 SqlSessionFactoryBuilder 通过观察分析这个类我们就知道既然是Builder模式的类,那他的作用就是构建起(孵化器).换句话说这个类不是那么的重要,因为他唯一的作用就是孵化SqlSessionFactory。在Spring与Mybatis整合的框架中,我相信Spring一定是在构建了SqlSessionFactory之后就将这个类进行回收了。因为后面就不需要了。这里纯属个人猜想。 public SqlSessionFactory build(InputStream inputStream, String

spring boot1.1 idea + springboot + mybatis(mybatis-generator) +mysql +html实现简单的登录注册

微笑、不失礼 提交于 2019-12-05 02:20:56
前言 这两年springboot比较火,而我平时的工作中不怎么使用spring boot,所以工作之余就自己写写项目练练手,也跟大家一起学习。 打算从最开始的搭架子,登录注册,到后台管理的增删改查,业务逻辑,引用权限框架,如果能一直坚持下去就再增加缓存,中间件,消息队列,数据库方面分库分表,负载均衡这些比较主流的东西都玩一遍。 页面基本上都是在网上找的免费模板,也会借鉴一下其他的博客,如果引用较多会挂上原文链接。 spring boot 这里引用一篇阿里云的文章,有兴趣的朋友可以去看一看,是spring boot的介绍和使用。 https://yq.aliyun.com/articles/495578 正文 创建项目,用的JDK版本是1.8, 项目结构 js css这些资源要放在static包下,我放别的地方引用不进去,后文再说。 页面位置 pom文件 <?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 https://maven.apache

Mybatis工作流程源码分析

。_饼干妹妹 提交于 2019-12-05 02:11:02
1.简介   MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录《摘自mybatis官网》。   mybatis在我们开发中经常使用,所以搞清楚mybatis的工作流程还是比较重要的,下面就开始我们的分析。 2.Mybatis中的核心对象 2.1mybatis使用示例 public static void main(String[] args) throws IOException { //1.创建sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); //2.创建会话 SqlSession session = sqlSessionFactory.openSession(); try { //3.获取mapper代理对象 BlogMapper

Struts2

。_饼干妹妹 提交于 2019-12-05 02:03:39
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 把它设置为开发模式,发布时要设置为false --> <constant name="struts.devMode" value="true" /> <!-- 设置在class被修改时是否热加载,发布时要设置为false --> <constant name="struts.convention.classes.reload" value="true"/> <!-- 自动动态方法的调用,使用这个设置后可以这样调用:action!method --> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <!-- 指定jsp文件所在的目录地址 --> <constant name="struts.convention.result.path" value="/WEB-INF/content/" /> <!--

mybatis的基本使用

我的未来我决定 提交于 2019-12-05 00:28:37
第一部分 基本概念 1.1 什么是MyBatis   MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 1.2 经典配置 从 XML 中构建 SqlSessionFactory   每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。 而 SqlSessionFactory 本 身 是 由 SqlSessionFactoryBuilder 创建的,它可以从 XML 配置,注解或手动配置 Java 来创建 SqlSessionFactory。但是当Mybatis与一些依赖注入框架(如Spring或者Guice)同时使用时,SqlSessions将被依赖注入框架所创建,所以你不需要使用SqlSessionFactoryBuilder或者SqlSessionFactory   从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。MyBatis 包含一个名叫 Resources 的工具类

MyBatis自动化配置

China☆狼群 提交于 2019-12-04 23:09:20
摘要 该文章主要为记录如何在SpringBoot项目中整合JDBC和MyBatis,在整合中我会使用简单的用法和测试用例,毕竟该文章目的是为了整合,而不是教大家如何去使用。希望大家多多包涵。 通用配置 下面介绍的整合JDBC和整合MyBatis都需要添加的实体类和配置 数据库表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1; 实体类 添加简单的User实体类,用于下面jdbc和mybatis的使用和测试

mybatis源码分析之04Mapper接口的动态代理

送分小仙女□ 提交于 2019-12-04 21:56:38
在工作中,使用mybatis操作数据库,只需要提供一个接口类,定义一些方法,然后调用接口里面的方法就可以CRUD,感觉是牛了一逼! 该篇就是记录一下,mybatis是如何完成这波骚操作的,即分析我们测试代码的第4行。 FemaleMapper femaleMapper = sqlSession.getMapper(FemaleMapper.class); 由上篇可知,sqlSession的真实类型是DefaultSqlSession. 所以,我们直接是看DefaultSqlSession#getMapper(Class<T> type)方法,当然,断点也是少不了的! public <T> T getMapper(Class<T> type) { return configuration.getMapper(type, this); } 是不是有点熟悉。。。。 接着走。。。 public <T> T getMapper(Class<T> type, SqlSession sqlSession) { return mapperRegistry.getMapper(type, sqlSession); } 再接着走。。。。 public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final

MyBatis-Plus 自定义sql语句

泄露秘密 提交于 2019-12-04 20:42:18
一、引言 Good Good Study,Day Day Up ??? MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么那么今天说说MP怎么自定义sql语句吧。 二、配置 自定义的sql当然是写在XML文件中的啦,那么首先来定义xml文件的位置,在yml配置文件如下 mybatis-plus: # 如果是放在src/main/java目录下 classpath:/com/*/*/mapper/*Mapper.xml # 如果是放在resource目录 classpath:/mapper/**.xml mapper-locations: classpath:/mapper/**.xml 三、具体实现 使用注解实现: 在我们Mapper接口中定义自定义方法即可。 /** * @Auther : IT贱男 * @Date : 2019/6/10 14:40 * @Description: User对象持久层 */ public interface UserMapper extends BaseMapper<User> { /** * * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法 * * @param userWrapper * @return */ @Select("SELECT * FROM user ${ew

mybatis源码分析之02配置文件解析

痞子三分冷 提交于 2019-12-04 19:06:47
该篇正式开始学习mybatis的源码,本篇主要学习mybatis是如何加载配置文件mybatis-config.xml的, 先从测试代码入手。 public class V1Test { public static void main(String[] args) { try (InputStream is = Resources.getResourceAsStream("mybatis-config.xml")) { SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession sqlSession = sqlSessionFactory.openSession(true); FemaleMapper femaleMapper = sqlSession.getMapper(FemaleMapper.class); Female female = femaleMapper.getFemaleById(1); System.out.println(female); } catch (Exception e) { e.printStackTrace(); } } } 1. 加载mybatis配置文件mybatis-config.xml InputStream is =

自定义InputFormat

梦想与她 提交于 2019-12-04 18:44:31
回顾:   在上一篇 https://www.cnblogs.com/superlsj/p/11857691.html 详细介绍了InputFormat的原理和常见的实现类。 总结来说,一个InputFormat是将文件切片----->再转化为<key--value>对转交给Mapper处理。   所以我们看到在InputFormat类中只有两个方法,一个负责切片,一个返回能将切片信息转化为相应的键值对的对象: public abstract class InputFormat<K, V> { public InputFormat() { } public abstract List<InputSplit> getSplits(JobContext var1) throws IOException, InterruptedException; public abstract RecordReader<K, V> createRecordReader(InputSplit var1, TaskAttemptContext var2) throws IOException, InterruptedException; }   以KeyValueInputFormat为例: @Stable public class KeyValueTextInputFormat extends