文档章节

微服务开发的入门级框架Spring Boot详解(四)

二十岁以后
 二十岁以后
发布于 2017/08/11 14:58
字数 1828
阅读 1607
收藏 84
点赞 11
评论 11

         前几章把Spring Boot大概都介绍了个遍,如果各位朋友有什么疑问和指教欢迎在评论指出。下面我将介绍如何使用Spring Boot进行企业级开发。大概会从以下几点开始介绍。

  • 如何使用Spring Boot进行企业开发
  • Spring Boot与Spring Cloud(Spring Cloud会单独写一系列,包括PaaS云环境如何使用)
  • Spring Boot集成Mybatis(这里会重点说,包括事物,用注解写SQL及动态SQL等等)

1、使用Spring Boot进行企业开发

        刚开始接触微服务的开发我基本是一脸懵逼的状态,因为以前是做传统电商项目的开发,还好我的经理是个大牛(Pivotal原厂出来的),他对于微服务的开发以及PaaS云可以说是理解到骨子里了,感谢我的经理给了我很多的建议和思路。首先微服务的开发最先思考的应该是模型的设计,从数据库模型开始,因为微服务架构就是要高内聚低耦合,一个功能挂了,我应用其他模块照样跑。数据库模型很重要,可以说一个数据库的设计表结构就代表了你要实现的功能部分。写微服务就像是在搭积木,你的积木颜色可能不同,但最终却能完美的搭在一起,即使抽掉几块也不会倒。

       当数据库建立好后,我又在思考,传统架构一般都是Controller接收数据,返回视图,Service把Controller接收的数据按业务需求做处理,然后DAO做数据的持久化。那么微服务也是这么来写吗?

       其实流程差不太多。DAO不需要在写impl类实现接口了,而是直接在接口上使用注解,Service直接使用接口内的方法。(欢迎补充,相互学习!因为我做的第一个微服务项目从前端到后台到数据库设计都由我一人完成的,这个问题我也问过我经理,我的经理说微服务开发的流程就是没有流程!我觉得意思就是全靠自己想吧........)

2、Spring Boot与Spring Cloud

        这里不得不提一嘴Spring Cloud,关于这个框架后面也会专门来说。

        如果说Spring Boot是员工。那么Spring Cloud就是老板。所有功能写好之后,Spring Cloud就像是个管理者,每个员工(服务)会的技能都必须向老板汇报,当一个员工想向另一个员工求助时,也得向老板汇报,老板给你调度。当然,Spring Cloud的功能不仅仅于此,关于这块的东西,我会单独写一系列的博客,包括微服务应用在云上环境去跑时如何去使用。

3、Spring Boot集成Mybatis

        接下来进入正题,Spring Boot是不推荐再去使用XML去做框架配置(化繁为简),刚开始的时候我算是愁坏了,因为之前做项目,都是从XML中配置视图解析器啊,AOP,事物管理,包括各种动态SQL。那么如何使用注解进行这些配置呢?下面进行详解。

        3.1、 引入Spring Boot与Mybatis依赖包

            因为Spring Boot毕竟出身名门,所以很多厂商都提供了与Spring Boot集成的包。Mybatis同样也提供了mybatis-spring-boot-starter 目前 1.3.x 是最新版本。如果你的业务不需要十分繁琐的SQL语句,那么我推荐使用JPA的方式来操作数据库会更加敏捷。

 Maven方式引入:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1-SNAPSHOT</version>
</dependency>

Gradle方式引入:

dependencies {
    compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1-SNAPSHOT")
}

        3.2、  从属性文件中配置数据源

            配置数据源我使用的是properties配置,代码如下:前四个是必配的,含义应该就不用解释了吧,大家都懂。之后的可选配置不全,如果需要全的可以去看官方文档。

spring.datasource.url = jdbc:mysql://localhost:3306/spring-boot?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver

#可选配置
# 初始化大小,最小,最大
spring.datasource.initialSize=10
spring.datasource.minIdle=10
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=80000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=80000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=500000
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
spring.datasource.useGlobalDataSourceStat=true
#指定连接的事务的默认隔离级别.
spring.datasource.default-transaction-isolation
#指定driver的类名,默认从jdbc url中自动探测.
spring.datasource.driver-class-name
#是否采用FIFO返回连接.
spring.datasource.fair-queue
#使用Hikari connection pool时,在心跳检查时传递的属性
spring.datasource.health-check-properties.[key]
#指定连接多久没被使用时,被设置为空闲,默认为10ms
spring.datasource.idle-timeout
#当初始化连接池时,是否忽略异常.
spring.datasource.ignore-exception-on-pre-load

         3.3、  使用注解方式写SQL语句

            以上步骤做完,就可以写SQL语句了。

            最简单的四个注解。分别对应查找,更新,删除,插入的SQL语句。

例子:

@Select("select * from admin")
@Update("update admin a set a.userName='二十岁以后'")
@Delete("delete from admin  where userName='二十岁以后'")
@Insert("insert into admin (UserName,PassWord) values('二十岁以后','123')")

            参数的引用@Param

例子: 将注解括号内的参数进行引用 ,SQL语句中使用#{} 或 ${} 的方式都可以 ,使用#时变量是占位符,可以防止sql注入。而$使用时,变量就是直接追加在sql中,一般会有sql注入问题。 还有就是通过#方式获取变量时,可能会出现与数据库的字段的类型不匹配错误 ,比如时间类型可以使用$。

@Select("select * from admin where User_Name=#{UserName} ")
public Admin selectUser(@param("UserName")  String UM);

            不使用@Param注解的情况,那么参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。 例子如下:

// 这里id是Admin的属性
@Select("SELECT * from admin where id = ${id}")
public Admin selectAdminById(Admin admin);

            结果映射列表: @Results、 @Result

例子: @Results是结果映射列表,@Result中property是Admin类的属性名,colomn是数据库表的字段名 。将数据库结果集和我JAVA中POJO类的字段做绑定。(我记得Mybatis好像是有个功能,比如数据库字段名为User_Name,POJO的字段名为UserName。符合这种规则的会自动绑定,无需手动。可以用mybatis-generator工具来生成POJO类)

@Results({
		  @Result(property="Id",column="UserId"),
		  @Result(property="UserName",column="UserName")
	  })
	  @Select("select UserId, UserName from admin  where  a.RealName=#{RM}")
	  public Admin selectAdminByRM(@Param("RM") String RM);

             声明Mapper接口 @Mapper

例子: @Mapper将UserDao声明为一个Mapper接口。

package cn.yy.dao;

@Mapper
public interface UserDao {

	@Results({
		  @Result(property="Id",column="UserId"),
		  @Result(property="UserName",column="UserName")
	  })
	  @Select("select UserId, UserName from admin  where  a.RealName=#{RM}")
	  public Admin selectAdminByRM(@Param("RM") String RM);
}

            到此SpringBoot集成Mybatis的初级介绍就到此为止,下一章我将介绍如何使用注解写动态SQL。谢谢大家的阅读。

            您的收藏和关注,是我最大的动力!感谢!

© 著作权归作者所有

共有 人打赏支持
二十岁以后
粉丝 227
博文 25
码字总数 23016
作品 0
海淀
架构师
加载中

评论(11)

t
tomrichdow
Java微服务实践—Spring Boot系列
网盘地址:https://pan.baidu.com/s/1CiLxLKQ03ej94lKsiJVpGQ 密码: 4dxz
二十岁以后
二十岁以后

引用来自“SAnSAni”的评论

请问a.RealName的a.是调用什么的呢?
表的别名,我忘记打了,抱歉
SAnSAni
SAnSAni
请问a.RealName的a.是调用什么的呢?
哈哈1113323
写的太好了
sifu973
sifu973
可以使用mybatis generator 生成工具生成代码,无需写sql语句,而且生成的代码,接口和sql语句分离
猪哥哥0815
猪哥哥0815

引用来自“二十岁以后”的评论

引用来自“猪哥哥0815”的评论

引用来自“二十岁以后”的评论

引用来自“猪哥哥0815”的评论

增删改查那四条sql在哪里写的呢
看最后一段代码,是完整的SQL语句书写。

回复@二十岁以后 : 意思就是前面的实在解释语法,其实最终写的都在mapper接口里面,我这么理解对吗
可以这么理解

回复@二十岁以后 : 好的,非常感谢,写的真的很好
二十岁以后
二十岁以后

引用来自“猪哥哥0815”的评论

引用来自“二十岁以后”的评论

引用来自“猪哥哥0815”的评论

增删改查那四条sql在哪里写的呢
看最后一段代码,是完整的SQL语句书写。

回复@二十岁以后 : 意思就是前面的实在解释语法,其实最终写的都在mapper接口里面,我这么理解对吗
可以这么理解
猪哥哥0815
猪哥哥0815

引用来自“二十岁以后”的评论

引用来自“猪哥哥0815”的评论

增删改查那四条sql在哪里写的呢
看最后一段代码,是完整的SQL语句书写。

回复@二十岁以后 : 意思就是前面的实在解释语法,其实最终写的都在mapper接口里面,我这么理解对吗
二十岁以后
二十岁以后

引用来自“猪哥哥0815”的评论

增删改查那四条sql在哪里写的呢
看最后一段代码,是完整的SQL语句书写。
猪哥哥0815
猪哥哥0815
增删改查那四条sql在哪里写的呢
学习 Spring Boot 知识看这一篇就够了

从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区、我的博客和我的公号内。粗略的统计了一下总共的文章加起来大概有六十多篇了,其中一部分...

ityouknow
05/28
0
0
10分钟入门SpringBoot

SpringBoot是基于spring框架衍生的一种新的微服务框架,如果对Spring有一定了解的同学肯定知道在Spring中需要配置各种xml文件完成bean的注册操作,随着服务越来越多,配置就变得越来越复杂,...

jwfy
06/14
0
0
用IDEA搭建springboot+thymleaf+mybatis(附分页方法)

参考thymleaf官方网址: 现在主流的微服务springboot配合H5开发效率极快。也符合现在前后端分离的开发方式。 thymleaf作为页面模板框架,可以更好的处理Controller和html的关系。 具体搭建过程...

HaleyLiu
05/17
0
0
【微服务】使用spring cloud搭建微服务框架,整理学习资料

写在前面   使用spring cloud搭建微服务框架,是我最近最主要的工作之一,一开始我使用bubbo加zookeeper制作了一个基于dubbo的微服务框架,然后被架构师否了,架构师曰:此物过时。随即,我...

grootzhang
06/27
0
0
springcloud微服务理解

大家好这是我的一个简单理解,学习过程中有许多不明白的地方特此请教大家 我的项目大概情况: 生产者是一个springboot项目,有controller、service、entity、dao等完整的项目,添加注解后 @E...

樱木花道VS康
06/06
0
0
SpringBoot笔记(五)模板引擎thymeleaf和freemarker

SpringBoot本来不应该关注这块,但是既然都学了,就看看吧 SpringBoot属于前后端分离的微服务框架,默认的模板引擎是thymeleaf,虽然也能支持JSP,但是比较麻烦,另外freemarker也是SpringB...

世外大帝
04/25
0
0
springboot 开发入门,及问题汇总

1 . springboot简单介绍(http://projects.spring.io/spring-boot/) 现在的web项目几乎都会用到spring框架,而要使用spring难免需要配置大量的xml配置文件,而springboot的出现解 决了这一问...

崔江昆
2015/03/18
0
30
SpringBoot学习之基础篇

在前面的博文中,已经演示过springboot与Mybatis集成的实例,本篇再来探讨一下SpringBoot的基础。 一。关于SpringBoot   SpringBoot可以基于Spring轻松创建可以“运行”的、独立的、生产级...

java~nick
2017/10/31
0
0
微服务构建: Spring Boot

在展开 Spring Cloud 的微服务架构部署之前, 我们先了解一下用于构建微服务的基础框架-Spring Boot。 由于 Spring Cloud 的构建基于 Spring Boot 实现, 在后续的示例中我 们将大量使用 Sp...

wenhy
06/20
0
0
用IDEA搭建springboot+thymleaf+mybatis+pageHelper搭建框架

参考thymleaf官方网址: 现在主流的微服务springboot配合H5开发效率极快。也符合现在前后端分离的开发方式。 thymleaf作为页面模板框架,可以更好的处理Controller和html的关系。 具体搭建过程...

HaleyLiu
05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
3
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部