本次学习结合了swagger,swagger配置教程看【spring-boot】swagger配置
https://blog.youkuaiyun.com/nangu0673/article/details/82587268
1. 创建子模块zxw-mybatis,添加必要的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--添加lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- mybatis以及mysql依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
2. 在resources文件夹下创建文件application.properties,并在此配置数据源信息
spring.datasource.url=jdbc:mysql://localhost:3306/xxxxx?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username= 数据库名
spring.datasource.password= 数据库密码
spring.datasource.driverClassName=com.mysql.jdbc.Driver
此配置与数据库相对应
3. 为了让mybatis自动生成mapper等文件,需要引入mybatis-generator插件。回到父模块zhangxianwen-test的pom文件中添加插件依赖(在父模块中添加后,所有子模块不用重新写依赖直接使用了)
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose> //打印详细信息
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
添加之后reimport changes加载一下新的依赖,在MavenProjects窗口下即可看到此项目添加成功的依赖以及插件等信息。 ps:若出现红线波浪线并提示unknown,多为没有为此依赖定义版本号。
4. 为了让mybatis-generator插件生效,需为其制定相关配置文件。注意:mybatis-generator插件的功能执行实际上与项目无关,其仅仅作为一个附加功能,以第三方工具的形式为项目配置一些通用文件,提高开发速度,所以其所有的配置均独立(就不要问为啥在另一个地方配置了mysql了这儿还要配置的问题了)
在resources文件目录下新建文件 generatorConfig.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>
<!-- 数据库驱动[需要修改] 添加本地的mysql包-->
<classPathEntry location="C:\Users\zhangxianwen\.m2\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码[需要修改] -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/数据库名" userId="数据库用户名" password="数据库密码">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置[需要修改] 实体类-->
<javaModelGenerator targetPackage="com.tuhu.xwzhang.entity" targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置[需要修改] mapper.xml-->
<sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置[需要修改] mapper.java-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.tuhu.xwzhang.dao" targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名[需要修改]-->
<table tableName="user" domainObjectName="User"/>
</context>
</generatorConfiguration>
配置完成后双击图中显示位置的mybatis-generator插件运行。
成功运行结果如图:
成功运行了就可以看到项目结构中多了三个文件对应在配置的 generatorConfig.xml文件的各个文件夹下:
此时,mybatis基本部署成功,现在编写一个实例对其功能进行测试。
5. 编写接口层,功能为查询user表数据
在包com.tuhu.xwzhang下创建包service,在此包内创建接口(Interface)类MyBatisService
package com.tuhu.xwzhang.service;
import com.tuhu.xwzhang.entity.User;
import java.util.List;
/**
* @author zhangxianwen
* Created 2018/8/18 21:48
*/
public interface MyBatisService {
List<User> query();
}
并创建此接口的实现类MyBatisServiceImpl,实现类使用implements声明一波。按ctrl+O快捷重写接口类的方法,默人返回null,如下:
package com.tuhu.xwzhang.service;
import com.tuhu.xwzhang.entity.User;
import java.util.List;
/**
* @author zhangxianwen
* Created 2018/8/18 21:49
*/
public class MyBatisServiceImpl implements MyBatisService{
@Override
public List<User> query() {
return null;
}
}
然后编写实现代码查询数据,如下
package com.tuhu.xwzhang.service;
import com.tuhu.xwzhang.dao.UserMapper;
import com.tuhu.xwzhang.entity.User;
import com.tuhu.xwzhang.entity.UserExample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author zhangxianwen
* Created 2018/8/18 21:49
*/
/**
* 添加@Service注解
*/
@Service
public class MyBatisServiceImpl implements MyBatisService{
/**emmmmm 类似于初始化UserMapper类*/
@Autowired
private UserMapper userMapper;
@Override
public List<User> query() {
/** 在此项目中mybatis生成的UserMapper.Java文件中的查询语句只有selectByExample方法
* 其需要UserExample参数,所以初始化一个UserExample参数给它
* UserExample具体如何使用请自行学习
*/
UserExample userExample = new UserExample();
return userMapper.selectByExample(userExample);
}
}
6. 编写controller层的MyBatisController类用于调用接口获取数据并返回。在此使用了swagger相关知识,请看笔记【1】springboot+swagger配置了解。
package com.tuhu.xwzhang.controller;
import com.tuhu.xwzhang.entity.User;
import com.tuhu.xwzhang.service.MyBatisService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author zhangxianwen
* Created 2018/8/18 21:42
*/
@RestController
@Api(value = "MyBatis学习")
public class MyBatisController {
@Autowired
private MyBatisService myBatisService;
@PostMapping("/query")
@ApiOperation("查询数据")
@ResponseBody
public List<User> queryUser(){
return myBatisService.query();
}
}
7. controller层实现之后,最重要的一步就是添加启动类了,在com.tuhu.xwzhang下添加启动类MyBatisApplication(就是建立普通类,之后再类头上添加@SpringBootApplication就成为启动类了),如下
package com.tuhu.xwzhang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author zhangxianwen
* Created 2018/8/18 22:10
*/
@SpringBootApplication
public class MyBatisApplication {
public static void main(String[] args) {
SpringApplication.run(MyBatisApplication.class,args);
}
}
8. 接着就可以尝试跑项目了,然后就会收到错误
是因为没有告诉启动类mapper文件在哪儿,所以需要添加mapper扫描的注解@MapperScan("com.tuhu.xwzhang.dao")在启动类头上。
如下:
package com.tuhu.xwzhang;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author zhangxianwen
* Created 2018/8/18 22:10
*/
/**扫描mapper*/
@MapperScan("com.tuhu.xwzhang.dao")
/**swagger启用注解,在swagger中有讲解,在此不重复说明*/
@EnableSwagger2
@SpringBootApplication
public class MyBatisApplication {
public static void main(String[] args) {
SpringApplication.run(MyBatisApplication.class,args);
}
}
then,DO IT!
打开swagger或者直接访问http://localhost:8080/query(这么访问的话需要在controller类中修改 @PostMapping("/query")为 @GetMapping("/query"))即可看到报错信息,哈哈哈!如下所示
这是因为缺少一点mybatis的相关配置,进入resources目录下的application.properties文件,添加内容:
#mapper配置
#com.tuhu.xwzhang.entity对应之前自动生成的数据库对应实体类的包
mybatis.type-aliases-package=com.tuhu.xwzhang.entity
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.cache-enabled=false
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.use-generated-keys=true
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
然后再运行项目吧!!!!(温馨提示:每次重新运行前请先停止当前进程,而不是直接点start或者debug,有时候会报错端口被占用)
接着就是成功的结果展示。
mybatis学习结束!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!现在建议去学习mybatis plus。会场方便,等之后有时间再出入门实例教程。