Springboot整合mybatis
前言
在之前介绍过快速搭建一个Springboot程序,那么这篇就记录下用Springboot整合mybatis的一些小坑坎。
-
在resources下的sql脚本复制。在navicat等sql执行(先创建表)
-
pom.xml加入编译配置(默认只编译resources的xml文件,不配置无法编译dao里的xml,这点和eclipse系列不太一样)
-
src创建对应文件夹。在application.properties中声明dao所在的包和mybatis映射pojo引用的包
-
基于xml/注解两种方式实现mbatis的增删改查。dao的interface要加上@Mapper,注入的话加上@Autuwired,如果基于xml的注意格式关联;
-
对于大部分和普通的都是没有关联的映射,那么pojo对象直接对应数据库的各个字段即可。但是如果遇到一对一,或者一对多的映射,大致的处理方式有两种
1.联表查询,把所有字段都查询出来,然后在自定义的Map中配置各个对象属性。
2. 嵌套查询,先查询1查第一个大对象,在大对象配置到pojo对象的时候再调用查询2(带上查询1查到的参数) -
对于一对一映射和一对多映射。最大的区别就是配置名称了。对于一对一的pojo对象
<association property="POJO对象里面的名称" javaType="com.xxx> </association>
而一对多
<!-- ofType指定students集合中的对象类型 --> <collection property="master" ofType="com.mybatis.user">
-
总的来说,Springboot的主要配置只有两个地方——pom.xml和application.properties(有的是yml).pom.xml主要配置为jar包的管理和编译的一些配置。而application中主要是关于一些属性管理的配置。类似数据库或者一些量数值,在我整合的时候遇到了一下几个坎:
-
其中刚开始一直很坑的地方就是properties的配置问题。主要的问题就是数据库版本问题。我刚开始的配置是8.0.11版本的jar包。我的数据库也是8版本的数据库,但是更改驱动这些改了这个错就出现那个错。后来实在烦就把我的8版本的数据库当成5版本的用,把项目中所有的有关数据库的配置改成5版本的。但是注意的是(在配置数据库不要加到6版本以上的后缀,那么这个版本的driver会识别不了对应参数也会报错。)
- 如果mapper和mapper.xml在一个文件中。(类似myeclipse的ssm)要在pom.xml中声明解析的xml的路径。或者你可以在resource创建一个mapper文件夹写xml和dao进行映射。
- 在搭建完一个基本的Springboot项目中,首先要加入mybatis和mysql的依赖。我的maven为:
<?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.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com</groupId> <artifactId>mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>mybatis</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-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</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> <scope>test</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
</project>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
项目架构为:创建对应的文件夹和文件
pojo
创建dog和user类(配合自己数据库的都行)
package com.mybatis.pojo;
public class dog { private String dogname; private String dogtype; private user master; public String getDogname() { return dogname; } public void setDogname(String dogname) { this.dogname = dogname; } public String getDogtype() { return dogtype; } public void setDogtype(String dogtype) { this.dogtype = dogtype; } public user getMaster() { return master; } public void setMaster(user master) { this.master = master; }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
package com.mybatis.pojo;
import java.util.List;
public class user { private String username; private String password; private List<dog> dogs; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List<dog> getDogs() { return dogs; } public void setDogs(List<dog> dogs) { this.dogs = dogs; }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
dao、mapper(mybatis)
两个mapper:规则和ssm的传统项目差不多
- dogMapper:
package com.mybatis.dao;
import com.mybatis.pojo.dog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface dogMapper { @Select("select * from dog")//不做配置情况找不到master,只能找数据库对应的字段 List<dog>getalldog(); //如果两个以上参数需要加param @Select("select * from dog where dogname=#{name} and dogtype=#{type}") List<dog>getdogbynametype(@Param("name")String dogname,@Param("type")String dogtype); List<dog> getdogbyType(String type);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- dogMapper.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.mybatis.dao.dogMapper" > <resultMap id="dog" type="dog"> <!--<id property="id" column="id"/>如果有id的话 --> <result property="dogname" column="dogname"/><!--property pojo对象中,column 数据库中,此方法也可解决数据库和pojo对象不一致问题 --> <result property="dogtype" column="dogtype"/> <association property="master" javaType="user"> <result property="username" column="username"/> <result property="password" column="password"/> </association> </resultMap> <select id="getdogbyType" resultMap="dog"> select a.dogname,a.dogtype ,b.username,b.password from dog a,user b where a.master_name=b.username and a.dogtype=#{type} </select>
</mapper>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
userMapper.java
package com.mybatis.dao;
import com.mybatis.pojo.user;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface userMapper { @Select("select * from user") List<user> getalluser(); List<user> getalluserwithdog();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
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.mybatis.dao.userMapper" > <select id="getalluserwithdog" resultMap="user1"> select * from user </select> <resultMap id="user1" type="user"> <result property="username" column="username"/><!--property pojo对象中,column 数据库中,此方法也可解决数据库和pojo对象不一致问题 --> <result property="password" column="password"/> <collection property="dogs" ofType="com.mybatis.pojo.dog" column="username" select="getdogbyusername"></collection> </resultMap> <select id="getdogbyusername" resultType="com.mybatis.pojo.dog"> select * from dog where master_name=#{username} </select>
</mapper>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
controller
controller:(restcontroller就可以省掉@Responsebody注解)
- dogController
package com.mybatis.controller;
import com.mybatis.dao.dogMapper;
import com.mybatis.dao.userMapper;
import com.mybatis.pojo.dog;
import com.mybatis.pojo.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class DogController { @Autowired(required = false) private dogMapper dogMapper; @GetMapping("getalldog") public List<dog> getalldog() { return dogMapper.getalldog(); } @GetMapping("getdogbymaster")//不加参数默认为bigsai public List<dog> getalldog(@RequestParam(value = "type",defaultValue = "舔狗")String type) { return dogMapper.getdogbyType(type); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
TestController
package com.mybatis.controller;
import com.mybatis.dao.dogMapper;
import com.mybatis.dao.userMapper;
import com.mybatis.pojo.dog;
import com.mybatis.pojo.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class TestController { @Autowired(required = false) private userMapper userMapper; @Autowired(required = false) private dogMapper dogMapper; @GetMapping("getalluser")//普通情况,假设user只有账户密码。返回的只有账户密码 dog为null public List<user> getalluer() { return userMapper.getalluser(); } @GetMapping("getdogbyType")//一对一映射,一个狗有个主人 返回该type public List<dog>gedogbyType(@RequestParam(value = "type",defaultValue = "舔狗")String type) { return dogMapper.getdogbyType(type); } @GetMapping("getalluserwithdog") public List<user>getalluserwithdog() { return userMapper.getalluserwithdog(); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
还有最重要的就是application.properties的配置:(maven继承了一些插件被我注释掉没有用)
server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/bigsai?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.password=123456
spring.datasource.username=root
mybatis.mapper-locations=classpath:com/mybatis/dao/*.xml
mybatis.type-aliases-package=com.mybatis.pojo
## 骆驼峰 数据库为xx_name pojo为xxName
mybatis.configuration.map-underscore-to-camel-case=true
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
执行main函数启动Springboot。整合完毕!
就这样就整合成功了。?
本文如果有错请指正,配置前看了一些大佬的配置学来的。没有太多技术含量纯属笔记用!
如果对后端、爬虫、数据结构算法
等感性趣欢迎关注我的个人公众号交流:bigsai
文章来源: bigsai.blog.csdn.net,作者:Big sai,版权归原作者所有,如需转载,请联系作者。
原文链接:bigsai.blog.csdn.net/article/details/84894868
- 点赞
- 收藏
- 关注作者
评论(0)