1. 程式人生 > 實用技巧 >Spring Boot學習01

Spring Boot學習01

本文使用IDEA建立一個Spring Boot的專案,連線MySQL資料庫,使用MyBatis實現資料庫查詢操作。

1建立Spring Boot專案

使用IDEA建立Spring Initializr專案,勾選常用的元件,通過Maven新增到專案中。

專案的POM檔案如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <
version>2.2.1.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>demo</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name
>demo</name> 15 <description>Demo project for Spring Boot</description> 16 17 <properties> 18 <java.version>1.8</java.version> 19 </properties> 20 21 <dependencies> 22 <dependency> 23 <groupId>org.springframework.boot</groupId> 24 <artifactId>spring-boot-starter-amqp</artifactId> 25 </dependency> 26 <dependency> 27 <groupId>org.springframework.boot</groupId> 28 <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 29 </dependency> 30 <dependency> 31 <groupId>org.springframework.boot</groupId> 32 <artifactId>spring-boot-starter-data-jdbc</artifactId> 33 </dependency> 34 <dependency> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-starter-data-mongodb</artifactId> 37 </dependency> 38 <dependency> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-starter-data-redis</artifactId> 41 </dependency> 42 <dependency> 43 <groupId>org.springframework.boot</groupId> 44 <artifactId>spring-boot-starter-thymeleaf</artifactId> 45 </dependency> 46 <dependency> 47 <groupId>org.springframework.boot</groupId> 48 <artifactId>spring-boot-starter-web</artifactId> 49 </dependency> 50 <dependency> 51 <groupId>org.mybatis.spring.boot</groupId> 52 <artifactId>mybatis-spring-boot-starter</artifactId> 53 <version>2.1.1</version> 54 </dependency> 55 56 <dependency> 57 <groupId>mysql</groupId> 58 <artifactId>mysql-connector-java</artifactId> 59 <scope>runtime</scope> 60 </dependency> 61 <dependency> 62 <groupId>org.springframework.boot</groupId> 63 <artifactId>spring-boot-starter-test</artifactId> 64 <scope>test</scope> 65 <exclusions> 66 <exclusion> 67 <groupId>org.junit.vintage</groupId> 68 <artifactId>junit-vintage-engine</artifactId> 69 </exclusion> 70 </exclusions> 71 </dependency> 72 <dependency> 73 <groupId>org.springframework.amqp</groupId> 74 <artifactId>spring-rabbit-test</artifactId> 75 <scope>test</scope> 76 </dependency> 77 <dependency> 78 <groupId>org.webjars</groupId> 79 <artifactId>jquery</artifactId> 80 <version>3.4.1</version> 81 </dependency> 82 </dependencies> 83 84 <build> 85 <plugins> 86 <plugin> 87 <groupId>org.springframework.boot</groupId> 88 <artifactId>spring-boot-maven-plugin</artifactId> 89 </plugin> 90 </plugins> 91 </build> 92 93 </project>

2新增Modle層檔案,com.example.demo.model.Users:

 1 package com.example.demo.model;
 2 
 3 public class Users {
 4     public Integer id;
 5     public String last_name;
 6     public Integer gender;
 7     public String eamil;
 8 
 9     public Integer getId() {
10         return id;
11     }
12 
13     public void setId(Integer id) {
14         id = id;
15     }
16 
17     public String getLastName() {
18         return last_name;
19     }
20 
21     public void setLastName(String lastName) {
22         last_name = lastName;
23     }
24 
25     public Integer getGender() {
26         return gender;
27     }
28 
29     public void setGender(Integer gender) {
30         gender = gender;
31     }
32 
33     public String getEamil() {
34         return eamil;
35     }
36 
37     public void setEamil(String eamil) {
38         eamil = eamil;
39     }
40 
41     @Override
42     public String toString() {
43         return "Users{" +
44                 "Id=" + id +
45                 ", LastName='" + last_name + '\'' +
46                 ", Gender=" + gender +
47                 ", Eamil='" + eamil + '\'' +
48                 '}';
49     }
50 }

3資料庫中建立表,tbl_employee:

 1 SET NAMES utf8;
 2 SET FOREIGN_KEY_CHECKS = 0;
 3 
 4 -- ----------------------------
 5 --  Table structure for `tbl_employee`
 6 -- ----------------------------
 7 DROP TABLE IF EXISTS `tbl_employee`;
 8 CREATE TABLE `tbl_employee` (
 9   `id` int(11) NOT NULL AUTO_INCREMENT,
10   `last_name` varchar(255) DEFAULT NULL,
11   `gender` char(1) DEFAULT NULL,
12   `email` varchar(255) DEFAULT NULL,
13   PRIMARY KEY (`id`)
14 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
15 
16 -- ----------------------------
17 --  Records of `tbl_employee`
18 -- ----------------------------
19 BEGIN;
20 INSERT INTO `tbl_employee` VALUES ('1', 'yang', '1', '[email protected]');
21 COMMIT;
22 
23 SET FOREIGN_KEY_CHECKS = 1;

3配置MyBatis

3.1配置檔案application.properties

1 spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
2 spring.datasource.url = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8
3 spring.datasource.username = root
4 spring.datasource.password = root
5 
6 
7 spring.data.mongodb.uri=mongodb://localhost:27017/blog

3.2Mybatis全域性配置檔案,mybatis-config.xml:

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 <configuration>
 4         <properties resource="application.properties"></properties>
 5         <settings>
 6                 <!-- 列印查詢語句 -->
 7                 <setting name="logImpl" value="STDOUT_LOGGING" />
 8                 <!-- 控制全域性快取(二級快取)-->
 9                 <setting name="cacheEnabled" value="true"/>
10                 <!-- 延遲載入的全域性開關。當開啟時,所有關聯物件都會延遲載入。預設 false  -->
11                 <setting name="lazyLoadingEnabled" value="true"/>
12                 <!-- 當開啟時,任何方法的呼叫都會載入該物件的所有屬性。預設 false,可通過select標籤的 fetchType來覆蓋-->
13                 <setting name="aggressiveLazyLoading" value="false"/>
14                 <!--  Mybatis 建立具有延遲載入能力的物件所用到的代理工具,預設JAVASSIST -->
15                 <!--<setting name="proxyFactory" value="CGLIB" />-->
16                 <!-- STATEMENT級別的快取,使一級快取,只針對當前執行的這一statement有效 -->
17                 <!--
18                         <setting name="localCacheScope" value="STATEMENT"/>
19                 -->
20                 <setting name="localCacheScope" value="SESSION"/>
21         </settings>
22         <typeAliases>
23                 <typeAlias alias="users" type="com.example.demo.model.Users" />
24         </typeAliases>
25         <environments default="development">
26                 <environment id="development">
27                         <transactionManager type="JDBC"></transactionManager>
28                         <dataSource type="POOLED">
29                                 <property name="driver" value="${spring.datasource.driverClassName}"/>
30                                 <property name="url" value="${spring.datasource.url}"/>
31                                 <property name="username" value="${spring.datasource.username}"/>
32                                 <property name="password" value="${spring.datasource.password}"/>
33                         </dataSource>
34                 </environment>
35         </environments>
36 
37         <mappers>
38                 <!--        mapper引用方式1:通過檔案類路徑引入XML對映器-->
39                 <mapper resource="UserMapper.xml"/>
40                 <!--        mapper引用方式2:通過包名引入對映器介面-->
41                 <!--        <package name="com.example.demo.mapper" />-->
42 
43                 <!--        mapper引用方式3:用類註冊引入對映器介面-->
44                 <!--        <mapper class="com.example.demo.mapper.IUserMapper"/>-->
45         </mappers>
46 </configuration>

3.3Mybatis對映檔案,UserMapper.xml:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 <!--        namespace 所對應的是一個介面的全限定名-->
4 <mapper namespace="com.example.demo.mapper.IUserMapper">
5     <select id="getUserById" parameterType="Integer" resultType="com.example.demo.model.Users">
6         SELECT id,last_name,gender,email FROM tbl_employee WHERE id = #{id};
7     </select>
8 </mapper>

3.4Mybatis介面檔案,com.example.demo.mapper.IUserMapper:

1 package com.example.demo.mapper;
2 
3 import com.example.demo.model.Users;
4 import org.springframework.stereotype.Component;
5 
6 @Component
7 public interface IUserMapper {
8     public Users getUserById(Integer id);
9 }

4新增Service層檔案,呼叫Mybatis實現資料庫操作:

 1 package com.example.demo.service;
 2 import com.example.demo.mapper.IUserMapper;
 3 import org.apache.ibatis.io.Resources;
 4 import org.apache.ibatis.session.SqlSession;
 5 import org.apache.ibatis.session.SqlSessionFactory;
 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 7 import org.springframework.stereotype.Service;
 8 import java.io.IOException;
 9 import java.io.InputStream;
10 @Service
11 public class Users {
12     
13     public com.example.demo.model.Users getUserById(Integer id) throws IOException {
14 
15         // 讀取mybatis-config.xml檔案
16         InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
17 
18         // 初始化mybatis,建立SqlSessionFactory類的例項
19         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
20 
21         // 建立Session例項
22         SqlSession session = sqlSessionFactory.openSession();
23 
24         // 操作資料庫方法一:獲得xml對映檔案中定義的操作語句
25         // com.example.demo.model.Users s = session.selectOne("com.example.demo.mapper.IUserMapper.getUserById", 1);
26         // 列印Student物件
27         // System.out.println(s);
28 
29         // 操作資料庫方法二:獲得mapper介面的代理物件
30         IUserMapper sm = session.getMapper(IUserMapper.class);
31         // 直接呼叫介面的方法,查詢id為1的Student資料
32         com.example.demo.model.Users s2 = sm.getUserById(1);
33         // 列印Peson物件
34         // System.out.println(s2);
35 
36         // 提交事務
37         session.commit();
38         // 關閉Session
39         session.close();
40 
41         return s2;
42         //return userMapper.getUserById(id);
43     }
44 }

5新增Controller檔案:

 1 package com.example.demo.controller;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.web.bind.annotation.PathVariable;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RestController;
 7 
 8 import java.io.IOException;
 9 
10 @RestController
11 public class UserController {
12 
13     @Autowired
14     com.example.demo.service.Users userService;
15 
16     @RequestMapping("/user/{id}")
17     public String getUserById(@PathVariable Integer id) throws IOException {
18 
19         com.example.demo.model.Users users = userService.getUserById(id);
20         return users.getLastName();
21     }
22 }

6測試:

啟動檔案

 1 package com.example.demo;
 2 
 3 
 4 import org.springframework.boot.SpringApplication;
 5 import org.springframework.boot.autoconfigure.SpringBootApplication;
 6 
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 
10 @SpringBootApplication
11 public class DemoApplication {
12 
13     public static <StudentMapper> void main(String[] args){
14 
15         SpringApplication.run(DemoApplication.class, args);
16     }
17 
18 }

Spring Boot執行在本機8080埠,通過地址:[http://localhost:8080/user/1],完成查詢操作。