- 创建springboot项目, 在pom.xml导入相应的依赖
<dependencies>
<!--springboot框架web项目的启动依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis整合springboot的依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
在这里发现mysql并没有指定版本号, 说明父工程已经指明, 如果想要修改可以在pom文件添加:
<properties>
<java.version>1.8</java.version>
<!--修改父工程mysql驱动的版本号-->
<mysql.version>5.1.49</mysql.version>
</properties>
-
使用Mybatis逆向工程生成bean, mapper接口, 映射文件
- 测试数据库
drop table if exists t_student; create table t_student ( id int(10) not null auto_increment, `name` varchar(20) null, age int(10) null, constraint PK_T_STUDENT primary key clustered (id) ); insert into t_student(`name`, age) VALUES ('zhangsan', 23), ('lisi', 28), ('wangwu', 23), ('Tom', 21), ('Jack', 55), ('Lucy', 27), ('zhaoliu', 75);
- 项目跟,目录下, 创建逆向工程文件
GeneratorMapper.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> <!-- 本地硬盘数据库驱动包 --> <classPathEntry location="D:\2ENVIRONMENT\maven\maven-repo\mysql\mysql-connector-java\5.1.49\mysql-connector-java-5.1.49.jar" /> <context id="Mybatis3Context" targetRuntime="MyBatis3"> <property name="javaFileEncoding" value="UTF-8"/> <commentGenerator> <!-- 去掉生成日期那行注释 --> <property name="suppressDate" value="true"/> <!-- 是否去除自动生成所有的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- 数据库连接信息:驱动类 ,连接地址,用户名,密码--> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.56.101:3306/spingboottest?serverTimezone=UTC" userId="root" password="123456"> </jdbcConnection> <!-- 默认值 --> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 生成的实体类的存放位置 --> <javaModelGenerator targetPackage="cn.atfaith.pojo" targetProject="src/main/java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="true"/> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成的Mapper映射文件(XML)的存放位置--> <sqlMapGenerator targetPackage="cn.atfaith.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- 生成的mapper接口(JAVA文件)的存放位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="cn.atfaith.mapper" targetProject="src/main/java"> <property name="enableSubPackages" value="false"/> </javaClientGenerator> <!-- 指定数据库表 --> <table tableName="t_student" domainObjectName="Student" enableCountByExample="false" enableDeleteByExample="false" enableUpdateByExample="false" enableSelectByExample="false"> </table> </context> </generatorConfiguration>
- 指定mysql驱动的位置
<!-- 本地硬盘数据库驱动包 --> <classPathEntry location="mysql驱动的位置" />
- 运行逆向工程插件
结果: 运行后mapper接口默认生成6个方法
int deleteByPrimaryKey(Integer id);
int insert(Student record);
int insertSelective(Student record);
Student selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Student record);
int updateByPrimaryKey(Student record);
- 创建Controller类进行测试
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping("/student/{id}")
public Student queryStudentById(@PathVariable Integer id) {
return studentService.queryStudentById(id);
}
}
- 创建service接口和实现类
// StudentService接口
public interface StudentService {
Student queryStudentById(Integer id);
}
//实现类
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public Student queryStudentById(Integer id) {
return studentMapper.selectByPrimaryKey(id);
}
}
-
把mapper接口类交给容器
- 在各个mapper接口上添加
@Mapper
注解
import org.apache.ibatis.annotations.Mapper; //扫描DAO接口到spring容器 @Mapper public interface StudentMapper { int deleteByPrimaryKey(Integer id); int insert(Student record); ...
- 在启动类上添加注解
@MapperScan
, 扫描mapper包
@SpringBootApplication //开启spring配置 @MapperScan(basePackages = "cn.atfaith.mapper") //开启扫描Mapper接口的包以及子目录 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
- 在各个mapper接口上添加
-
在
application.properties
中配置数据库的信息
#设置连接数据库的配置
# mysqlt5.x
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.56.101:3306/spingboottest?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
# mysql8.x
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# mysql8.x中url需要配置时区
spring.datasource.url=jdbc:mysql://192.168.56.101:3306/spingboottest?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
-
因为maven只会编译
src/main/java
下.java文件, xxxMapper.xml不会被编译
解决1: 在pom文件添加<build> <!--手动指定资源文件夹为resources--> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
解决2: 把
mapper
包下的xxxMapper.xml转移到resources/mapper文件夹下
并在application.properties下指定xxxMapper.xml所在目录# 指定MyByBatis映射文件的路径 mybatis.mapper-locations=classpath:mapper/*.xml
关于Mapper映射文件存放的位置的写法有以下两种:
1.将Mapper接口和Mapper映射文件存放到src/main/java同一目录下,还需要在pom文件中手动指定资源文件夹路径resources2.将Mapper接口和Mapper映射文件分开存放
- Mapper接口类存放到src/main/java目录下
- Mapper映射文件存放到resources(类路径)
- 在springboot核心配置文件中指定mapper映射文件存放到位置