MyBatis

第8章 MyBatis Generator

徘徊边缘 提交于 2020-08-14 06:30:07
MBG简介 MyBatis Generator 简称 MBG。 是一个专门为MyBatis框架使用者定制的 代码生成器 。 可以快速的根据表生成对应的映射文件、接口、JavaBean。 支持基本的 CRUD 操作以及QBC风格的 条件查询 。 但表连接、存储过程等复杂sql仍需要开发人员手工编写。 官方文档地址: http://www.mybatis.org/generator/ 官方工程地址: https://github.com/mybatis/generator/releases MBG使用 步骤: 编写MBG的配置文件。 1. jdbcConnection 配置数据库连接信息。 2. javaModelGenerator 配置JavaBean的生成策略。 3. sqlMapGenerator 配置sql映射文件生成策略。 4. javaClientGenerator 配置Mapper接口的生成策略。 5. table 配置要逆向解析的数据表。 tableName:表名 domainObjectName:对应的JavaBean名 运行代码生成器生成代码。 Context标签 targetRuntime="MyBatis3" 可生成 带条件的 CRUD。(推荐) targetRuntime="MyBatis3Simple" 可生成 基本的 CRUD。 == 若想再次生成

Spring MVC 和 Spring 总结

倖福魔咒の 提交于 2020-08-14 04:16:54
1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。 2). AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,如性能监测、事务管理、日志记录等。 3). 声明式事务的支持 4). 方便集成各种优秀框架 5). 降低Java EE API的使用难度 如对JDBC,JavaMail,远程调用等提供了简便封装 2. 什么是IoC,为什使用IoC ? IoC全称Iversion of Controller,控制反转。 这概念是说你不用创建对象,而只需要描述它如何被创建。 你不在代码里直接组装你的组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。 它能指导我们如何设计出松耦合、更优良的程序。 3. 什么是AOP,为什么使用AOP ? AOP全称:Aspect-Oriented Programming,面向切面编程。 AOP,面向切面编程,就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中,比如 事务管理 、 权限控制 、 日志记录 、性能统计等。 AOP并没有帮助我们解决任何新的问题,它只是提供了一种更好的办法,能够用更少的工作量来解决现有的一些问题

SpringBoot+mybatis+mysql 多数据源配置及事务管理

邮差的信 提交于 2020-08-14 01:46:06
多数据源配置 创建一个Spring配置类,定义两个DataSource用来读取application.properties中的不同配置。 配置文件 application.properties mybatis . config - locations = classpath : mybatis / mybatis - config . xml #datasource spring . devtools . remote . restart . enabled = false #data source1 spring . datasource . test1 . driverClassName = com . mysql . jdbc . Driver spring . datasource . test1 . url = jdbc : mysql : / / 127.0 .0 .1 : 3306 / test_msg1 spring . datasource . test1 . username = root spring . datasource . test1 . password = root #data source2 spring . datasource . test2 . driverClassName = com . mysql . jdbc . Driver

MyBatis必知知识点:trim标签的使用

耗尽温柔 提交于 2020-08-14 01:14:11
作者:wt_better 链接: http://blog.csdn.net/wt_better/article/details/80992014 MyBatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。 以下是trim标签中涉及到的属性: 下面使用几个例子来说明trim标签的使用。 1、使用trim标签去除多余的and关键字 有这样的一个例子: <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE <if test="state != null"> state = #{state} </if> <if test="title != null"> AND title like #{title} </if> <if test="author != null and author.name != null"> AND author_name like #{author.name} </if> </select> 如果这些条件没有一个能匹配上会发生什么?最终这条 SQL 会变成这样: SELECT * FROM BLOG

Springboot使用Nacos做配置中心)

南笙酒味 提交于 2020-08-13 23:11:12
Springboot使用Nacos做配置中心 环境 项目配置 高级使用 配置dev,prod,test环境 微服务之间互相隔离配置 每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod 环境 jdk: 1.8 maven: 3.6.3 Idea 项目配置 新建一个Springboot项目,用Idea自动创建就可以,下面开始使用。 引入SpringcloudAlibaba依赖 < dependencyManagement > < dependencies > < dependency > < groupId > com . alibaba . cloud < / groupId > < artifactId > spring - cloud - alibaba - dependencies < / artifactId > < version > 2.2 .0 . RELEASE < / version > < type > pom < / type > < scope > import < / scope > < / dependency > < / dependencies > < / dependencyManagement > 然后再引入config依赖 < dependency > < groupId > com . alibaba . cloud

阿里为什么弃用hibernate ?看完Mybatis技术原理实战我终于明白

有些话、适合烂在心里 提交于 2020-08-13 18:40:42
推荐观看: 阿里P8架构师谈:工作1-5年的Java工程师,怎样提高核心竞争力 阿里架构师直言:“没有实战都是纸上谈兵”!Redis实战PDF分享 奋发图强半年多,终于四面阿里如愿拿到心仪offer定级P7 hibernate和mybatis是当前流行的ORM框架。hibernate对数据库结构提供了较为完整的封装。mybatis主要着力点在于java对象与SQL之间的映射关系。 MyBatis和hibernate孰优孰劣?一直都饱受争议,这不,前几天群里关于这个话题,又吵起来了。 众多过来人总结出来的经验就是:hibernate确实厉害,但MyBatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。可以进行更为细致的SQL优化,可以减少查询字段。 为什么阿里巴巴的持久层抛弃hibernate,采用MyBatis框架? 之前和阿里的一个面试官交流中,他讲到对于性能要求高,需求变化多的互联网项目来说,sql直接优化上,mybatis要比hibernate方便很多,用在sql优化上的开发时间太长,阿里巴巴的持久层抛弃Hibernate,采用了MyBatis框架。 于是趁热打铁,研究了一下MyBatis。MyBatis框架的核心功能其实并不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展

Java面试常被问到这道题:如何保证缓存与数据库的双写一致性?

坚强是说给别人听的谎言 提交于 2020-08-13 18:30:18
面试原题:如何保证缓存与数据库的双写一致性? 面试官心理分析 你只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题, 那么你如何解决一致性问题? 面试题剖析 一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统 不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即: 读请求和写请求串行化 ,串到一个 内存队列 里去。 串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常情况下多几倍的机器去支撑线上的一个请求。 Cache Aside Pattern 最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。 更新的时候, 先更新数据库,然后再删除缓存 。 为什么是删除缓存,而不是更新缓存? 原因很简单,很多时候,在复杂点的缓存场景,缓存不单单是数据库中直接取出来的值。 比如可能更新了某个表的一个字段,然后其对应的缓存,是需要查询另外两个表的数据并进行运算,才能计算出缓存最新的值的。 另外更新缓存的代价有时候是很高的。 是不是说,每次修改数据库的时候,都一定要将其对应的缓存更新一份?也许有的场景是这样,但是对于 比较复杂的缓存数据计算的场景 ,就不是这样了。

JAVA通关学习路线

僤鯓⒐⒋嵵緔 提交于 2020-08-13 18:16:39
想学习JAVA的童鞋们,推荐以下学习路线,一共十八步,每一步一脚印,技术搞起来。 阶段1 1) 学习HTML 2)学习CSS 3)Javascript 4)jquery 5)xml解析 6)Bootstrap 阶段2 7)JAVAse基础 8)mysql数据库 9)Powerdesigner 10)JDBC 11)JAVAWEB 阶段3 12)oracle 13)struts2 14)Hibernate 15)Spring 阶段4 16)Maven 17)SpringMVC 18)MyBatis 来源: oschina 链接: https://my.oschina.net/u/4415966/blog/4479719

Mybatis 中的数据库连接池

左心房为你撑大大i 提交于 2020-08-13 17:55:44
Mybatis 中的数据库连接池 Mybatis中数据源相关的类 数据工厂类 数据源类 从这里可以看出,mybatis将我们配置的数据源的信息都存放在 UnpooledDataSource 中,将连接池的配置属性全都存放在 PooledDataSource 中,如果使用了连接池类型的数据源,那么通过 UnpooledDataSource 数据源获取一个链接,然后将其放入由 PooledDataSource 中的 PoolState 里。利用组合复用了代码。 JdbcTransaction 在 JdbcTransaction 中 持有 DataSource 引用和 Connection 引用 后续在方便处理在同一个事务中的sql。 在Mybatis中 connection的创建过程 来源: oschina 链接: https://my.oschina.net/u/4089687/blog/4442447

注意闪避!15年IT老兵亲身经历的N个线上故障

寵の児 提交于 2020-08-13 17:06:08
​作者介绍 二马读书 , 曾任职于阿里巴巴,每日优鲜等互联网公司,任技术总监,15年电商互联网经历。 很多人在面试时,会被问到这样的问题:遇到过什么系统故障?怎么解决的?下面是笔者根据自己15年互联网研发经历总结的多个线上故障真实案例。 本文图不多,但内容很干!理解为主,学以致用! 故障一:JVM频繁FULL GC快速排查 在分享此案例前,先聊聊哪些场景会导致频繁Full GC: 内存泄漏(代码有问题,对象引用没及时释放,导致对象不能及时回收)。 死循环。 大对象。 尤其是大对象,80%以上的情况就是他。 那么大对象从哪里来的呢? 数据库(包括MySQL和MongoDB等NoSQL数据库),结果集太大。 第三方接口传输的大对象。 消息队列,消息太大。 根据多年一线互联网经验,绝大部分情况是数据库大结果集导致。 好,现在我们开始介绍这次线上故障: 在没有任何发布的情况下,POP服务( 接入 第三方商家的服务)突然开始疯狂Full GC,观察堆内存监控没内存泄漏,回滚到前一版本,问题仍然存在,尴尬了!!! 按照常规做法,一般先用jmap导出堆内存快照(jmap -dump:format=b,file=文件名 [pid]),然后用mat等工具分析出什么对象占用了大量空间,再查看相关引用找到问题代码。这种方式定位问题周期会比较长,如果是关键服务,长时间不能定位解决问题,影响太大。