Spring Boot學習01
阿新 • • 發佈:2020-09-13
本文使用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],完成查詢操作。