MyBatis

mybatis 执行接口的方法

别等时光非礼了梦想. 提交于 2020-02-19 05:58:29
看下执行下面这行代码的时候,都发生了什么 User user = userMapper.getById(1L); 在上一篇中,获取mapper其实是以org.apache.ibatis.binding.MapperProxy为InvocationHandler创建代理对象。那么执行接口的方法的时候,也应该是执行MapperProxy的invoke方法 org.apache.ibatis.binding.MapperProxy#invoke public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { try { if (Object.class.equals(method.getDeclaringClass())) { return method.invoke(this, args); } else if (isDefaultMethod(method)) { return invokeDefaultMethod(proxy, method, args); } } catch (Throwable t) { throw ExceptionUtil.unwrapThrowable(t); } //封装下method成MapperMethod final MapperMethod

MyBatis多表操作

China☆狼群 提交于 2020-02-19 04:30:08
mybatis注解开发 简单的注解开发: 复杂的注解开发: 一对一查询: @One注解完成一对一配置:select指定另一个接口中的方法进行调用获取想要的值 一对多 @Many注解完成一对多配置:select指定另一个接口中的方法进行调用获取想要的值 多对多 mybatis的延迟加载 在One或Many注解中,使用FetchType属性可以指定加载的方式是懒加载或者立即加载。 设置为LAZY代表懒加载,效果为:当不使用关联的JavaBean时,只查询当前JavaBean中的字段,只有使用到关联的JavaBean时才去执行sql语句查询它。 设置为EAGER代表立即加载,效果为:查询JavaBean时就立刻把关联的JavaBean全部查询出来。 任务 1. 一对一和一对多的案例完成。使用两种方式进行配置 2. 多对多的配置中,把双方的查询都完成。使用两种方式配置 3. 把一对一,一对多和多对多的案例使用注解方式配置。 注意:如果使用注解配置,映射配置文件一定要删除。不能同时存在注解配置和映射文件配置。J 来源: https://www.cnblogs.com/maomaodesu/p/12329631.html

Mybatis动态SQL

…衆ロ難τιáo~ 提交于 2020-02-19 04:16:36
动态SQL常用的标签 1.< if >标签 2.< where >标签 3.< foreach >标签 示例一 < if >标签与< where >标签的使用 < ! --我们可以把常用sql语句定义然后使用时直接调用即可-- > < sql id = "default" > select * from user < /sql > < select id = "findState" parameterType = "cn.msg.bean.User" resultType = "cn.msg.bean.User" > < ! --引用sql语句-- > < include refid = "default" > < /include > < ! --以下内容为如果任意一个属性不为空或默认值,就添加相应的sql条件-- > < where > < if test = "name!=null" > and name = #{name} < /if > < if test = "id!=0" > and id = #{id} < /if > < if test = "money!=0.0" > and money = #{money} < /if > < /where > < /select > 示例二 < foreach >标签的使用 < ! -

mybatis开发入门

邮差的信 提交于 2020-02-18 14:31:11
mybatis开发入门 mybatis架包下载地址: https://mybatis.org/mybatis-3/index.html 简单的入门练习 项目布局 实体类 User.java package com . hp . mybatis . bean ; import java . sql . Date ; public class User { private Integer id ; private String username ; private Date birthday ; private String sex ; private String address ; @Override public String toString ( ) { return "User{" + "id=" + id + ", username='" + username + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}' ; } public Integer getId ( ) { return id ; } public void setId ( Integer id ) { this . id = id ; } public String

IllegalArgumentException: Result Maps collection already contains value for com.twinkle.community.

青春壹個敷衍的年華 提交于 2020-02-18 14:09:02
本来是springboot+mybatis做项目,后来使用MGB二次生成代码后运行时报错, 原因是MBG对于xml是进行合并而不是覆盖,所以出现下图这样的一个xml文件中有多段相同内容,可以直接删除xml然后再次生成(如果没有对xml文件做过修改的话),否则只能手动删除多余的, 对于自动生成的model和mapper(.java)都是直接覆盖, 来源: CSDN 作者: pepper5 链接: https://blog.csdn.net/pepper5/article/details/104372600

Mybatis源码分析:trim标签

∥☆過路亽.° 提交于 2020-02-18 08:25:41
/*--> */ /*--> */ /*--> */ /*--> */ trim标签使用    标签用于对标签内的sql语句进行前后缀补齐或者前后缀删除。该标签提供了四个属性,prefix,prefixOverrides,suffix,suffixOverrides。prefix,suffix用于补齐sql前后缀的值。而prefixOverrides,suffixOverrides则表示如果sql语句中前缀或者后缀的值跟两个属性中的值一致,则会将这个值删除掉。看下面一段Mapper配置,该语句最终会变成 select id,name,age from sstudent where id=? and 1=1 .观察下列代码,进行流程分析。 在第一个trim标签中,存在prefix属性,那么语句拼凑为 where id=#{id} 检查suffix和suffixOverrides,suffixOverrides值为空,那么不做任何处理,此时会继续拼接suffix的值,所以sql语句变成where id=#{id} and 在第二个trim标签中,存在 prefixOverrides="and|or|where",mybatis首先使用竖线'|'分割为数组,因为1=1 and并不以{and,or,where}开头,所以不做任何处理 在 suffixOverrides="and|or

MyBatis的配置文件

别等时光非礼了梦想. 提交于 2020-02-18 05:43:07
MyBatis配置文件结构 MyBatis根配置信息文件 根配置文件文档的结构:顶层的configuration配置 properties属性:可外部配置且可以动态替换的。 settings设置:调整设置,它们会改变MyBatis的运行时行为。 typeAiases类型命名:类型别名是为Java类型设置一个别名。 typeHandlers类型处理器:用类型处理器将获取的值以合适的方式转换成Java类型。 objectFactory对象工厂:MyBatis每次创建结果对象的新实例时,它都会使用一个对象工厂ObjectFactory实例来完成。 plugins插件 environments环境:environment环境变量、transcationManager事务管理器、dataSource数据源。environment环境配置实际就是数据源的配置,每个 SqlSessionFactory实例只能选择一个环境 databaseIdProvider数据库厂商标识 mappers映射器:mapper映射器告诉MyBatis到哪里去找映射文件。 MyBatis映射文件 SQL映射文件常用的元素: select。映射查询语句。 insert。映射插入语句。 update。映射更新语句。 delete。映射删除语句。 sql。可被其他语句引用的可重用语句块。 cache。给定命名空间的缓存配置

MyBatis - 2 - Mapper +配置总结

时光毁灭记忆、已成空白 提交于 2020-02-17 15:14:22
视频:https://www.bilibili.com/video/av34875242?p=4 文章目录 # Mapper # 配置总结 # Mapper 会为接口自动的创建一个代理对象,代理对象去执行增删改查方法 # 配置总结 SqlSession 代表和数据库的一次会话,用完必须关系 SqlSession 和 connection 一样都是非线程安全的。每次使用都应该去获取新的对象 mapper 接口没有实现类,但是 mybatis 会为这个接口生成一个代理对象 (将接口和xml进行绑定) 两个重要的配置文件 mybatis的全局配置文件,包含数据库连接池信息,事务管理器信息等。。。系统运行环境信息 sql映射文件:保存了每一个sql语句的映射 来源: CSDN 作者: LawssssCat 链接: https://blog.csdn.net/LawssssCat/article/details/104353337

Mybatis--生命周期作用域

戏子无情 提交于 2020-02-17 14:27:51
1.生命周期和作用域:     1.SqlSessionFactoryBuilder 创建完成 SqlSessionFactory 就可以释放了     2.SqlSessionFactory:         相当于保存数据库会话的线程池。         一旦创建就应该在程序的运行期间一致存在。          不得丢弃和创建另一个实例 。         使用单例或者静态单例创建。     3.SqlSession :           try( session=SqlSessionFactory.openSqlsession() ){             session 作用域 (花括号范围)           } 1. try 后面接括号 的方式:JDK7 定义的 用来 对IO操作进行自动释放 操作   try(sqlsession=sqlsessionfactory.opensession()){ 定义 代码,会话的范围 } 来源: https://www.cnblogs.com/chencn/p/12321499.html

mybatis一对多 多对一 多对多

青春壹個敷衍的年華 提交于 2020-02-17 14:26:41
https://blog.csdn.net/AdminGuan/article/details/98952484 Mybatis的Mapper该如何编写 多对一 ?   很简单,就是在resultMap标签中配置<association></ collection >标签关联所属的用户实体 Mybatis的Mapper该如何编写 多对多 ?   不能直接用标签关联,为了解决这个问题,我们需要再用户和组之间建立一张关联的表,用于存储他们之间的对应关系,用户和组都通过这个关联的表,来查询他们之间的关系 <resultMap id="唯一的标识" type="映射的pojo对象"> <id column="表的主键字段或查询语句中的别名字段" jdbcType="字段类型" property="映射pojo对象的主键属性" /> <result column="表的一个字段(可以为任意表的一个字段)" jdbcType="字段类型" property="映射到pojo对象的一个属性"/> <collection property="pojo的集合属性" ofType="集合中的pojo对象"> <id column="集合中pojo对象对应的表的主键字段" jdbcType="字段类型" property="集合中pojo对象的主键属性" /> <result column=