springboot初探——集成mybatis

1.首先创建一个springboot工程

创建的方式有很多,常见是以下两种

  1. 访问https://start.spring.io/选择相关版本,下载一个空工程
  2. 利用ide带的功能直接创建springboot项目,不管是idea还是eclipse都有相关插件

这里不关注打包方式等,删掉了一些导出时的标签,并不影响本地使用。刚刚创建完的项目,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.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.gy</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.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

注意一下项目名,copy是需要注意改成自己的

2.添加相关依赖

既然使用里springboot构建项目,为了方便配置,肯定要引入mybatis-spring-boot-starter,同时这个starter也会引入spring-boot-starter-jdbc
mybatis是用来操作数据库的,也就是传说中的orm框架,必然少不了mysql-connector-java用来连接数据的包
这时的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.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.gy</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.1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

3.配置文件

这时会发现,启动报错了,如图所示
启动报错截图
但是为啥呢?很明显,这还是因为mybatis-spring-boot-starter在自动配置时,拿不到数据库链接,导致的报错,这时候要把数据库配置加上
application.properties文件里加上如下配置

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

当然,亦可以用yml等其它格式的配置文件,这里是我的个人习惯
然后再加上两行

mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.type-aliases-package=com.gy.mybatis.entity

这是告诉mybatis默认扫描的mapper文件,最终的结果是这样子的

server.port=8090
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.type-aliases-package=com.gy.mybatis.entity

server.port是配置tomcat的端口,这里是为了和本地其他项目区分,可以按自己需要来。

写到这里,mybatis的配置其实已经都写完了,剩下的就是写业务代码了。
以下是写一个user查询
建表语句

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(20) DEFAULT '',
  `name` varchar(20) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 MIN_ROWS=1 AVG_ROW_LENGTH=1 

UserEntity就是一个正常的JavaBean

package com.gy.mybatis.entity;
import java.io.Serializable;

public class UserEntity implements Serializable {
	private static final long serialVersionUID = -355601569296284232L;
	private Integer id;
	private String code;
	private String name;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	[@Override](https://my.oschina.net/u/1162528)
	public String toString() {
		return "UserEntity{" + "id=" + id + ", code='" + code + '\'' + ", name='" + name + '\'' + '}';
	}
}

然后是新建一个UserDao的接口

package com.gy.mybatis.dao;

import com.gy.mybatis.entity.UserEntity;
import org.springframework.stereotype.Repository;

[@Repository](https://my.oschina.net/u/3055569)
public interface UserDao {
	UserEntity queryUserById(Integer id);
}

然后是新建UserMapper.xml,位置就是在application.propertiesmybatis.mapper-locations属性

<?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.gy.mybatis.dao.UserDao">
    <resultMap id="User" type="com.gy.mybatis.entity.UserEntity">
        <result column="id" jdbcType="INTEGER" property="id"/>
        <result column="code" jdbcType="VARCHAR" property="code"/>
        <result column="name" jdbcType="VARCHAR" property="name"/>
    </resultMap>

    <select id="queryUserById" resultMap="User">
        select id,code,name from user where id=#{id}
    </select>
</mapper>

至此一个根据id查询就完成了 再来一个test,这里图方便,就直接写了

package com.gy.mybatis;

import com.gy.mybatis.dao.UserDao;
import com.gy.mybatis.entity.UserEntity;
import com.gy.mybatis.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class MybatisApplicationTests {

	@Autowired
	private UserDao userDao;
	[@Test](https://my.oschina.net/azibug)
	void contextLoads() {
		UserEntity userEntity = userDao.queryUserById(2);
		System.out.println(userEntity);
	}

}

执行结果如下
执行结果

整个目录结构
文件目录

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章