eclipse下Spring boot+mysql8.0.15+mybatis整合以及各種坑(一)

在初學springboot的時候,只能一個人摸索,也踩了不少的大水坑。。。。網上的各種教程不適合自己用。下面自己寫一個整合教程,也把坑標記出來。

首先我們在創建項目的時候 ,儘量不要勾選像 WEB   mybatis  mysql  這些選項  。勾選上以後也只是自動添加依賴罷了,有時候會和你本地的環境不一致  而出現何種錯誤。我們可以創建項目以後自己添加pom依賴,去maven中央倉庫查詢pom.

 

有幾種創建方式  ,我這裏使用的是sts插件,在這裏下載

然後我們創建項目

儘量不要勾選  自己添加比較好根據自己的版本信息去找

第一個java類  就是springboot的啓動類,他是通過main方法來啓動的

application.propertis是他的配置文件,配置數據庫信息,以及mybaits掃描等等 他也可以寫成application.yml  

這個文件中。格式很重要,如果你會Python的話應該懂得,類似,空格對齊之類的  不能出現tab空格,否則會出問題

下面我們對這個項目加上需要的pom依賴,依賴可以從下面這裏去查詢這是中央倉庫的地址

https://mvnrepository.com/

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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>my-s-m-m-1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>my-s-m-m-1</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<version>2.1.3.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		 <dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.15</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
		 <dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency> 


	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

然後我們新增controller包結構,新增UserController類

這裏我新增了一個方法  需要注意的是我箭頭指向的地方

首先  @RestController註解相當於@ResponseBody + @Controller合在一起的作用。

@RequestMapping  和springMVC一樣 說到底springboot  他只是將springMVC 和 spring整合在了一起,以前我們需要手動去給他配置各種xml讓他們相互依賴。springboot 將這些整合成了一個框架,不需要再那麼繁瑣的去配置。

好,這些的話自己查下資料,然後我們啓動這個項目訪問一下,   

注意  啓動之前先將mybatis 的pom註釋掉否則會出現掃描不到文件的錯誤  導致啓動失敗,等我們將mybatis的代碼寫完,再將它放開

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

啓動沒有報錯,我們訪問這個路徑http://localhost:8080/userCon/testSpringboot

輸出成功,這樣  項目創建沒有問題  這時候  我們就將項目整個demo完成下來  最後的時候說一下要注意的點:

現在整個目錄結構是這樣的  然後我是使用mybatis的generator工具來進行生成我會把這個工具下載地址放在文章的最後,

generator.xml

在生成文件的時候,由於我用的是mysql8.0.15版本  需要注意的是  驅動地址  和鏈接屬性  都在5.*以後的版本改變了  這裏我把兩個都貼出來

新版本:

 <!--數據庫鏈接地址賬號密碼-->
         <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"             connectionURL="jdbc:mysql://localhost:3306/springboot?useSSL=false&amp;serverTimezone=Hongkong&amp;characterEncoding=utf-8&amp;autoReconnect=true" userId="root" password="root">
         </jdbcConnection>

老版本:

 <!--數據庫鏈接地址賬號密碼-->
         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/springboot" userId="root" password="root">
         </jdbcConnection>

這一段是非常重要的  記下來  要考的

?useSSL=false&amp;serverTimezone=Hongkong&amp;characterEncoding=utf-8&amp;autoReconnect=true

新版本必須加。。。。。。。很大的坑  找了很久

這是將生成的實體類  mapper的文件已經放到了項目中。仔細檢查一下你的mapper.xml文件是否生成有錯誤。最好將自動生成的方法刪掉  只留一個查詢,然後先把項目測通了再說。

我們再加上service業務層的接口和實現類

下面貼出來我實測有任何問題的配置文件(有問題你找我!!):

建表語句:

CREATE TABLE `user`  (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `userName` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `passWord` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `realName` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

application.yml

spring:
  profiles:
    active: 
  datasource: 
    url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
   typeAliasesPackage: com.example.entity
   mapperLocations: classpath*:mapping/*.xml

記住啊  對齊。不知道的可以直接複製過去  整個文件不爆紅 不爆黃纔算是格式對

下面我將每個層次的代碼都貼出來

UserController.java

package com.example.controller;

import java.util.Hashtable;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.example.service.UserService;

@RestController
@RequestMapping("/userCon")
public class UserController {

	@Autowired
	private UserService userService;
	
	@RequestMapping("/testSpringboot")
	public Map<String, Object> testSpringboot(){
		Map<String, Object> maps = new Hashtable<>();
		maps.put("name", "測試輸出");
		return maps;
	}
	
	@RequestMapping("getmmm")
	@ResponseBody
	public Map<String, Object> getmmm(){
		Map<String, Object> mm = userService.getMaps();
		
		return mm;
	}
	
}

UserService.java

package com.example.service;

import java.util.Map;

public interface UserService {

	Map<String, Object> getMaps();

}

UserService.impl.java

package com.example.service.impl;

import java.sql.SQLData;
import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;
	
	@Override
	public Map<String, Object> getMaps() {
		Integer i = 1;
		Map<String, Object> j = new HashMap<String, Object>();
		User selectByPrimaryKey = userMapper.selectByPrimaryKey(i);
		j.put("service", selectByPrimaryKey);
		return j;
		
	}

}

UserMapper.java

package com.example.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import com.example.entity.User;

@Mapper
@Repository
public interface UserMapper {

    User selectByPrimaryKey(Integer id);

}

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.mapper.UserMapper">
  <resultMap id="BaseResultMap" type="com.example.entity.User">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="userName" jdbcType="VARCHAR" property="username" />
    <result column="passWord" jdbcType="VARCHAR" property="password" />
    <result column="realName" jdbcType="VARCHAR" property="realname" />
  </resultMap>
  <sql id="Base_Column_List">
    id, userName, passWord, realName
  </sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from user
    where id = #{id,jdbcType=INTEGER}
  </select>
  
</mapper>

完整的代碼都在這。這個時候  測試代碼有了  配置數據庫  mybatis有了  啓動項目  。

訪問  http://localhost:8080/userCon/getmmm   

返回沒問題。

這時候你就可以去做你的項目了  需要集成其他的技術  以後會更新  有什麼問題可以留言或者聯繫我

我附上項目demo  和 代碼生成器軟件   

鏈接: https://pan.baidu.com/s/1-416_ZoEIpP0CsbvyfEpPQ 提取碼: frsk 複製這段內容後打開百度網盤手機App,操作更方便哦

不要錢  不要金幣   有問題隨時問我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章