背景:
由于学校的一个项目需要我用后台搭建一个服务器实现对数据库的操作以及满足前端的各种数据请求,于是我采用本学期刚学的springboot结合hibernate搭建了一个服务器,随着要求的逐渐复杂化,我发现hibernate并不能很好的满足我的要求(可能是我没有学的太精),虽然说hibernate对单表操作简单的令人发指,但是对于多表操作却显得有些困难,于是我就决定用mybatis框架,毕竟原生的sql语句能满足我们一切对数据库的需求,在这几天的学习过程中踩了许多的坑,希望自己的一些心得能够帮到大家,同时更是对自己的学习的一个记录。
环境和工具以及使用的框架:
idea、mysql数据库8+、springboot、mybatis、mybatis-generator
1、新建一个springboot工程(很简单不会的自行百度)
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.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wxh</groupId>
<artifactId>newelderservice</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>NewElderService</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--Spring Boot的核心启动器,包含了自动配置、日志和yaml-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--构建Web,包含RESTful风格框架SpringMVC和默认的嵌入式容器Tomcat,
就是这个包整合了Spring mvc,同时自带嵌入式tomcat
意味着我们启动项目时就只要运行main方法就行,
不用再跑eclipse上自带的tomcat了-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--<scope>runtime</scope> 加上该注解表示只有在运行时才不会报错-->
<!--<optional>true</optional>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mysql连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--jdbc数据库驱动-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mybatis框架驱动-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--自动生成代码驱动-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<!--热加载驱动-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!--JSON格式转化器-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
注意:导入依赖的时候mybatis的框架版本和mybatis-generator版本有一定的要求,我这里分别用的是1.3.1和1.3.5是不会产生冲突的,别忘了添加数据库驱动,其他的根据自己的项目需求来自行添加
2、利用mybatis-generator自动生成代码
mybatis框架需要我们配置大量的xml文件,但是利用这个工具我们可以自动生成xml配置,其实就是mybatis逆向工程的建立,可以大大缩减了我们的代码量,但是有些坑需要我们注意的。
如果对这个东西不了解的,首先建议去官网上查看文档,其次再去查资料,但对我而言我主要是看的视频,我这里建议去b站上看尚硅谷_mybatis的教程,如果有兴趣可以看完,我这里直接是跳到了逆向工程建立的那一章节。
需要建立一个mbg.xml mbg及(mybatis-generator的缩写)后期我们需要根据这个xml文件来自动生成mybatis的xml代码,关于这个配置里面的很多标签的意思我只是讲了一个大概,如果需要详细了解请查阅其他资料
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<!--是否带注释-->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--配置数据库连接-->
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT"
userId="root"
password="123456">
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--指定javaBean生成的位置-->
<javaModelGenerator targetPackage="com.wxh.model"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--指定sql映射文件生成的位置-->
<sqlMapGenerator targetPackage="com.wxh.dao" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--指定dao接口生成的位置,mapper接口-->
<javaClientGenerator
type="XMLMAPPER"
targetPackage="com.wxh.dao"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--指定每个表的生成策略,需要逆向分析哪些表-->
<table tableName="event" domainObjectName="Event"/>
<table tableName="mission" domainObjectName="Mission"/>
<table tableName="role" domainObjectName="Role"/>
<table tableName="service" domainObjectName="Service"/>
<table tableName="user_applicant" domainObjectName="UApplicant"/>
<table tableName="user_system" domainObjectName="USystem"/>
<table tableName="user_volunteer" domainObjectName="UVolunteer"/>
<table tableName="missionview" domainObjectName="MissionView"/>
</context>
</generatorConfiguration>
3、采用java代码的方式来自动生成配置文件(一共有四种方式生成配置文件)
我这里是采用了一个测试类来写的方法
@Test
void contextLoads() throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("mbg.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
启动这个测试类既可以根据xml文件里的配置来生成相应的model实体、dao接口和mapper.xml文件
model包(根据你数据库表生成的相应实体)
dao包
mapper映射文件
特别注意
这里dao接口的路径和mapper文件的路径最好是设成同一个路径,我这里都是com.wxh.dao,否则无法启动项目
4、springboot注解的配置
首先需要我们在项目的入口处添加一个@MapperScan(“放的是dao接口路径”)
5、最后就是我的application.properties文件
主要是设置数据库的连接,根据自己的实际项目来配置
以上基本上就是我的整个过程了,我按照这个过程来配置的项目是可以运行的,如果大家有什么更好的意见或者我的一些错误都可以写评论,我看到都会回的。