MyBatis

Java码农的10年的技术生涯和技术成长,值得借鉴,启发篇!

混江龙づ霸主 提交于 2020-10-29 18:05:04
先简单分享自己这10年在技术上曾经感觉到明显迷茫的阶段: 阶段1:只会增删改查: 时间:大学期间(2008年-2009年) 学习的方式:看视频、看书。(学会了使用控件的增删改查,和写SQL语句)。 自我感觉:XX管理系统已不在话下,反正网站弄来弄去也是增删改查,这大概就是无知者无畏。 如何破:(走出社会去就好了)。 阶段2:能快速实现功能,却不会思考: 时间:(2009年-20012年) 学习的方式:看博客、大量的编码(第1年,封闭式开发(1天敲15个小时代码),第二年后:每周六天,每天到夜里3点)。 感觉:大量的编码,做了大量的不同类型的系统,已练就成一个高级代码工:(CodeSmith代码生成器+批量生成增删改查)。 如何破:(让自己静下来)。 阶段3:学会了分享、安全、性能、底层原理 时间:(20012年-2016年) 学习的方式:写博客、看博客、写框架(CYQ.Data V-V4系列、QBlog)。 感觉:为某个框架代码而自我得意。 如何破:不断重复的将自己归零(把自己的认为得意的东西开源出去,如果要保留一点感觉,可阶段性开源)。 阶段4:领悟了抽象思维、面向对象、写框架、用户体验 时间:(2016年-至今) 学习的方式:看书、写框架(CYQ.Data V5系列、ASP.NET Aries系列、Taurus.MVC系列)。 感觉:也许我懂的很多,但是我不懂的更多。 如何破:

一名北漂三年的Java程序员的面试经历和题库总结

六眼飞鱼酱① 提交于 2020-10-29 16:57:26
最近打算换城市了,受不了北京的雾霾了,所以准备逃离啦。所以一直在面试中,整理了下最近遇到的一些面试题,供大家参考。其中会包含一些面试的小经验,如果您是面霸,希望能给予指导。自己不是大牛,如果您是大牛,也可以忽略之。我面试的岗位是Java后端开发工程师。 一、简历 简历里面需要包含的内容应该是学历,自己的技术栈,然后自己做过的一些项目。简历不需要太长,两页纸即可。里面应该重点写你使用过的一些框架,自己做的一些项目,以及自己的收获,简练第一。一般面试官不会有很多的耐心,看你的项目详细描述,所以尽量简洁明了即可。 二、简历投递 投递的方式有几种吧,相信大家也都知道。一般在程序员的垂直招聘网站投递即可,比如脉脉、BOSS直聘、拉勾等等。智联招聘啥的,不太适合咱们程序员,你懂的。另外,由于自己不是大牛,所以如果有猎头勾搭的话,我尽量不会理会,因为有过血的教训。所以尽量还是自己投简历比较靠谱,或者是内推。 三、面试 由于我是跨城市,所以我接到的面试一般都是电话面试+视频面试,如果聊得差不多了,也有现场面试,不会拘泥于形式。 一般来说,面试流程都差不太多。首先自我介绍,重点介绍一下自己的一些工作经历,以及自己主要负责的一些内容。这块可以提前准备一下,不过也不需要特地准备,别搞得像背书似的,反而觉得不真实。 3.1 技术面试 一般公司都会有两到三轮的技术面试,大厂的技术面试轮次还可能更多

MybatisMapper映射

|▌冷眼眸甩不掉的悲伤 提交于 2020-10-29 13:28:48
MyBatis----mapper的输入映射和输出映射 mapper.xml文件是我们使mybatis时配置操作数据库语句的方,每个语句对应一个方法,具有输入参数和输出参数,各个参数有不同的类型,下面所说的就是何配置不同类型的参数 输入映射 简单类型 即java类库中原本所拥有的数据类型,如Integar,Long,String等。 配置方法,直接将类型添加到sql语句的parameterType属性中,代码如下 < select id = " findUserById " parameterType = " int " resultType = " cn.itcast.pojo.User " > SELECT * FROM user where id=#{id} </ select > pojo对象类型 输入的参数为一个pojo对象,可在sql语句中使用的参数为该对象的属性, #{ } 或者 ${ } 括号中的值为pojo属性名称。 使用前,需要在mapper-config.xml中的 <typeAliases> 标签下先声明该pojo对象,如 <typeAlias alias="PageParam" type="com.param.PageParam"/> 当需要对属性值进行计算时,只要在其中一个括号内写出计算过程,如下面代码中倒数第2行。 < select id = "

mybatis之异常invalid comparison: java.util.Date and java.lang.String(时间判断空串出现异常情况)

笑着哭i 提交于 2020-10-29 11:58:09
查询条件是时间类型:因为mybatis 3.3.0中对于时间参数进行比较时的一个bug. 如果拿传入的时间类型参数与空字符串''进行对比判断则会引发异常. 所以在上面的代码中去掉该判断, 只保留非空判断就正常了。不然报下面的异常: 后端的xml代码如下: <!-- 查询外聘教师档案信息 --> <select id="select" resultMap="ExternalTeacherMap" parameterType="com.ly.education.teacher.api.dto.ExternalTeacherDto"> select <include refid="Base_Column_SELECT_List" />, dw.DWMC as PYDWMC, from T_SZGL_WPJSXX wpjs left join T_GGZY_DWXX dw on dw.DW_ID = wpjs.pydw <where> <if test="teacherId != null and teacherId != '' "> and wpjs.JGH like concat(concat('%',#{teacherId,jdbcType=VARCHAR}),'%') </if> <if test="teacherName != null and teacherName != ''

mybatis invalid comparison: java.sql.Timestamp and java.lang.String

跟風遠走 提交于 2020-10-29 09:32:49
mybatis报错:Cause: java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang 数据库中Time的格式是 `add_time` datetime DEFAULT NULL , java中Mybatis中的时间格式: <if test="addTime != null and addTime != '' "> and add_time &lt;= #{addTime,jdbcType=TIMESTAMP} </if> 分析错误原因: mybatis 3.3.0中对时间参数进行比较时:如果传入的时间参数与空字符串('')进行对比则会发生异常,在上面的sql中我有对比addTime!='' 这个就会引起异常.所以需要对其删除即可没有异常 修改后: <if test="addTime != null "> and add_time &lt;= #{addTime,jdbcType=TIMESTAMP} </if> 来源: oschina 链接: https://my.oschina.net/u/204117/blog/4546744

MyBatis】MyBatis一级缓存和二级缓存

时光毁灭记忆、已成空白 提交于 2020-10-29 04:33:13
MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存。一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。 也就是在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写到缓存中; 第二次以后是直接去缓存中取。 当执行SQL查询中间发生了增删改的操作,MyBatis会把SqlSession的缓存清空。 一级缓存的范围有SESSION和STATEMENT两种,默认是SESSION,如果不想使用一级缓存,可以把一级缓存的范围指定为STATEMENT,这样每次执行完一个Mapper中的语句后都会将一级缓存清除。 如果需要更改一级缓存的范围,可以在Mybatis的配置文件中,在下通过localCacheScope指定。 <setting name= "localCacheScope" value= "STATEMENT" /> 建议不需要修改 需要注意的是 当Mybatis整合Spring后,直接通过Spring注入Mapper的形式,如果不是在同一个事务中每个Mapper的每次查询操作都对应一个全新的SqlSession实例,这个时候就不会有一级缓存的命中,但是在同一个事务中时共用的是同一个SqlSession。 如有需要可以启用二级缓存。 二级缓存

mybatis环境配置与入门例子

余生长醉 提交于 2020-10-28 19:22:40
1、jar包的导入 mybatis需要jar包:mybatis-3.4.6.jar mysql驱动jar包:mysql-connector-java-5.1.34.-bin.jar 日志记录jar包:log4j-1.2.17.jar 2、创建数据库并创建表(mysql) 注意数据库表字段命名的规范 3、添加日志配置文件(log4j.properties) # Configure logging for testing: optionally with log file log4j.rootLogger=WARN, stdout # log4j.rootLogger=WARN, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=target/spring.log log4j

IDEAL+maven搭建mybatis例子

霸气de小男生 提交于 2020-10-28 17:47:11
IDEL+maven搭建mybatis例子 参考于: https://www.cnblogs.com/wvae/p/9607684.html 项目结构 pom.xml <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!-- mysql驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> <!-- junit测试包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> Employee.class package com.yjf.pojo; public class Employee { private Integer id;

Mybatis绑定XML错误:Invalid bound statement (not found)

大城市里の小女人 提交于 2020-10-28 15:25:15
在网上找了一圈方法后,仍然错误。 网上提供的资料参考: https://my.oschina.net/wangdaoliang/blog/652266 项目中主要不同是使用了多个数据源,最终将不同数据源的mapper interface和mapper.xml分开到不同目录后解决。 如原来mapper interface和xml的目录结构是 --package ----etl ------AMapper.java ------BMapper.java ----CMapper.java etl目录下的mapper是Y数据源,CMapper属于X数据源。然后配置两个包的扫描 <!-- 配置扫描Mapper接口的包路径 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.platform.package"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name=

三问Spring事务:解决什么问题?如何解决?存在什么问题?

我与影子孤独终老i 提交于 2020-10-28 15:17:21
1. 解决什么问题 让我们先从事务说起,“什么是事务?我们为什么需要事务?”。事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败。我们在开发中需要通过事务将一些操作组成一个单元,来保证程序逻辑上的正确性,例如全部插入成功,或者回滚,一条都不插入。作为程序员的我们,对于事务管理,所需要做的便是进行事务的界定,即通过类似begin transaction和end transaction的操作来界定事务的开始和结束。 下面是一个基本的JDBC事务管理代码: // 开启数据库连接 Connection con = openConnection(); try { // 关闭自动提交 con.setAutoCommit(false); // 业务处理 // ... // 提交事务 con.commit(); } catch (SQLException | MyException e) { // 捕获异常,回滚事务 try { con.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } } finally { // 关闭连接 try { con.setAutoCommit(true); con.close(); } catch (SQLException e) { e.printStackTrace(); }