MyBatis

mybatis There is no getter for property named 'xx' in 'class java.lang.String

偶尔善良 提交于 2020-03-11 07:43:24
用mybatis查询时,传入一个字符串传参数,且进行判断时,会报 Java代码 There is no getter for property named 'moduleCode' in ' class java.lang.String 错误写法: Java代码 <select id= "queryAllParentModule" resultType= "jobModule" parameterType= "jobModule" > select modulecode, modulename, modulevalue, linkurl, rank, parentmodule=isnull(parentmodule, 1 ), moduledescription from job_module <where> <choose> <when test= "moduleCode!=null and moduleCode!=''" >modulecode = #{moduleCode}</when> <when test= "moduleCode==null or moduleCode==''" >(parentmodule is null or len(parentmodule)<= 0 )</when> </choose> </where> lt;/select> 需要修改成:

MyBatis面试题(二)

*爱你&永不变心* 提交于 2020-03-11 02:32:04
说说什么是MyBatis的接口绑定? 答:在MyBatis项目中定义任意的接口,并将接口里面的方法和sql语句进行绑定,这样可以直接通过接口方法来调用相应的sql语句,这就是接口绑定。 MyBatis的接口绑定有哪些实现方式? 答:一种是通过注解来绑定,在接口的方法上加上@Select、@Update这些注解,注解里面的参数就是要运行的sql语句。另外一种就是直接在xml文件里写sql,通过xml文件里namespace这个标签的值来确定对应的到底是哪个接口,所以namespace要是接口的全限定名。 什么情况下用注解绑定,什么情况下用xml绑定? 答:当SQL语句比较简单时候,用注解绑定,当SQL语句比较复杂时候,用xml绑定。但是个人建议还是用xml绑定的好,因为在业务的发展中,SQL只会越来越复杂,就没见过几个SQL由繁入简的例子,所以不如一开始就写在xml文件里,省事。 使用MyBatis的mapper接口调用时有哪些要求? 答:首先xml文件里的namespace要和mapper接口的全路径一样,这样才能一一对应,其次mapper接口的方法名要和xml文件中定义的每个sql的id一样,这样方法才能对应,最后就是mapper接口中方法的返回值和参数要和其在xml文件中对应sql的parameterType以及resultType的类型相同。 Mybatis是否支持延迟加载?

MyBatis面试题(三)

China☆狼群 提交于 2020-03-11 02:21:38
说说对ORM的理解? 答:ORM就是所谓的对象关系映射,通过这门技术,可以让程序中的实体对象和数据库的记录做到互相映射,对象可以借此持久化到数据库记录,数据库记录也能借此转化为实体对象。 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? 答:Hibernate就属于全自动ORM映射工具,因为使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而 Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。 你对MyBatis的一级缓存和二级缓存有了解吗,说一下? 答:MyBatis默认只开启一级缓存,一级缓存是对同一个SqlSession起作用,在使用SqlSession第一次查询后,MyBatis会将结果缓存起来,如果下次再使用同一个SqlSession调用Mapper方法,sql的参数也完全相同,如果没有声明需要刷新,同时缓存也没有超时,那SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库做查询。 MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。SqlSessionFactory层面上的二级缓存默认是不开启的,二级缓存的开启需要进行配置,实现二级缓存的时候

mybatis一对一&多对一配置详解

假装没事ソ 提交于 2020-03-10 20:32:28
一对一建表原则 将任意一方当做主表(B是主表),A创建外键列指向B的一方的主键,A外键列唯一 说白了多对一也是一对一的其中一种表现形式 java建立关系原则 一方持有另外一方的引用 举例子 一个客户对应多个订单 就客户而言,客户和订单是1对多的关系 就订单而言,每个订单只能属于一个用户,所以订单和客户属于1对1的关系 代码实现(订单和客户的一对一关系) 步骤一:明确两个实体类关系,在订单的一方提供客户的引用 [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 public class Customer { private Integer cid ; private String cname; //省略get/set/toString } /** 一个订单属于一个客户,在订单方创建客户引用 注意.客户引用的对象名字很重要 */ public class Orders { private Integer oid ; private String orderName; private String cid; private Customer c; //省略get/set/toString } 步骤二:创建OrdersMapper接口和OrdersMapper.xml映射配置文件(具体解释看下图)

Mybatis4 Mybatis动态sql的实现

感情迁移 提交于 2020-03-10 20:14:37
1.什么是动态SQL SQL语句不固定, 会根据前台用户的操作而进行变化的SQL语句, 可以被称之为动态SQL. 在MyBatis中, 提供了一组标签, 用于方便的实现动态SQL, 不需要通过java代码拼接字符串了. ###2.动态sql中的标签 1. <if> 用于条件判断, test属性表示判断结果, 要求是一个boolean. 2.<where> 用于维护where子句, 通常配合一起使用. 如下功能: a)当没有条件时, 不会创建WHERE关键字; b)当有条件时, 会自动生成WHERE关键字; c)会自动去掉第一个条件的and/or关键字. 3.<choose><when><otherwise> 功能类似于switch…case…default, 表示多分支判断, 只能成立一个条件 <mapper namespace="com.bjsxt.mapper.UserMapper"> <select id="selByCondition" resultType="user"> select * from tb_user <where> <if test="id != null"> and id=#{id} </if> <if test="username != null and username != ''"> and username=#{username} </if>

课时9::MyBatis整合Log4j、延迟加载

折月煮酒 提交于 2020-03-10 19:40:20
.1)如何整合Log4j到mybatis   1.导入log4j的jar包 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>   2.在主配置文件中开启log4j <!-- 配置log4j启动--> <settings> <setting name="logImpl" value="LOG4J"></setting> </settings>     2.1 .如果不写value里面的值 会按照这个顺序查找SLF4J-->Apache Commons Logging-->Log4j 2---Log4j-->JDK logging   3.在resources中配置log4j.properties文件 .2)延迟加载   1.概念     1.1 一对一,一对多,多对一,多对多     一对多:班级--学生,     如果不采用延迟加载(立即加载),查询时会将一对多都查询,班级丶班级中的所有学生。     如果想要 暂时只查询一个1的一方,而多的一方 先不查询,而是在需要查询的时候再去查询--->延迟加载   2.以学生和学生证一对一案例为例     2.1

mybatis-plus java.lang.IndexOutOfBoundsException: Index: 11, Size: 11

雨燕双飞 提交于 2020-03-10 19:00:00
您是否使用lombok 提前说明本文的异常时由于使用lombok不适当。 mybatis plus出现这个错? 猛一看我以为是什么数组下标越界之类的问题啊,真是无从下手。 获取的数据字段正好是11个。 既然都各种查询都报错,那么我就将错误的目标定位到了实体类上。 发现实体类只使用了@Builder注解,@Builder注解使用后我们必须显示的声明构造方法,或者使用@AllArgsConstructor @NoArgsConstructor来声明构造。 这个异常正式因为使用MP和lombok不当造成的,mybatis找不到构造方法,无法将查询结果绑定到实体对象上。 来源: oschina 链接: https://my.oschina.net/yuhuashang/blog/3191184

首次公开!2020年金3,朋友面完阿里、滴滴、美团、携程后,整理的一份Java文档

本小妞迷上赌 提交于 2020-03-10 16:13:11
【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 最近有很多朋友去目前主流的大型互联网公司面试(阿里巴巴、京东、字节跳动、蚂蚁金服、滴滴),面试回来之后会发给我一些面试题。有些朋友轻松过关,拿到offer,但是有一些是来询问我答案的。 我特意整理了一下,有很多问题不是靠几句话能讲清楚,所以整理了一些资料来解答这些面试题。很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。 先来看下用手机记录的面试材料: 一,阿里巴巴面试题 二,滴滴面试题 三,美团面试题 四,携程面试题 五,本次面试得到的结论 通过面试题来看,可以看出目前互联网公司面试考点为: 性能调优、算法数据机构 高并发下数据安全、接口冪等性、原子性等 分布式下协同、已经锁的处理 数据库的分库分表、项目之间的垂直拆分 出现频率高的技术点有: HashMap JVM Dubbo Mybatis Zookeeper http tcp/ip docker 六,解惑资料与福利 以上部分面试题的答案整理了资料来解惑: 来源: oschina 链接: https://my.oschina.net/u/4441013/blog/3191021

MyBatis-配置文件标签复习

十年热恋 提交于 2020-03-10 13:54:39
1.MyBatis全局配置 以下标签均在父标签Configuration中 1.<properties resource="jdbc.conf"></properties>   引入外部文件文件   1.resource:从类路径引入(只有spring中才需要加上:classpath)   2.url:从磁盘路径或者网络路径引入 2.<!-- settings这是MyBatis中极为重要的调整设置,他会改变MyBatis的运行行为 -->  <settings>  <setting name="mapUnderscoreToCamelCase" value="true"/>  </settings> 可以在MyBatis官方查询相关设置,此处只截取一部分 3.<!-- 类型别名,为常用的类型(JavaBean)起别名 --> <typeAliases> <!-- typeAlias:就是为一个JavaBean起别名,别名默认就是类名(不区分大小写),也可以自己指定 --> <typeAlias type="com.indi.bean.Employee" alias="Emp"/> <!-- 批量起别名;name="指定包名,默认别名就是类名"--> <package name="com.indi.bean"/> </typeAliases>如果在批量的时候还想起别名,就用

(四)Mybatis 面试题

房东的猫 提交于 2020-03-10 13:52:51
Mybatis 86、Mybatis是什么? mybatis是一个持久层ORM框架。它内部封装了jdbc,使得开发更简洁,更高效。 Mybatis使开发者只需要关注sql语句本身,简化JDBC操作,不需要在关注加载驱动、创建连接、处理SQL语句等繁杂的过程。 MyBatis可以通过xml或注解完成ORM映射关系配置。 87、Mybatis和JDBC的关系? (标红) JDBC是Java提供的一个操作数据库的API; MyBatis是一个持久层ORM框架,底层是对JDBC的封装。 MyBatis对JDBC操作数据库做了一系列的优化: (1)mybatis使用已有的连接池管理,避免浪费资源,提高程序可靠性。 (2)mybatis提供插件自动生成DAO层代码,提高编码效率和准确性。 (3)mybatis 提供了一级和二级缓存,提高了程序性能。 (4)mybatis使用动态SQL语句,提高了SQL维护。(此优势是基于XML配置) (5)mybatis对数据库操作结果进行自动映射 88、什么是ORM?(标红) ORM的全称是Object Relational Mapping,即对象关系映射。 描述的是对象和表之间的映射。操作Java对象,通过映射关系,就可以自动操作数据库。 在ORM关系中,数据库表对应Java中的类,一条记录对应一个对象,一个属性对应一个列。 常见的ORM框架