Spring Boot2.X-整合mybatis+mysql

本文档详细介绍了如何在Linux环境下安装MySQL8.0,安装并使用MySQL客户端Navicat Premium 12,以及如何在SpringBoot项目中集成Mybatis和MySQL数据库进行数据操作。通过创建User实体类、UserMapper接口及XML配置文件,实现了增删查改的基本功能,并提供了测试用例。

目录

1.linux安装mysql8.0

​2.安装mysql客户端Navicat Premium 12

3.spring boot 集成mybatis,mysql

4.测试

5.源码下载


源码下载:https://download.youkuaiyun.com/download/adam_zs/24945109

1.linux安装mysql8.0

参考:https://blog.youkuaiyun.com/young_0609/article/details/109015666


2.安装mysql客户端Navicat Premium 12

3.spring boot 集成mybatis,mysql

 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 https://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.5.5</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.wzs.springboot</groupId>
	<artifactId>springboot.mybatis</artifactId>
	<version>1.0.0</version>
	<name>spring-boot-mybatis-mysql</name>
	<description>Spring Boot Mybatis Mysql</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

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

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>

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

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
	</dependencies>


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

 application.yml

server:
  port: 8080  #tomcat端口
 
spring: #springboot的配置
  datasource: #定义数据源
    name: mysqlTest #定义数据源的名字
    #10.18.22.10 服务器地址,mysql数据库名字
    url: jdbc:mysql://10.18.xx.xx:3306/wzsmysql?serverTimezone=GMT%2B8&useSSL=FALSE
    username: root  #数据库用户名,root为管理员
    password: 123456 #该数据库用户的密码
 
mybatis:  #mybatyis的配置
  mapper-locations: classpath:mapper/*.xml #指定mapper的配置文件的路径是mapper文件夹下的所有xml文件。

建表

CREATE TABLE user(
  id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
  name VARCHAR(20) COMMENT '姓名',
  age    int COMMENT '年龄'
) COMMENT='学生信息';

select * from user;
insert user(id,name,age) VALUES(null,'wangzs1',31);
insert user(id,name,age) VALUES(null,'wangzs2',32);
insert user(id,name,age) VALUES(null,'wangzs3',33);
insert user(id,name,age) VALUES(null,'wangzs4',34);
package com.wzs.springboot.mybatis;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.wzs.springboot.mybatis")
public class SpringBootMybatisMysqlApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootMybatisMysqlApplication.class, args);
	}

}
package com.wzs.springboot.mybatis;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
	private Integer id;
	private String name;
	private Integer age;
}
package com.wzs.springboot.mybatis;

import java.util.List;

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

@RestController
@RequestMapping(value = "/user")
public class UserController {
	@Autowired
	private UserServiceImpl userService;

	@RequestMapping("/findAll")
	public String findAll() {
		List<User> users = userService.findAll();
		return users.toString();
	}

	@RequestMapping("/add")
	public int addUser() {
		User u = new User(null, "wangzs-" + System.currentTimeMillis(), 45);
		int stat = userService.addUser(u);
		return stat;
	}
}
package com.wzs.springboot.mybatis;

import java.util.List;

public interface UserMapper {
	int insertUser(User user);

	int deleteUser(Integer id);

	User selectUser(Integer id);

	int updateUser(User user);

	List<User> selectAll();
}
package com.wzs.springboot.mybatis;

import java.util.List;

public interface UserService {
	int addUser(User user);

	int deleteUser(Integer id);

	User selectUser(Integer id);

	int updateUser(User user);

	List<User> findAll();
}
package com.wzs.springboot.mybatis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
	@Autowired
	private UserMapper userMapper;

	@Override
	public int addUser(User user) {
		return userMapper.insertUser(user);
	}

	@Override
	public int deleteUser(Integer id) {
		return userMapper.deleteUser(id);
	}

	@Override
	public User selectUser(Integer id) {
		return userMapper.selectUser(id);
	}

	@Override
	public List<User> findAll() {
		return userMapper.selectAll();
	}

	@Override
	public int updateUser(User user) {
		return userMapper.updateUser(user);
	}
}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--上面2行的是约束依赖,固定照抄就好 -->
<!--下面的才是要自己编写的地方 -->
<!--写mapper的配置文件第一步就是要写<mapper></mapper>标签 -->
<!--<mapper></mapper>标签里包含着各个CURD操作的SQL语句 -->
<mapper namespace="com.wzs.springboot.mybatis.UserMapper">
	<!--定义一个名为BaseResultMap的返回类型 -->
	<resultMap id="BaseResultMap" type="com.wzs.springboot.mybatis.User">
		<id column="id" property="id" jdbcType="INTEGER"></id>
		<result column="name" property="name" jdbcType="VARCHAR"></result>
		<result column="age" property="age" jdbcType="INTEGER"></result>
	</resultMap>

	<!--插入语句 -->
	<!--id要与UserMapper文件中表示插入的函数名一致,parameterType表示函数的输入参数的类型 -->
	<insert id="insertUser" parameterType="com.wzs.springboot.mybatis.User">
		insert into
		user(id,name,age)values(#{id,jdbcType=INTEGER},#{name,jdbcType=VARCHAR},#{age,jdbcType=INTEGER})/*SQL语句*/
	</insert>

	<!--删除语句 -->
	<delete id="deleteUser" parameterType="java.lang.Integer">
		delete from user where id =#{id,jdbcType=INTEGER}
	</delete>

	<!--查找语句 -->
	<!--resultMap表示函数返回的类型 -->
	<select id="selectUser" parameterType="java.lang.Integer" resultMap="BaseResultMap">
		select * from user where id =
		#{id,jdbcType=INTEGER}
	</select>

	<!--查找语句 -->
	<select id="selectAll" resultMap="BaseResultMap">
		select * from user
	</select>

	<!--修改语句 -->
	<update id="updateUser" parameterType="com.wzs.springboot.mybatis.User">
		update user set
		name=#{name,jdbcType=VARCHAR},age=#{age,jdbcType=INTEGER}
		where id=#{id,jdbcType=INTEGER}
	</update>
</mapper>

4.测试

package com.wzs.springboot.mybatis;

import java.net.MalformedURLException;
import java.net.URL;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SpringBootMybatisMysqlApplicationTests {
	@LocalServerPort
	private int port;

	private URL base;

	@Autowired
	private TestRestTemplate restTemplate;

	@Autowired
	private UserServiceImpl userService;

	@Before
	public void setUp() throws MalformedURLException {
		String url = String.format("http://localhost:%d/", port);
		System.out.println(String.format("##SpringBootMybatisMysqlApplicationTests port is : [%d]", port));
		this.base = new URL(url);
	}

	@Test
	public void findAll_test() {
		ResponseEntity<String> response = this.restTemplate.getForEntity(this.base.toString() + "/user/findAll",
				String.class);
		System.out.println(response);
	}

	@Test
	public void add_test() {
		ResponseEntity<String> response = this.restTemplate.getForEntity(this.base.toString() + "/user/add",
				String.class);
		System.out.println(response);
	}

	@Test
	public void selectUser_test() {
		User user = userService.selectUser(11);
		System.out.println(user);
	}

	@Test
	public void updateUser_test() {
		User user = userService.selectUser(11);
		System.out.println(userService.selectUser(11));
		user.setName("wangsm");
		userService.updateUser(user);
		System.out.println(userService.selectUser(11));
	}
}

5.源码下载

https://download.youkuaiyun.com/download/adam_zs/24945109

<?xml version="1.0" encoding="UTF-8"?> 4.0.0 org.springframework.boot spring-boot-starter-parent 3.4.7 com.example takeoutsystem 0.0.1-SNAPSHOT takeoutsystem takeoutsystem <java.version>17</java.version> <mybatis-plus.version>3.5.7</mybatis-plus.version> <mybatis.version>3.5.15</mybatis.version> <mybatis-spring.version>3.0.3</mybatis-spring.version> <jjwt.version>0.11.5</jjwt.version> <springdoc-openapi.version>2.8.5</springdoc-openapi.version> <thymeleaf-extras-springsecurity6.version>3.1.2.RELEASE</thymeleaf-extras-springsecurity6.version> dev aliyun-maven https://maven.aliyun.com/repository/public true false org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} org.mybatis mybatis org.mybatis mybatis-spring com.baomidou mybatis-plus org.mybatis mybatis ${mybatis.version} org.mybatis mybatis-spring ${mybatis-spring.version} com.baomidou mybatis-plus ${mybatis-plus.version} com.mysql mysql-connector-j runtime com.h2database h2 test io.jsonwebtoken jjwt-api ${jjwt.version} io.jsonwebtoken jjwt-impl ${jjwt.version} runtime io.jsonwebtoken jjwt-jackson ${jjwt.version} runtime org.springframework.boot spring-boot-starter-security org.thymeleaf.extras thymeleaf-extras-springsecurity6 ${thymeleaf-extras-springsecurity6.version} org.springdoc springdoc-openapi-starter-webmvc-ui ${springdoc-openapi.version} org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine com.baomidou mybatis-plus-boot-starter-test ${mybatis-plus.version} test org.mybatis mybatis org.mybatis mybatis-spring org.springframework.security spring-security-test test org.projectlombok lombok src/main/resources true application*.yml application*.properties src/main/resources false application*.yml application*.properties org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok dev true dev src/main/resources true application.yml application-dev.yml prod prod src/main/resources true application.yml application-prod.yml 修改POM.xml文件,降级MYBATIS版本
最新发布
07-15
<think>根据错误信息,问题在于MyBatis-Plus 3.5.7需要调用MyBatis的`Configuration.parsePendingMethods(boolean)`方法,但是当前使用的MyBatis版本是3.5.15,其中没有这个方法。因此,我们需要将MyBatis的版本降级到与MyBatis-Plus 3.5.7兼容的版本(如3.5.7)。 在提供的POM.xml中,已经指定了MyBatis的版本为3.5.15,我们需要将其改为3.5.7。同时,注意MyBatis-Spring的版本也需要兼容,但根据MyBatis-Plus 3.5.7的要求,通常使用MyBatis-Spring 2.0.7以上即可,但为了确保兼容,我们可以查看MyBatis-Plus 3.5.7的官方文档或依赖树,不过这里我们已知MyBatis 3.5.7是兼容的。 修改步骤: 1. 将`<mybatis.version>`属性值从3.5.15改为3.5.7。 2. 由于我们使用了`mybatis-spring`,并且其版本由`<mybatis-spring.version>`属性控制,目前是3.0.3,这个版本对于MyBatis 3.5.7是兼容的(因为MyBatis-Spring 3.0.3要求MyBatis 3.5.6+),所以可以保留。 另外,在依赖中,我们看到了显式引入了`mybatis`和`mybatis-spring`,并且版本由属性控制,所以修改属性即可。 修改后的POM.xml片段如下(只修改了`mybatis.version`属性): ```xml <properties> <java.version>17</java.version> <mybatis-plus.version>3.5.7</mybatis-plus.version> <!--mybatis版本从3.5.15改为3.5.7 --> <mybatis.version>3.5.7</mybatis.version> <mybatis-spring.version>3.0.3</mybatis-spring.version> <jjwt.version>0.11.5</jjwt.version> <springdoc-openapi.version>2.8.5</springdoc-openapi.version> <thymeleaf-extras-springsecurity6.version>3.1.2.RELEASE</thymeleaf-extras-springsecurity6.version> </properties> ``` 这样,当Maven构建时,MyBatis的版本就会被降级到3.5.7,从而解决版本不兼容的问题。 注意:修改后需要重新构建项目(执行`mvn clean install`)以确保依赖更新。 如果项目中还有其他地方强制指定了MyBatis版本,比如在依赖管理(dependencyManagement)中,那么需要检查并调整。但在这个POM中,我们没有看到dependencyManagement,所以直接修改属性即可。 另外,由于MyBatis-Plus本身会传递依赖MyBatis,我们通过显式指定MyBatis版本覆盖了传递依赖的版本,这是Maven的依赖调解原则(最近的定义优先)。 如果修改后问题仍然存在,可以运行`mvn dependency:tree`查看MyBatis的版本是否确实被降级。 修改后的完整pom.xml文件(只修改了mybatis.version属性)如下:</think>根据错误信息和提供的POM文件,问题在于MyBatis-Plus 3.5.7与MyBatis 3.5.15版本不兼容。以下是完整的解决方案: ### 解决方案:修改POM.xml降级MyBatis版本 ```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 https://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>3.4.7</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>takeoutsystem</artifactId> <version>0.0.1-SNAPSHOT</version> <name>takeoutsystem</name> <description>takeoutsystem</description> <properties> <java.version>17</java.version> <!-- 关键修改:将MyBatis版本降级到3.5.7 --> <mybatis.version>3.5.7</mybatis.version> <mybatis-plus.version>3.5.7</mybatis-plus.version> <mybatis-spring.version>3.0.3</mybatis-spring.version> <jjwt.version>0.11.5</jjwt.version> <springdoc-openapi.version>2.8.5</springdoc-openapi.version> <thymeleaf-extras-springsecurity6.version>3.1.2.RELEASE</thymeleaf-extras-springsecurity6.version> </properties> <dependencies> <!-- Spring Boot 基础依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- MyBatis-Plus 依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> <!-- 显式指定兼容的MyBatis版本 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <!-- 数据库依赖 --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>test</scope> </dependency> <!-- 其他依赖保持不变 --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>${jjwt.version}</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>${jjwt.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>${jjwt.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity6</artifactId> <version>${thymeleaf-extras-springsecurity6.version}</version> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>${springdoc-openapi.version}</version> </dependency> <!-- 测试依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter-test</artifactId> <version>${mybatis-plus.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ``` ### 关键修改说明: 1. **MyBatis版本降级**: ```xml <!-- 修改前 --> <mybatis.version>3.5.15</mybatis.version> <!-- 修改后 --> <mybatis.version>3.5.7</mybatis.version> ``` -MyBatis版本从3.5.15降级到3.5.7,与MyBatis-Plus 3.5.7兼容 2. **显式声明依赖**: ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> ``` - 显式声明MyBatis依赖,确保Maven使用指定版本而非传递依赖版本 ### 验证步骤: 1. 清理Maven缓存: ```bash mvn clean install -U ``` 2. 检查依赖树确认版本: ```bash mvn dependency:tree -Dincludes=org.mybatis:mybatis ``` 输出应显示: ``` [INFO] +- org.mybatis:mybatis:jar:3.5.7:compile ``` 3. 检查冲突解决: ```bash mvn dependency:analyze ``` ### 备选方案:升级MyBatis-Plus 如果不想降级MyBatis,可以升级MyBatis-Plus到兼容版本: ```xml <!-- 修改MyBatis-Plus版本 --> <mybatis-plus.version>3.5.8</mybatis-plus.version> ``` ### 版本兼容性参考: | 组件 | 兼容版本 | |---------------|---------------------| | MyBatis-Plus | 3.5.7 (需要MyBatis 3.5.7) | | MyBatis | 3.5.7 | | Spring Boot | 3.4.7 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值