springboot整合mybatis
## 环境
spring boot2.4.4
MySQL5.7
自己错误了一万次最后总结了一下
步骤:
- 使用spring initaite 初始化一个项目,导入工具依赖(三种),web环境,jdbc环境,Mysql驱动依赖(剩下的先不导入)。
-
这是需要自己手动修改MySQL驱动的版本号。因为我自己的MySQL是5.7版本的,这里的版本号是必须的。
-
然后填写application.properties的jdbc连接数据库的必填四项。
spring.datasource.url=jdbc:mysql://localhost:3306/bootpra?serverTimeZone=UTC?useSSL=false spring.datasource.username=root spring.datasource.password=0000 #这里我没有使用带cj的驱动,我的5.7需要的是不带cj的低版本驱动。 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
-
接下来就直接测试到底能不能连接上数据库。进入springboot test
@Autowired
Datasource datasource;
@Test
void contextLoads() {
sout(datasource.getClass());
}
要是正确的话能正常的运行,而且在最后会出现默认的HikariDataSource
-
至此我们的连接任务就完成了。接下来就直接导入Mybatis依赖来进行编写了。
至于druid数据池可以配置可以不配置我这里是配置了的。
-
又由于mybatis和druid都不是spring“本土”的依赖,所以要自己编写配置
#这个依赖就是在.xml绑定方法的resultType,ParameterType时,不用再写com.ws.poio.xxx了,就直接写成类名 User就行,图片如下。 mybatis.type-aliases-package=com.ws.bootowetry02.pojo #这个依赖就是所有的Mapper对应的.xml文件都要写在这个下面, #切记!是在resource下面先建立一个mybatis文件夹再建一个mapper文件夹 #而不是直接在resource下面建立Mapper文件夹。这样子实测不行!!!! #而且这里不能写成/mybatis/mapper/*.xml!!!!! #因为mapper_location:classpath代表着是resource文件夹 #classpath:mybatis/mapper/*.xml代表着从resource文件夹开始找 #classpath:/mybatis/mapper/*.xml代表着从最最最开始的项目名开始往下找。 mybatis.mapper-locations=classpath:mybatis/mapper/*.xml #这个就是从默认的HikariDataSource转成Druid了 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
-
编写完这些配置剩下的就剩各种层的编写了,我直接给出代码。
- 总pom
<?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.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.ws</groupId> <artifactId>boot-owe-try02</artifactId> <version>0.0.1-SNAPSHOT</version> <name>boot-owe-try02</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-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build> </project>
#总配置 spring.datasource.url=jdbc:mysql://localhost:3306/bootpra?serverTimeZone=UTC?useSSL=false spring.datasource.username=root spring.datasource.password=0000 spring.datasource.driver-class-name=com.mysql.jdbc.Driver mybatis.type-aliases-package=com.ws.bootowetry02.pojo mybatis.mapper-locations=classpath:mybatis/mapper/*.xml spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#pojo类
package com.ws.bootowetry02.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author 王顺
* @date 2021/5/21 - 12:18
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}
//mapper
package com.ws.bootowetry02.mapper;
import com.ws.bootowetry02.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author 王顺
* @date 2021/5/21 - 12:22
*/
@Mapper
public interface UserMapper {
List<User> queryUserList();
User queryUserById(int id);
int addUser(User user);
int updateUser(User user);
int deleteUser(int id);
}
//service
package com.ws.bootowetry02.service;
import com.ws.bootowetry02.pojo.User;
import java.util.List;
/**
* @author 王顺
* @date 2021/5/21 - 16:11
*/
public interface UserService {
List<User> queryUserList();
User queryUserById(int id);
int addUser(User user);
int updateUser(User user);
int deleteUser(int id);
}
//serviceImpl
package com.ws.bootowetry02.service.Impl;
import com.ws.bootowetry02.mapper.UserMapper;
import com.ws.bootowetry02.pojo.User;
import com.ws.bootowetry02.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author 王顺
* @date 2021/5/21 - 16:11
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Override
public List<User> queryUserList() {
return userMapper.queryUserList();
}
@Override
public User queryUserById(int id) {
return userMapper.queryUserById(id);
}
@Override
public int addUser(User user) {
return userMapper.addUser(user);
}
@Override
public int updateUser(User user) {
return userMapper.updateUser(user);
}
@Override
public int deleteUser(int id) {
return userMapper.deleteUser(id);
}
}
//mapper.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.ws.bootowetry02.mapper.UserMapper">
<select id="queryUserList" resultType="User">
select * from user
</select>
<select id="queryUserById" resultType="User">
select * from user where id=#{id}
</select>
<insert id="addUser" parameterType="User" >
insert into user(id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
<update id="updateUser" parameterType="User">
update user set name = #{name},pwd = #{pwd} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id =#{id
</delete>
</mapper>
总结:花时间最长的几个方面
1.关于自己MySQL版本和驱动不一致问题
2.就是mapper与mapper.xml的映射问题,,这个是花了我最长时间的找错过程。
在这个.xml的编写阶段,这里的namespace经常会报红,方案就是在确定了配置文件里面mapper-location是对的情况下,全部单词编写完,能够出现左侧的小鸟就对了。
还有一个就是对于表名的爆红,这个问题在我使用idea也连接上数据库就没问题了。
这里有个小小的注意事项,就是你在填写配置文件的url的时候,将数据库的名字加上,这样子这里就不用写成bootpra.user了。
jdbc:mysql://localhost:3306/bootpra
花了我最长时间的找错过程。
[外链图片转存中…(img-fAegXzf1-1621590067437)]
在这个.xml的编写阶段,这里的namespace经常会报红,方案就是在确定了配置文件里面mapper-location是对的情况下,全部单词编写完,能够出现左侧的小鸟就对了。[外链图片转存中…(img-zRawHjPX-1621590067439)]
还有一个就是对于表名的爆红,这个问题在我使用idea也连接上数据库就没问题了。
这里有个小小的注意事项,就是你在填写配置文件的url的时候,将数据库的名字加上,这样子这里就不用写成bootpra.user了。
jdbc:mysql://localhost:3306/bootpra