MyBatis

ResultMap结果集映射

不羁的心 提交于 2020-08-04 14:39:29
目录 一 点睛 二 构造实体类和数据库不一致 三 解决方法 一 点睛 它是解决实体类属性名和数据库字段名不一致的问题。 二 构造实体类和数据库不一致 public class User { private int id; // 数据库字段是id private String name; // 数据库字段是name private String password; // 数据库字段是pwd } 测试出现问题 User{id=1, name='cakin', pwd='null'} 三 解决方法 1 起别名 <select id="getUser" resultType="com.cakin.pojo.User"> /*pwd起别名为password*/ select id,name,pwd as password from user where id = #{id} </select> 2 resultMap 结果集映射 id name pwd id name password 配置方法 <!--结果集映射--> <resultMap id="UserMap" type="com.cakin.pojo.User"> <!--column数据库的字段,property实体类中的属性--> <result column="pwd" property="password" /> <!-

java架构师成长路线-Mybatis研究手册(集合参数类型)

回眸只為那壹抹淺笑 提交于 2020-08-04 13:12:49
鲁班学院java架构师成长路线 oracle、mysql分别实现主键自增 怎么实现? 在mysql主键定义的后面加上auto_increment; Oracle: 1.建立一个表, 2.建立一个sequence序列 3.建立一个触发器 数据库优化 电商项目中设计某个商品表的过程之中,有四个字段商品id,商品价格price,商品数量count,商品金额total,为什么这样设计呢? 1.数据细分: 电商项目一般的话有三个主要业务:查询、下单、付款,其中下单的话只涉及商品id、商品的价格与商品的数量和商品的金额,然后将这四个属性单独创建一个表,可以降低查询和下单之间的影响,必要的时候,我们还可以把查询与下单拆分成两个独立的系统来操作。 2.数据安全: 商品的金额是计算好然后保存到数据库的,所以在使用时可以不用去界面获取了,这样还可以防止有人恶意篡改界面,然后导致的金额过低等问题 怎么优化数据库 使用索引 建立分区,分区索引 使用存储过程 (入门案例) MyBatis基本使用 (MyBatis基本使用) mysql中的锁 mysql中有三种锁: 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁

Spring cloud、seata分布式事务解决方案实践——AT模式

北城以北 提交于 2020-08-04 11:19:16
概述 本示例模拟服务器设备运维授权功能,使用 seata 来实现分布式事务一致性。 Seata官方文档地址: http://seata.io/zh-cn/docs/overview/what-is-seata.html Spring cloud参考文档: https://spring.io/projects/spring-cloud#learn 本示例源码仓库地址: https://github.com/bugbycode/spring_cloud_dev.git 工作准备 开发工具: Eclipse/Myeclipse/ IntelliJ IDEA 任选其一 · 运行环境: jdk1.8 及以上版本 · 数据库: MySQL 5.7 · 示例采用 框架: Spring boot 2.2.4 、 Spring cloud Hoxton.SR5 、 Spring security oauth2 、 Mybatis 、 Element ui 、 Seata 1.3.0 Seata服务部署 1 、下载最 1.3.0版本的Seata 服务, Seata 服务下载地址如下: https://github.com/seata/seata/releases 2 、解压后分别修改 seata 服务配置文件 registry.conf 和 file.conf ,修改后内容分别如下所示:

【DDD】领域驱动设计实践 —— 框架实现

邮差的信 提交于 2020-08-04 10:45:33
本文主要介绍了基于SpringMVC+mybatis对DDD思想的落地实现框架。本文为【DDD】系列文章中的其中一篇,其他内容可参考: 使用领域驱动设计思想实现业务系统 。 框架实现图 该框架实现基本和DDD的指导思想契合,主要分为四层,且将关注点放在了domain层。下面将逐层介绍各个组件的职责。 框架详述 User Interface层 门面层,对外以各种协议提供服务,该层需要明确定义支持的服务协议、契约等。包含: dto 包括request和response两部分,通过它定义入参和出参的契约,在dto层可以使用基础设施层的validation组件完成入参格式校验; controller 支持不同访问协议的控制器实现,比如:http/restful风格、tcp/二进制流协议、mq消息/json对象等等。 controller使用基础设施层公共组件完成许多通用的工作: 调用RequestMapping(SpringMVC公共组件)完成servlet路由; 调用checklogin完成登录态/权限校验; 调用logging组件完成日志记录; 调用message-resource组件完成错误信息转义,支持I18N; application层 service 应用服务层,组合domain层的领域对象和基础设施层的公共组件,根据业务需要包装出多变的服务,以适应多变的业务服务需求。

关于接口设计的一些反思

淺唱寂寞╮ 提交于 2020-08-04 09:11:01
许久没有产出了,今天看了掘金上的一篇关于接口设计的文章,因此有感谈谈自己在项目开发中与后的一些想法和反思。 参考: 一篇来自前端同学对后端接口的吐槽 以使用者的视角开发接口 对于RESTful风格的前后端分离式开发,接口的设计应该从何种视角出发呢?一般情况下,后端开发人员(我)的想法是: 想要实现这个功能,我需要返回哪些数据? 我要怎样划分不同的API? 当两个接口返回的数据有重复的部分时,我是否需要做一些复用? ... 在这种视角下,我开发出的接口虽然实现了项目的需求,但是却可能与其在前端的易用性产生割裂。 一个例子 在我之前独立开发的一个数据可视化系统中,存在着这样一个功能: 该项目的数据存在四种层级:team、group、branch、total,这四个层级的数据项都是一样的,现在需要提供接口分别返回这四个层级的数据。 实际开发中,数据库中存在着四张数据表,而我不想使用MyBatis的 ${} 以字符串拼接的形式来生成SQL,于是我写了四个逻辑几乎完全相同的Service类,最终反映到Controller上,就是每个层级的数据都有一个API去获取数据。当然,后端这里应该有更好的处理方式,不过暂且按下不表。当我终于大致完成后端的接口设计,转而开发前端时,才发现我接口设计的不合理之处。首先,前端要配置多个axios,其次,发送请求时,前端需要编写多余的代码去选择要调用哪个API

mybatis <id> <result> tag differences in <resultMap>

我怕爱的太早我们不能终老 提交于 2020-08-03 09:40:02
问题 I have done a lot of research and no avail. In Mybatis documentation, it says id – an ID result; flagging results as ID will help improve overall performance result – a normal result injected into a field or JavaBean property If they can both inject into a field, and id has performance improvement, so what stops me from only using id at all? Is this just semantic that I will map the primary key to id tag? I have tried: <resultMap id="teacherMap" type="me.funmap.model.Teacher" autoMapping=

mybatis <id> <result> tag differences in <resultMap>

泪湿孤枕 提交于 2020-08-03 09:38:09
问题 I have done a lot of research and no avail. In Mybatis documentation, it says id – an ID result; flagging results as ID will help improve overall performance result – a normal result injected into a field or JavaBean property If they can both inject into a field, and id has performance improvement, so what stops me from only using id at all? Is this just semantic that I will map the primary key to id tag? I have tried: <resultMap id="teacherMap" type="me.funmap.model.Teacher" autoMapping=

Java装饰模式

孤街醉人 提交于 2020-07-29 10:53:56
你在山上看风景,看风景的人在山上看你。明月装饰了你的窗子,你装饰了别人的梦。 装饰器模式(Decorator Pattern) ,别名又叫 包装者模式(wapper) ,允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装,不同于代理。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 介绍 意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。 主要解决: 一般我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。 何时使用: 在不想增加很多子类的情况下扩展类。 如何解决: 将具体功能职责划分,同时继承装饰者模式。 关键代码: 1、Component 类充当抽象角色,不应该具体实现。 2、修饰类引用和继承 Component 类,具体扩展类重写父类方法。 优点: 装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。 缺点: 多层装饰比较复杂。 使用场景: 1、扩展一个类的功能。 2、动态增加功能,动态撤销。 注意事项: 可代替继承。 结构图 ​ 参与者: Component:定义一个对象接口,可以给这些对象动态的添加职责

spring学习:多数据源深入解析,包括使用场景【云图智联】

守給你的承諾、 提交于 2020-07-29 10:51:47
1 多数据源的典型使用场景 在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况。以下是两种典型场景: 1 业务复杂 数据分布在不同的数据库中,笔者见过一个相对比较复杂的业务,一个业务中同时操作了9个库。 ​ 2 读写分离 一些规模较小的公司,没有专门的中间件团队搭建读写分离基础设施,因此需要业务开发人员自行实现读写分离。 ​这里的架构与上图类似。不同的是,在读写分离中,主库和从库的数据库是一致的(不考虑主从延迟)。数据更新操作(insert、update、delete)都是在主库上进行,主库将数据变更信息同步给从库。在查询时,可以在从库上进行,从而分担主库的压力。 2 如何实现多数据源 对于大多数的java应用,都使用了spring框架,spring-jdbc模块提供了AbstractRoutingDataSource,其内部可以包含了多个DataSource,然后在运行时来动态的访问哪个数据库。这种方式访问数据库的架构图如下所示: ​应用直接操作的是AbstractRoutingDataSource的实现类,告诉AbstractRoutingDataSource访问哪个数据库,然后由AbstractRoutingDataSource从事先配置好的数据源(ds1、ds2)选择一个,来访问对应的数据库。

mybatis之if判断d

拟墨画扇 提交于 2020-07-29 10:49:22
因项目中比较多状态字段,用了大量的Integer 0和1进行判断 在功能做完后只是粗略的点了下觉得没多大问题(来自程序员强大的自信), 便提交了代码,很不巧的是刚好领导在做功能测试,发现了功能缺陷,主角来了: 在做牧户查询时所有的0判断均无效,而1有效。(java项目www.1b23.com)查阅资料得知在if语句做如下判断时intger类型0也视为false <if test="status != null and status !=''">and status = #{status}</if> 解决方案有二: 1、<if test="status != null ">and status = #{status}</if> 直接判断!=null即可,只有字符串才需要判断!=""。 2、或者这样写 <if test="status != null and status !='' or status==0 ">and status = #{status}</if> 来源: oschina 链接: https://my.oschina.net/fhadmin/blog/4449363