MyBatis

springboot整合mybatis

不羁岁月 提交于 2020-03-06 17:29:58
本文主要介绍mybatis与springboot的整合。关于整合druid数据源连接池的详细配置请参考上篇博文,这里不再赘述 1、导入maven依赖 <!--引入jdbc--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--引入mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> 2、配置application.yml文件 mybatis: # 开启驼峰命名 configuration: map-underscore-to-camel-case: true # 配置mapper文件路径 mapper-locations:

Mybatis获取插入记录的自增长ID

◇◆丶佛笑我妖孽 提交于 2020-03-06 16:39:18
使用Mybatis插入数据时,返修所插入数据的id。 在Mybatis mapper.xml文件中,在插入方法的头部添加 属性“useGeneratedKeys”和“keyProperty”,其中 keyProperty是Java对象的属性名,而不是表格的字段名 。 <insert id="insert" parameterType="com.sale" useGeneratedKeys="true" keyProperty="id"> insert into sale(name) values(#{name}) </insert> Mybatis执行完插入语句后,自动将自增长值赋值给对象sale的属性id。因此,可通过sale对应的getter方法获取. int count = saleService.insert(sale); int id = sale.getId(); //获取到的即为新插入记录的ID 【注意事项】 1.Mybatis Mapper 文件中,“useGeneratedKeys”和“keyProperty”必须添加,而且keyProperty一定得和java对象的属性名称一直,而不是表格的字段名 2.java Dao中的Insert方法,传递的参数必须为java对象,也就是Bean,而不能是某个参数。 来源: oschina 链接: https://my

2020Intellij IDEA 实用插件推荐必看!

安稳与你 提交于 2020-03-06 16:04:19
1. 前言 2020 年 JVM 生态报告 可以看出 Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。 IDEA 的优良设计保证了编程的生产力,也是我情愿为之付费的软件之一。今天把我自己经常用的一些插件拿出来分享一波。 2. IDEA 插件 分享之前我们来看看其插件体系。 Intellij IDEA 大部分功能是通过插件集成进来的。默认情况下已经集成了很多插件。你可以通过 Preferences 查看: Intellij IDEA 为人诟病的是性能问题,我们可以禁用一些我们不用的自带插件减轻负担。接下来我把我必备插件分享出来。 3. 常用插件 你可以在上图 Plugins 选项卡 的搜索中输入插件的关键字来搜索到它们。 3.1 Key promoter X 很多人不愿意切换 IDE 就是因为快捷键的习惯问题。刚好这个插件可以提醒快捷键,有代入感,提醒的多了你就会了。对于新手建议安装熟悉一下快捷键。 3.2 Maven Helper 旗舰版也就是收费版自带有 Maven 模块,但是如果你是免费的社区版这个是唯一的替代选择,让你拥有依赖分析和依赖冲突快速解决的能力。 3.3 IDEA Mind Map 思维导图对于我们需求分析和知识库关系梳理十分重要。有了这个插件以后 IDEA 也可以画思维导图了。而且功能还十分强大

mybatis mapper.xml 文件中的 foreach 来构建sql语句

元气小坏坏 提交于 2020-03-06 13:28:18
在Hibernate与JPA中,如果操作多条数据会有相应的方法来直接调用比较简单(只在这一方面),Mybatis 是半自动化框架,避开一些问题的同时,也需要自己写的东西较多了。不扯淡 在Mybatis 中如果想要操作多条语句,并不需要在业务层循环遍历操作。这样比较麻烦。有foreach标签来进行遍历你上传的参数的问题,达到你要创建的sql语句的最终情况。 foreach用来迭代传过来的参数 属性 描述 collection 必选。表示传过来的参数的数据类型。要做foreach的对象,作为入参时有三种选择:(注意大小写,非不严谨) 1.List:List 对象由list 代替作为键 2.数组对象:数组对象由array代替作为键 3.Map:Map对象没有默认的键。当然在作为入参时,可以使用@Param("keyName")来设置键。设置keyName后,list与array将会失效。除了这种入参方式外,还有作为参数对象的某个字段的时候。 举个例子: 如果User 有属性List ids。入参时User对象,那么这个 collection = “ids” 。 如果User 有属性 Ids ids。其中Ids 是个对象,Ids 有个属性List id;入参是User 对象,那么collection = “ids.id” 🖤:如果传入的是单参数 且参数类型是一个List 的时候

springboot web项目中配置Mybatis

…衆ロ難τιáo~ 提交于 2020-03-06 11:11:57
只是先创建了一个带web功能的springboot项目(创建步骤省略。。。) 没有任何WEB代码,只是在主配置类中打印ok。run时发现:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could 解决2中问题的方法是:在application.properties中添加数据源相关的配置即可正常打印OK了(当然,如果不按4中操作,可以在主配置类上添加 @SpringBootApplication (exclude= {DataSourceAutoConfiguration.class}) )这一句也可以正常打印OK: #数据库相关配置 spring.datasource.driver-class-name = com .mysql.cj.jdbc. Driver spring.datasource.url = jdbc:mysql://localhost:3306/nfautotestallin1 spring.datasource.username = root spring.datasource.password = 123abc spring.datasource.max-idle = 10 spring.datasource.max

Mybatis-简介及入门

谁都会走 提交于 2020-03-06 09:07:58
Mybatis Mybatis简介 官方解释: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 360百科: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 Mybatis的特点: 简单易学 :本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。 灵活 :mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。 解除sql与程序代码的耦合 :通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。 提供映射标签

Spring Transaction + MyBatis SqlSession事务管理机制研究学习

这一生的挚爱 提交于 2020-03-06 08:57:04
线上的系统中,使用的是Spring+Mybatis+Mysql搭建的框架,由于客户需要,最近一直在对性能提升部分进行考虑,主要是涉及Mysql的一些重要参数的配置学习,以及Spring事务管理机制的学习,因为通过观察服务器日志,发现在这两部分的时候耗时比较严重,特别是进行mysql事务提交的时候,项目源码中使用了Spring的声明式事务,即通过@Transactional注解来控制事务的开启与提交,这两天看了一些关于Spring Transaction事务的一些文章,也debug了源码,总算有点心得和疑问,这里简单的整理一下。 在Spring的配置文件中,我们使用了"org.springframework.jdbc.datasource.DataSourceTransactionManager"对事务进行管理,翻开 DataSourceTransactionManager的源码,我们看到 DataSourceTransactionManager继承了AbstractPlatformTransactionManager(抽象的事务管理器), DataSourceTransactionManager 重写了其中的一些方法,具体每个方法的作用,限于篇幅 ,本文不再赘述 ,这里 《Spring技术内幕》学习笔记16——Spring具体事务处理器的实现 有详细的介绍。 在现有的项目中

MyBatis: Errors when upgrading to 3.2.7 from 3.0.3

旧时模样 提交于 2020-03-06 07:00:12
问题 After upgrading from MyBatis 3.0.3 to 3.2.7 (and from mybatis-spring 1.0.0-RC3 to 1.2.2) I'm getting this exception in many (if not all) of my JUnit tests when they load a Spring Context java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.foo.FooDao.java (full stack trace below) This a a massive project with a ton of mapper XML files and a ton of Spring contexts. Here is

MyBatis: Errors when upgrading to 3.2.7 from 3.0.3

点点圈 提交于 2020-03-06 07:00:09
问题 After upgrading from MyBatis 3.0.3 to 3.2.7 (and from mybatis-spring 1.0.0-RC3 to 1.2.2) I'm getting this exception in many (if not all) of my JUnit tests when they load a Spring Context java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.foo.FooDao.java (full stack trace below) This a a massive project with a ton of mapper XML files and a ton of Spring contexts. Here is

Mybatis:一级缓存和二级缓存

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-06 01:46:46
缓存Cache 概述 存在于内存中的临时数据 作用 减少和数据库的交互次数,提高执行效率 适用场景 经常查询并且不经常改变的;数据的正确与否对最终结果影响不大的。(数据的有效性和实时性) 不适用 经常改变的数据;数据的正确与否对最终结果影响很大的 一级缓存 Mybatis 使用到了两种缓存:本地缓存(local cache)和二级缓存(second level cache),但是在没有配置的默认情况下,它只开启一级缓存。每当一个新 session 被创建,MyBatis 就会创建一个与之相关联的本地缓存。任何在 session 执行过的查询语句本身都会被保存在本地缓存中,那么,相同的查询语句和相同的参数所产生的更改就不会二度影响数据库了。本地缓存会被增删改、提交事务、关闭事务以及关闭 session 所清空。 一级缓存:指的是Mybatis中 SqlSession 对象的缓存 作用域:SqlSession范围,当在同一个sqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率。 不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。 如何会重新提交数据?: 关闭SqlSession对象close() ;如果SqlSession调用了close