概要 今天我们接着来学习MyBatis的一些常用特性,包括别名,类型处理器,动态SQL 如何使用MyBatis 在本小节,我将通过一个例子介绍MyBatis 中一些常用特性的运用,包括类型处理器,动态SQL 别名 MyBatis 中有个比较好用的特性就是别名,这是为了减少在配置文件中配置实体类的全限定名的冗余。运用如下: 首先在MyBatis的配置文件中配置别名: <! MyBatis 内置了很多类型处理器(typeHandlers),详细可以参考MyBatis官方文档,对枚举类的处理的是通过EnumTypeHandler和EnumOrdinalTypeHandler两个处理器来处理了 在这里插入图片描述 动态SQL的使用 MyBatis的强大特性之一便是它的动态SQL,主要是处理 根据不同条件拼接SQL语句,例如拼接时添加必要的空格,去掉列表中的最后一列的逗号,MyBatis的动态SQL 在这里插入图片描述 参考文献 MyBatis 3官方文档 mybatis枚举自动转换(通用转换处理器实现) 源代码 https://github.com/XWxiaowei/MyBatisLearn/tree
Mybatis 3.5 发布有段时间了,终于支持了 Optional ,这么实用的特性,竟然还没人安利……于是本文出现了。 文章比较简单,但非常实用,因为能大量简化恶心的判空代码。 时代码是这样写的: 1 2 3 4 5 @Mapper public interface UserMapper { @Select("select * from user where id = 你的代码可以这么写了: 1 2 3 4 5 @Mapper public interface UserMapper { @Select("select * from user where id 至于 Optional 怎么使用,本文不作赘述——JDK 12都发布了,你要我普及JDK 8的”新特性”吗?大家自行百度吧,百度很多了。关键词:Java 8 Optional 。 思考 Mybatis 已支持 Optional ,Mybatis Spring Boot Starter 也已跟进,引入如下依赖即可: 1 2 3 4 5 <dependency> <groupId
今天说一说mybatis 3_mybatis源码分析,希望能够帮助大家进步!!! 最近在网上看了mybatis的源码直播,记录、复习一下当时的内容!! 阅读源码需要从三个方向来剖析: 1.宏观:分析这个框架具备哪些功能 2.微观:阅读源码 3.图解:根据源码画出UML图 阅读源码的方式: 1.跟着代码debug进入源码 2.带着问题来看源码 前期准备 1.引入包 2.准备配置文件 3.配置解析demo 4.业务查询demo ============================================================ ========= 1.mybatis解析配置是怎样的流程 ===================================================================== 假如前期准备完成 ,现在执行mybatis的demo,第二步是为了拿到文件流,我们直接看第三步并进入mybatis源码 其中new XMLConfigBuilder(reader, environment, properties
MyBatis分页有以下方式实现:
一、内存分页,使用RowBounds类,但这种方式不推荐,基本不用,所以此方式集成省略。
二、自定义实现,代码量比较少,简单,比较灵活。 IUserOperation.java中加入Mapping对应的方法
public List
<result column="roleDesc" property="roleDesc"></result> </collection> </resultMap> 小结 MyBatis 多表配置方式: 一对一配置:使用 做配置 一对多配置:使用 + 做配置 多对多配置:使用 + 做配置 二、MyBatis注解开发 2.1 常用注解 注解 目标 对应的XML标签
随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。 1.2 MyBatis特性MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集MyBatis可以使用简单的 ,则去镜像网站中下载没有,则去中央仓库中下载本人其他相关文章链接1.一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程2.二、搭建MyBatis 采用xml方式,验证CRUD(增删改查操作)3.三、MyBatis核心配置文件详解4.四、MyBatis获取参数值的两种方式(重点)5.五、MyBatis的增删改查模板(参数形式包括:String、对象 )9.九、MyBatis动态SQL10.十、MyBatis的缓存11.十一、MyBatis的逆向工程12.十二、MyBatis分页插件
这里对mybatis的入门介绍以官方最新MyBatis3.4.1为准,具体文档及jar包请访问:https://github.com/mybatis/mybatis-3/releases。 DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd 3 name=root 4 password=XDP 注:此篇MyBatis3入门不讲详细原理及各参数是什么意思,主要是对mybatis的一个demo入门程序。 1 package day_8_mybatis.mapper; 2 3 import day_8_mybatis.pojo.User; 4 5 /** 6 * mapper数据库访问接口 DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis
MyBatis的高级特性 1 学习目标 1,理解Mybatis多对多关系 2,掌握Mybatis的延迟加载 3,掌握Mybatis缓存 4,掌握逆向工程生成mapper和实体类 2 Mybatis DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis 2.3.7 解决方案 2.3.7.1 解决1: 查看mybatis官网 http://www.mybatis.org/mybatis-3/zh/configuration.html 打开页面,找到settings 如果 SqlSession3 去执行相同 mapper 映射下 sql,执行 commit 提交, 将会清空该 mapper映射下的二级缓存区域的数据。 mysql-connector-java\5.1.35\mysql-connector-java-5.1.35.jar" /> <context id="testTables" targetRuntime="<em>MyBatis</em><em>3</em>
mybatis梳理 官方入门 数据库表 mybatis配置 demo 源码 SqlSessionFactoryBuilder-官方提示: SqlSessionFactory-官方提示: SqlSession -3 抛弃日常工作中依赖spring的自动装配,按照mybatis的官方文档的提示快速开发一个demo; 数据库表 CREATE TABLE `user` ( `id` bigint(20) NOT DEFAULT CHARSET=utf8mb4; mybatis配置 <? DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org /dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment
student` (`id`, `name`, `tid`) VALUES (2, '小红', 1); INSERT INTO `student` (`id`, `name`, `tid`) VALUES (3, getTeacher"/> </resultMap> <select id="getTeacher" resultType="Teacher"> select * from mybatis.teacher resultMap="TeacherStudent"> select s.id sid,s.name sname,t.name tname,t.id tid from mybatis.student s,mybatis.teacher t where s.id = t.id and t.id = #{tid} </select> <resultMap id="TeacherStudent </resultMap> <select id="getStudentByTeacherId" resultType="Student"> select * from mybatis.student
-- mybatis-config.xml --> <typeAliases> <typeAlias alias="user" type="com.freecloud.plug.<em>mybatis</em>.entity.User <typeAlias alias="department" type="com.freecloud.plug.<em>mybatis</em>.entity.Department" /> <typeAlias alias="userAndDepartment" type="com.freecloud.plug.<em>mybatis</em>.entity.UserAndDepartment" ></typeAlias> < 也可以使用包搜索方式,减少配置,但需要在实体类上增加@Alias注解 <typeAliases> <package name="com.freecloud.plug.<em>mybatis</em>.entity"/ " /> </resultMap> 准备数据 ## mybatis测试typeHander增加json转换 CREATE TABLE `mybatis_json` ( `id` int(5) NOT
https://mybatis.org/mybatis-3/zh/index.html 说简单点,MyBatis是一个持久化框架,用于Java程序高效访问数据库,不用我们去访问原生相对繁琐的JDBC等Api /dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="lazyLoadingEnabled <em>3</em>、配置数据源 可以在上面的主文件中配,以下为例: <?xml version="1.0" encoding="UTF-8"?> <! /dtd/mybatis-3-config.dtd"> <configuration> <environments default="dev" > <environment id="dev"> DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd dept.setLoc("郑州"); mapper.insertDept(dept); session.commit();//实现增加 修改 删除 //3. 更新操作; // Dept dept=new Dept(); // dept.setDeptno(3); // dept.setDname("张沅湲"); // mapper.updateDept(dept); // session.commit(); //4.删除操作; // int i=mapper.deleteDept(3) class Test3 { public static void main(String[] args) { SqlSession session=SqlSessionFactoryUtil.getSqlSession
结果集的映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂映射的情形都能迎刃而解。可以使用 resultMap 或 resultType,但不能同时使用。 {include_target}"/> </sql> <select id="select" resultType="map"> select field1, field2, field3 3 结果映射 resultMap 元素是 MyBatis 中最重要最强大的元素。 setHashedPassword(String hashedPassword) { this.hashedPassword = hashedPassword; } } 基于 JavaBean 的规范,上面这个类有 3 如果列名和属性名没有精确匹配,可以在 SELECT 语句中对列使用别名(这是一个基本的 SQL 特性)来匹配标签。
Mybatis系列目标:从入门开始开始掌握一个高级开发所需要的Mybatis技能。 这是mybatis系列第3篇。 对象 引入lombok(非必须) 引入logback支持(非必须) 写一个测试用例 2、 使用SqlSesion执行sql操作 SqlSession常见的用法 新增操作 执行删除 执行修改 执行查询 3、 /dtd/mybatis-3-config.dtd"> <configuration> <! 比如开发环境、测试环境、线上环境,这3个环境中的数据库可能是不一样的,可能还有更多的环境。 DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-
XML 映射器 MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。 MyBatis 的基本原则之一是:在每个插入、更新或删除操作之间,通常会执行多个查询操作。因此,MyBatis 在查询和结果映射做了相当多的改进。一个简单查询的 select 元素是非常简单的。 来标识,并被传递到一个新的预处理语句中,就像这样: // 近似的 JDBC 代码,非 MyBatis 代码... 这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。 结果映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。 resultType 和 resultMap 之间只能同时使用一个。
在前面两篇的MyBatis源码解读中,我们一路跟踪到了MapperProxy,知道了尽管是使用了动态代理技术使得我们能直接使用接口方法。为巩固加深动态代理,我们不妨再来回忆一遍何为动态代理。 我相信在初学MyBatis的时候几乎每个人都会发出一个疑问,为什么明明是XXXDao接口,我没有用任何代码实现这个接口,但却能直接使用这个接口的方法。现在清楚了,动态代理。 Test { 9 void say(); 10 } 我们现在想像MyBatis那样不用实现它而是直接调用。 回到我们的MyBatis源码,在上一节中我们知道了一个Dao接口实际上是通过MapperProxyFactory生成了一个MapperProxy代理类。 清楚了MyBatis是如何构造出代理类的算是解决了第一个问题——一个接口怎么能直接调用其方法。 现在抛出第二个问题——接口中每个具体的方法是如何做到一一实现代理的呢?
安装 vuex4和vue-router4 npm install vuex@next vue-router@next -S vue-router使用 创建文件src/router/index.js import { createRouter, createWebHistory } from 'vue-router' // new 转换成工厂函数 const router = createRouter({ history: createWebHistory(), routes: [
0, 0.75); 圆角 border-radius: 5px; 渐变 background:linear-gradient(red, green, blue); 阴影 box-shadow:3px 3px 3px rgba(0, 64, 128, 0.3); 倒影 box-reflect: below 2px; 文字装饰 text-stroke-color: red; 文字溢出 text-overflow 背景效果 background-size: 100px 100px; 边框效果 border-image:url(bt_blue.png) 0 10; 平滑过渡 transition: all .3s
MyBatis有以下元素用于处理动态SQL: if choose(when,otherwise) trim(where,set) foreach if 通常用在where子句的一部分: <select > parameterType); } 然后在 mybatis-config.xml 文件中将它设置为默认语言: <typeAliases> <typeAlias type="org.sample.MyLanguageDriver