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,操作更方便哦

不要钱  不要金币   有问题随时问我

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