SpringBoot入门学习以及整合MyBatis

SpringBoot入门学习以及整合MyBatis

1.   Spring Boot简介

     Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 

     SpringBoot是伴随着Spring4.0诞生的;

  从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架;

    SpringBoot帮助开发者快速启动一个Web容器;

    SpringBoot继承了原有Spring框架的优秀基因;

    SpringBoot简化了使用Spring的过程。

    Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的Spring应用。Spring BootSpring平台及第三方库提供开箱即用的设置(提供默认设置),这样我们就可以简单的开始。多数Spring Boot应用只需要很少的Spring配置。

我们可以使用SpringBoot创建java应用,并使用java jar 启动它,或者采用传统的war部署方式。

 

Spring Boot 主要目标是:

l  为所有 Spring 的开发提供一个从根本上更快的入门体验

l  开箱即用,但通过自己设置参数,即可快速摆脱这种方式。

l  提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等

l  绝对没有代码生成,也无需 XML 配置。

 

2.   Spring Boot 入门

2.1创建工程

    SPRING INITIALIZRspring boot在构建项目时候非常有效, 虽然说Maven以及Spring boot提供的starter使用起来非常简单, 但是由于组件和关联部分众多,有这样一个可视化的配置构建管理工具仍然很不错. 下面我们将会在IntelliJ IDEA中利用SPRING INITIALIZR来创建一个例子程序。

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/09/5939ff9f00b79.png

  勾选web(为什么要勾选web,后面会有解释)

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/09/5939ffd0b5e10.png

项目构建完成之后,等待相关jar包的下载,之后pom.xml文件如下:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot </groupId>
<artifactId>spring-boot-starter-parent </artifactId>
<version>1.5.3.RELEASE </version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
  &lt;properties></br>
    &lt;project.build.sourceEncoding>UTF-8&lt;/project.build.sourceEncoding></br>
    &lt;project.reporting.outputEncoding>UTF-8&lt;/project.reporting.outputEncoding></br>
    &lt;java.version>1.7&lt;/java.version></br>
  &lt;/properties></br>
&lt;dependencies></br>  
    &lt;dependency></br>
        &lt;groupId>org.springframework.boot&lt;/groupId></br>
        &lt;artifactId>spring-boot-starter-web&lt;/artifactId></br>
  &lt;/dependency></br>
  &lt;dependency></br>  
        &lt;groupId>org.springframework.boot&lt;/groupId></br>
        &lt;artifactId>spring-boot-starter-test&lt;/artifactId></br>
        &lt;scope>test&lt;/scope></br>
  &lt;/dependency></br>
&lt;/dependencies></br>
&lt;build></br>  
   &lt;plugins></br>  
      &lt;plugin></br>  
         &lt;groupId>org.springframework.boot&lt;/groupId></br>
         &lt;artifactId>spring-boot-maven-plugin&lt;/artifactId></br>
      &lt;/plugin></br>
   &lt;/plugins></br>
&lt;/build></br>

</projec>


此刻我们可以看见,dependency中我们加入的web部分,也就是我们之前勾选的web。

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/09/593a003cc0b3a.png

我们会惊奇地发现,我们的工程自动添加了好多好多jar 包,而这些jar 包正式我们做开发时需要导入的jar 包。

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/09/593a004a609a5.png

因为这些jar 包被我们刚才加入的spring-boot-starter-webspring-boot-starter-test所引用了,所以添加spring-boot-starter-web,spring-boot-starter-test后会自动把依赖传递过来。

 

2.2变更JDK版本

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/09/593a0063e1e14.png

<java.version>XXX</java.version>这里可以进行更改。

注意:

虽然JDK1.6或者1.7都可以使用Spring-Boot,但Spring-Boot官方建议使用JDK1.8。要使用JDK1.8,首先必须要配置JDK1.8后,才可以使用上述方法设置。

 

 2.3 引导类

需要创建一个引导类:

这里我们用SPRING INITIALIZR构建,引导类已经被创建完成,我们不需要额外创建了

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/09/593a00a28279d.png

package com.example.demo;
import org.springfr amework.boot.SpringApplication;
import org.springfr amework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

  
public static void main(String[] args) {
      SpringApplication.run(DemoApplication.
class, args);
   }
}


 

这里多了一个@SpringBootApplication注解,此注解相当于如下注解的整合:

@Configuration 用于定义一个配置类

@EnableAutoConfiguration Spring Boot 会自动根据你jar 包的依赖来自动配置

项目。

@ComponentScan 告诉Spring 哪个packages 的用注解标识的类会被spring

自动扫描并且装入bean 容器。

 

Banner

直接启动,控制台出现以下标识。

 .   ____          _            __ _ _

 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )

  '  |____| .__|_| |_|_| |_\__, | / / / /

 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::        (v1.5.3.RELEASE)

 

这个标识是Spring启动标识,如果不想要,可以设置取消

 

方案一:

public class DemoApplication {
  
public static void main(String[] args) {
     
//SpringApplication.run(DemoApplication.class, args);
     
SpringApplication application = new SpringApplication(DemoApplication.class);
      application.setBannerMode(Banner.Mode.
OFF);
      application.run(args);
   }
}


方案二:

application.properties文件中配置

spring.main.banner-mode=off


 

不仅如此,banner的图案也可以自己设置。我们只需要在resources下,建立一个banner.txt

里面可以配置很多,如下:

 #设置控制台中输出内容的颜色

${AnsiColor.BRIGHT_RED}

#这个是MANIFEST.MF文件中的版本号 

${application.version}              

#这个是上面的的版本号前面加v后上括号 

${application.formatted-version}

#这个是springboot的版本号 

${spring-boot.version}             

#这个是springboot的版本号 

${spring-boot.formatted-version}

 比如我设置符号和颜色如下:

${} #红色
${}
  &&&&&&&&&&&&&&&
  &   =^_^=     &
  &&&&&&&&&&&&&&&

那么启动成功之后会显示出:

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/10/593a029b8865b.png 

 2.4 入门程序

 我们不需要配置文件,直接编写Controller类即可

 

package com.example.demo.controller;
import org.springfr amework.web.bind.annotation.RequestMapping;
import org.springfr amework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
  
@RequestMapping("demo")
  
public String demo() {
     
return "Hello World!";
   }
}


 

@RestController注解:其实就是@Controller@ResponseBody注解加在一起

启动之前编写的引导类即可

在浏览器地址栏输入http://localhost:8080/demo 即可看到运行结果

 

2.5热部署

我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费了大量的时间。

能不能在我修改代码后不重启就能生效呢?可以,由于Spring Boot应用只是普通的Java应用,所以JVM热交换(hot-swapping)也能开箱即用。不过JVM热交换能替换的字节码有限制,想要更彻底的解决方案可以使用Spring Loaded项目或JRebel spring-boot-devtools 模块也支持应用快速重启(restart)

 

我们只需要在pom.xml加入如下配置即可

<dependency>

    <groupId>org.springfr amework.boot</groupId>

    <artifactId>spring-boot-devtools</artifactId>

    <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->

</dependency>

 

3.   SpringBoot整合

 3.1导入数据库表

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `user_name` varchar(100) DEFAULT NULL COMMENT '用户名',

  `password` varchar(100) DEFAULT NULL COMMENT '密码',

  `name` varchar(100) DEFAULT NULL COMMENT '姓名',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

 

INSERT INTO `user` VALUES ('1', 'zhangsan', '123456', '张三');

INSERT INTO `user` VALUES ('2', 'lisi', '123456', '李四');

INSERT INTO `user` VALUES ('3', 'wangwu', '123456', '王五');

INSERT INTO `user` VALUES ('4', 'xiaohan', '123456', '小韩');

INSERT INTO `user` VALUES ('5', 'xiaoliu', '123456', '小刘');

INSERT INTO `user` VALUES ('6', 'xiaoshitou', '123456', '小石头');

3.2 pom文件添加依赖

   pom.xml中进行如下配置

 

<dependency>

       <groupId>org.springfr amework.boot</groupId>

       <artifactId>spring-boot-starter-data-jpa</artifactId>

       <version>1.4.4.RELEASE</version>

    </dependency>

    <dependency>

       <groupId>mysql</groupId>

       <artifactId>mysql-connector-java</artifactId>

       <version>5.1.6</version>

    </dependency>

3.3加入Spring-Boot配置文件

src/main/resources  application.properties 配置文件,内容如下:

spring.main.banner-mode=off
#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot
spring.datasource.username=root
spring.datasource.password=root

#JPA Configuration:
spring.jpa.databa se=MySQL
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy


 3.4后端实现

  3.4.1创建实体类

package com.example.demo.pojo;

import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;

@Entity
public class User implements Serializable {
  
@Id
  
private Long id;
  
private String name;
  
private String password;
  
private String user_name;
//添加get/set 方法


 3.4.2创建DAO接口

package com.example.demo.dao;
import com.example.demo.pojo.User;
import org.springfr amework.data.jpa.repository.JpaRepository;
public interface UserDao extends JpaRepository<User, Long> {
}


 3.4.3创建业务逻辑接口

 import com.example.demo.pojo.User;
import java.util.List;

public interface UserService {
  
public List<User> findAll();
}


 3.4.4创建业务逻辑实现类

import com.example.demo.dao.UserDao;
import com.example.demo.pojo.User;
import com.example.demo.service.UserService;
import org.springfr amework.beans.factory.annotation.Autowired;
import org.springfr amework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
  
@Autowired
  
private UserDao userDao;
  
@Override
  
public List<User> findAll() {
      System.
out.println("我现在从MySQL中查询数据了");
      List<User> list =
this.userDao.findAll();
     
return list;
   }
}


 3.4.5创建Controller

import com.example.demo.pojo.User;
import com.example.demo.service.UserService;
import org.springfr amework.beans.factory.annotation.Autowired;
import org.springfr amework.web.bind.annotation.RequestMapping;
import org.springfr amework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping
("user")
public class UserController {
  
@Autowired
  
private UserService userService;
  
@RequestMapping("list")
  
public List<User> findAll() {
      List<User> list =
this.userService.findAll();
     
return list;
   }
}


运行引导类Application,打开浏览器输入http://127.0.0.1:8080/user/list

你可以自己设置访问的端口号 在application.properties配置文件中配置

server.port=8081
http://127.0.0.1:8081/user/list

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/10/593a07608e457.png

 3.4.6前端实现

resources/static下,自己动手写一个前端页面user.html

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/10/593a03b7eb8ab.png

浏览器地址栏输入:http://127.0.0.1:8080/user.html,效果如下

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/10/593a03c573d20.png

上述案例没有进行MyBatis的整合,而是继承了JpaRepository

4.   整合MyBatis

以下展示了整合MyBatis的两种方式:

方式一,不需要配置文件,直接在接口上写sql语句

方式二,添加UserMapper.xml文件,在这个配置文件中写sql语句

 

pom.xml中加入以下依赖

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


4.1编写Mapper

和之前的方式一样,只是多了两个注解,查询语句直接写在接口上。

@Mapper:声明Mapper接口

@Select:声明这个接口所需要使用的sql,当然,有查询的注解,肯定就有增删改的注解。

package com.example.demo.dao;
import com.example.demo.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
//在Mybatis的3.4.0以上才有
@Mapper
public interface UserMapper {
  
@Select("SELECT * FROM user WHERE name LIKE '%${value}%'")
  
public List<User> queryUserByName(String name);
}


 

4.2编写ServiceController

  service接口:-

public interface UserService {
  
public List<User> findAll();
  
public List<User> queryUserByName(String name);
}


 

 ServiceImpl实现类:

public class UserServiceImpl implements UserService {
  
@Autowired
  
private UserDao userDao;
  
@Autowired
  
private UserMapper userMapper;
  
@Override
  
public List<User> findAll() {
      System.
out.println("我现在从MySQL中查询数据了");
      List<User> list =
this.userDao.findAll();
     
return list;
   }

  
public List<User> queryUserByName(String name) {
       List<User>  list =
this.userMapper.queryUserByName(name);
     
return list;
   }
}


Controller添加内容:

//通过名字模糊查询
@RequestMapping("list/{name}")
public List<User> queryUserByName(@PathVariable String name) {
   List<User> list =
this.userService.queryUserByName(name);
  
return list;
}


打开浏览器输入:http://127.0.0.1:8080/user/list/

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/10/593a042be0433.png

以上所有的配置都是使用的默认配置,我们只需要专注java代码的开发即可,不需要加入配置文件了。

以上就是整合MyBatis的方式一。

 

但并不是所有得场景都是简单的业务,有时候业务复杂,需要我们加入自定义的配置文件;有时候需要载入例如分页助手这样的插件,辅助开发,所以我们也需要了解如何加载这些配置。如下图结构所示,添加以下配置文件

 

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/10/593a044c25308.png

 

在配置文件中写查询语句

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.dao.UserMapper">
  
<select id="queryAll" resultType="user">
      select * from user
  
</select>
</mapper>


 

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
     
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  
<plugins>
     
<!-- 通用Mapper -->
     
<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
        

        
<property name="IDENTITY" value="MYSQL" />
        

        
<property name="mappers" value="com.github.abel533.mapper.Mapper" />
     
</plugin>
  
</plugins>
</configuration>


 

UserMappper接口修改

import com.example.demo.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
//在Mybatis的3.4.0以上才有
@Mapper
public interface UserMapper extends com.github.abel533.mapper.Mapper<User> {

  
@Select("SELECT * FROM user WHERE name LIKE '%${value}%'")
  
public List<User> queryUserByName(String name);
   // 使用UserMapper.xml配置文件
  
public List<User> queryAll();
}


编写ServiceController

UserServiceImpl添加如下代码

@Override
public List<User> queryAll() {
    List<User> list =
this.userMapper.queryAll();
   
return list;
}


UserController 添加如下代码:

@RequestMapping("list/query")
public List<User> queryUserAll() {
   List<User> list =
this.userService.queryAll();
  
return list;
}


 

 4.3application.properties添加配置

 #spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.example.demo.pojo
#加载Mybatis核心配置文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.config-location=classpath:mybatis/SqlMapConfig.xml
#配置连接池,还需要在pom.xml中加入该连接池的依赖
#spring.datasource.type=com.jolbox.bonecp.BoneCPDataSource


 4.4测试

 测试使用UserMapper.xml

 浏览器地址栏输入:http://127.0.0.1:8080/user/list/query

http://obs-tpgkm.obs.cn-north-1.myhwclouds.com/2017/0609/10/593a04b89d8f1.png

以上就是整合MyBatis的方式二。

 搞定!SpringBoot的入门学习以及MyBatis整合就结束了!

 感谢大家的阅读,不足之处,还请多多指正。

posted @ 2017-06-09 15:54  余不见  阅读(313)  评论(0编辑  收藏  举报