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

原创
2017/08/11 14:58
阅读数 3.7K

         前几章把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。谢谢大家的阅读。

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

展开阅读全文
加载中
点击加入讨论🔥(11) 发布并加入讨论🔥
打赏
11 评论
82 收藏
11
分享
返回顶部
顶部