SpringCloud+MyBatis+Redis整合—— 超詳細實例(一)


1、SpringCloud+MyBatis

  MyBatis 是一款優秀的輕量級半自動持久層框架,與之相對應的還有hibernate框架。

    話不多說,接下來搭建SpringCloud+MyBatis環境:

  • 第一步,在SpringCloud環境中的pom.xml中加入:
 1 <!-- 引用Mybatis 和 Mysql驅動開始  -->
 2         <dependency>  
 3             <groupId>org.mybatis.spring.boot</groupId>  
 4             <artifactId>mybatis-spring-boot-starter</artifactId>  
 5             <version>1.3.0</version>  
 6         </dependency>  
 7         <dependency>  
 8             <groupId>mysql</groupId>  
 9             <artifactId>mysql-connector-java</artifactId>  
10         </dependency>  
11 <!-- 引用Mybatis 和 Mysql驅動結束  -->
  • 第二步,在Mysql數據庫中創建User表  
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL COMMENT '主鍵',
  `name` varchar(64) NOT NULL COMMENT '姓名',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '石露露', '1994-10-08', '卡布奇諾國際社區');
  • 第三步,在SpringCloud中配置反向生成工具對User表生成相應的實體類和配置文件

在pom.xml文件的<bulid>標簽中通過maven添加插件引用

 1         <plugin>  
 2                 <groupId>org.mybatis.generator</groupId>  
 3                 <artifactId>mybatis-generator-maven-plugin</artifactId>  
 4                 <version>1.3.5</version>  
 5                 <dependencies>  
 6                     <dependency>  
 7                         <groupId> mysql</groupId>  
 8                         <artifactId> mysql-connector-java</artifactId>  
 9                         <version> 5.1.39</version>  
10                     </dependency>  
11                     <dependency>  
12                         <groupId>org.mybatis.generator</groupId>  
13                         <artifactId>mybatis-generator-core</artifactId>  
14                         <version>1.3.5</version>  
15                     </dependency>  
16                 </dependencies>  
17                 <executions>  
18                     <execution>  
19                         <id>Generate MyBatis Artifacts</id>  
20                         <phase>package</phase>  
21                         <goals>  
22                             <goal>generate</goal>  
23                         </goals>  
24                     </execution>  
25                 </executions>  
26                 <configuration>  
27                     <!--允許移動生成的文件 -->  
28                     <verbose>true</verbose>  
29                     <!-- 是否覆蓋 -->  
30                     <overwrite>true</overwrite>  
31                     <!-- 自動生成的配置 -->  
32                     <configurationFile>  
33                         src/main/resources/mybatis-generator.xml
34                     </configurationFile>  
35                 </configuration>  
36             </plugin>

 新建配置文件generatorConfig.xml,配置文件需配置數據庫jar包位置,生成的文件存放位置等信息:

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <!DOCTYPE generatorConfiguration  
 3         PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  
 4         "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">  
 5 <generatorConfiguration>  
 6     <!--mysql 連接數據庫jar 這里選擇自己本地位置-->  
 7     <classPathEntry location="F:\dev-space\repo\mysql\mysql-connector-java\5.1.45\mysql-connector-java-5.1.45.jar" />  
 8     <context id="testTables" targetRuntime="MyBatis3">  
 9         <commentGenerator>  
10             <!-- 是否去除自動生成的注釋 true:是 : false:否 -->  
11             <property name="suppressAllComments" value="true" />  
12         </commentGenerator>  
13         <!--數據庫連接的信息:驅動類、連接地址、用戶名、密碼 -->  
14         <jdbcConnection driverClass="com.mysql.jdbc.Driver"  
15                         connectionURL="jdbc:mysql://192.168.1.100:3306/test?serverTimezone=UTC" userId="bdgascloud"  
16                         password="bdgascloud">  
17         </jdbcConnection>  
18         <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer,為 true時把JDBC DECIMAL 和  
19            NUMERIC 類型解析為java.math.BigDecimal -->  
20         <javaTypeResolver>  
21             <property name="forceBigDecimals" value="false" />  
22         </javaTypeResolver>  
23   
24         <!-- targetProject:生成PO類的位置 -->  
25         <javaModelGenerator targetPackage="com.didispace.web.jdbc.po"  
26                             targetProject="src/main/java">  
27             <!-- enableSubPackages:是否讓schema作為包的后綴 -->  
28             <property name="enableSubPackages" value="false" />  
29             <!-- 從數據庫返回的值被清理前后的空格 -->  
30             <property name="trimStrings" value="true" />  
31         </javaModelGenerator>  
32         <!-- targetProject:mapper映射文件生成的位置  
33            如果maven工程只是單獨的一個工程,targetProject="src/main/java"  
34            若果maven工程是分模塊的工程,targetProject="所屬模塊的名稱",例如:  
35            targetProject="ecps-manager-mapper",下同-->  
36         <sqlMapGenerator targetPackage="mapXml"  
37                          targetProject="src/main/resources">  
38             <!-- enableSubPackages:是否讓schema作為包的后綴 -->  
39             <property name="enableSubPackages" value="false" />  
40         </sqlMapGenerator>  
41         <!-- targetPackage:mapper接口生成的位置 -->  
42         <javaClientGenerator type="XMLMAPPER"  
43                              targetPackage="com.didispace.web.jdbc.mapper"  
44                              targetProject="src/main/java">  
45             <!-- enableSubPackages:是否讓schema作為包的后綴 -->  
46             <property name="enableSubPackages" value="false" />  
47         </javaClientGenerator>  
48         <!-- 指定數據庫表 -->  
49         <table schema="" tableName="user"></table> 
50     </context>  
51 </generatorConfiguration>  

最好先右鍵項目選擇maven–>update project… 
然后再maven build….     

  配置運行參數: 
  Goals:mybatis-generator:generate -e 
  Profiles:generatorConfig.xml 
  最后點擊run等待完成 ,會發現如下文件被自動生成:

  • 第四步,在application.properties中添加
 
         

  spring.datasource.url=jdbc:mysql://192.168.1.100:3306/test?serverTimezone=UTC      #springboot會直接在容器中構建一個dataSource供我們使用。
  spring.datasource.username=bdgascloud
  spring.datasource.password=bdgascloud
  spring.datasource.driver-class-name=com.mysql.jdbc.Driver


mybatis.typeAliasesPackage=com.didispace.web.jdbc.po mybatis.mapperLocations=classpath:mapXml/UserMapper.xml
  • 第五步,在主application類中添加
 3 @MapperScan("com.didispace.web.jdbc.mapper")
 4 @SpringBootApplication
 5 //@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
 6 public class HelloApplication {
 7
 8     public static void main(String[] args) {
 9         SpringApplication.run(HelloApplication.class, args);
10     }
11 }

最后在controller中執行方法,頁面展示效果

 1 @RestController
 2 public class HelloController {
 3     @Autowired
 4     private UserMapper userMapper;
 5     
 6     @RequestMapping("/hello")
 7     public String index() {
 8          
9
User user = userMapper.selectByPrimaryKey(1); 10
11 return "Hello SpringBoot"+user.getName(); 12 13 } 14 15 }

至此SpringCloud+MyBatis搭建成功!

 


注釋一:Mybatis和Hibernate框架的區別

  1. 說起Hibernate和MyBatis最大的區別,用很寬泛的話講就是hibernate是自動的,mybatis是半自動的。自動指的是hibernate因為有良好的映射機制,針對高級查詢,也可以不必手動編寫sql,開發者可以更關注於業務邏輯而不用擔心sql的生成和結果映射。mybatis半自動指的是它在做高級查詢時,必須手動寫sql以及resultMap。所以說,mybatis比hibernate開發工作量大。
  2. 第二點就是在sql優化方面,hibernate默認是會把表中所有的列都查出來的,而mybatis是自己指定要查哪些列。當然,hibernate允許自己指定查什么,但是就會破壞hibernate開發的簡潔性。所以mybatis在sql優化上還是比hibernate靈活的。
  3. 第三點hibernate自帶日志統計,而mybatis需要依靠log4j來實現
  4. 第四點hibernate強大的數據庫無關性,只需在xml文件中配置驅動和方言,就可以實現和不同數據庫的交互。而mybatis的所有sql和所使用的數據庫有直接關系,一旦變更數據庫,那么你的sql語句基本就是要修改了。
  5. 第五點隨便提一句,mybatis比hibernate更加適合開發復雜查詢的項目,且更容易上手,從第一點就可以看出來。

注釋二:Maven中構建插件的標簽

注釋三:生成 po 和 mapper,都會生成 Example 類和其對應的 CURD方法(用於輔助查詢等)如果不需要在 table 標簽里將要生成的方法給關掉即可,代碼如下:

 <table tableName="user"

        enableCountByExample="false"

  enableUpdateByExample="false"

  enableDeleteByExample="false"

  enableSelectByExample="false"

  selectByExampleQueryId="false">

</table>

注釋四:update project本身是更新項目的意思。當Maven工程被做了一些改變后(主要是結構上的改變),必須讓maven重新生成或修改相關文件。否則eclipse將不知道變化。這時候需要運行“update project”來更新相對應的“eclipse的.classpath”文件,來更新它,讓eclipse知道這個包是buildpath。

注釋五:當沒有設置該屬性時,*.Mapper.xml文件里parameterType必須為類的全路徑 <insert id="insertSelective" parameterType="com.didispace.web.jdbc.po.User">,加上后為 <insert id="insertSelective" parameterType="User">即可。

注釋六:之前是直接在Mapper類上面添加注解@Mapper,這種方式要求每一個mapper類都需要添加此注解,麻煩,通過使用@MapperScan可以指定要掃描的Mapper類的包的路徑(支持多路徑)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM