java之springboot整合mybatis

  • 2019 年 11 月 14 日
  • 筆記

今天我们来分享一下操作数据库常用的ORM框架-mybatis,其实整理这篇文章是自己想写点内容进来,因为原来写的程序代码都放在了gitHub上面,自己之前写的文章大部分都是java的一些内容,没有涉及到框架的内容。

这样自己觉得可以帮助需要的人尽快入门一些框架基础吧。希望可以对需要的人有所帮助,避免找了好长时间是跑不起来的示例程序,费时费力不说,心情估计也是会受到一些影响,所以这篇文章就出现了。

首先自己使用的工具是idea,java版本是1.8的。好了我们开始我们的教程吧。首先你要会在idea上面建立一个web项目,不会的可以看下这篇文章java之JdbcTemplate入门教程,这篇文章可以帮你快速建立一个可以跑起来的web项目,希望可以帮助到你,接下来我们看下示例程序了。

首先,我们的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.1.RELEASE</version>          <relativePath/> <!-- lookup parent from repository -->      </parent>      <groupId>com.wpw</groupId>      <artifactId>mybatis-sqlsession</artifactId>      <version>0.0.1-SNAPSHOT</version>      <name>mybatis-sqlsession</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-data-jdbc</artifactId>          </dependency>          <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.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>              <exclusions>                  <exclusion>                      <groupId>org.junit.vintage</groupId>                      <artifactId>junit-vintage-engine</artifactId>                  </exclusion>              </exclusions>          </dependency>          <dependency>              <groupId>org.projectlombok</groupId>              <artifactId>lombok</artifactId>              <version>1.18.8</version>          </dependency>      </dependencies>        <build>          <plugins>              <plugin>                  <groupId>org.springframework.boot</groupId>                  <artifactId>spring-boot-maven-plugin</artifactId>              </plugin>          </plugins>      </build>    </project>

其实pom文件里面配置的都是我们环境需要依赖的jar包,这样我们的项目配置信息就配置好了一部分,接下来,我们需要配置一下连接mysql环境信息的配置。

在application.properties配置文件里面进行配置。

server.port=8080  spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver  spring.datasource.url=jdbc:mysql://自己mysql服务器ip地址:3306/mybatis?characterEncoding=utf-8&useSSL=false  spring.datasource.username=root  spring.datasource.password=123456  ##mybatis配置信息  mybatis.mapper-locations=classpath:mapper/*.xml  mybatis.type-aliases-package=com.wpw.mybatissqlsession  mybatis.configuration.map-underscore-to-camel-case=true

好了,环境信息大致上就是这些,接下来我们就开始提供我们的示例程序。

首先,一般web项目的请求流程就是controller接口层,service业务逻辑层,dao数据库层。

我们看下我们的controller层写的代码吧,主要是调用UserService接口提供的方法进行查询数据库的数据,由于本篇文章只是写了一下查询的用法,不涉及到其它的操作,因为在我看来,你会了查询就会了其它的操作。

package com.wpw.mybatissqlsession;    import org.apache.ibatis.session.SqlSession;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.util.CollectionUtils;  import org.springframework.web.bind.annotation.GetMapping;  import org.springframework.web.bind.annotation.RestController;    import java.util.List;    /**   * @author 微信公众号~后端Coder   */  @RestController  public class UserController {      private final UserService userService;      private final SqlSession sqlSession;      @Autowired      public UserController(UserService userService, SqlSession sqlSession) {          this.userService = userService;          this.sqlSession = sqlSession;      }        /**       * 获取集合数据User信息       *       * @return 返回集合User数据       */      @GetMapping(value = "/findAll")      public List<User> findAll() {          UserMapper userMapper = sqlSession.getMapper(UserMapper.class);          List<User> userList = userMapper.findAll();          if (!CollectionUtils.isEmpty(userList)){              for (User user:userList) {                  System.out.println(user);              }          }          return userService.findAll();      }      @GetMapping(value = "/findAllUser")      public List<User> findAllUser() {            return userService.findAllUser();      }  }  

然后我们继续看下我们的业务逻辑层接口提供的方法。

package com.wpw.mybatissqlsession;    import java.util.List;    public interface UserService {      /**       * 返回集合的数据       * @return  返回查询到的集合数据       */      List<User> findAll();      /**       * 返回集合的数据       * @return  返回查询到的集合数据       */      List<User> findAllUser();  }

一般我们定义一个接口都会使用一个实现类去实现这个接口,这样解耦合就非常明确了,希望这句话可以帮助到你。

package com.wpw.mybatissqlsession;    import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Service;    import javax.annotation.Resource;  import java.util.List;    @Service  public class UserServiceImpl implements UserService{      @Resource      @Autowired      private   UserMapper userMapper;        public UserServiceImpl(UserMapper userMapper) {          this.userMapper = userMapper;      }        @Override      public List<User> findAll() {          return userMapper.findAll();      }        @Override      public List<User> findAllUser() {          return  userMapper.findAllUser();      }    }

上面的业务逻辑层基本上就结束了,接下来我们看下操作数据库数据的dao层,也就是UserMapper这个接口。

package com.wpw.mybatissqlsession;    import org.apache.ibatis.annotations.Mapper;  import org.apache.ibatis.annotations.Result;  import org.apache.ibatis.annotations.Results;  import org.apache.ibatis.annotations.Select;  import org.springframework.stereotype.Component;  import org.springframework.stereotype.Repository;    import java.util.List;    /**   * @author pc   */  @Component  @Repository  @Mapper  public interface UserMapper {      /**       * 返回集合数据       *       * @return 返回集合User数据       */        List<User> findAll();        @Select(value = "select * from user ")      @Results({              @Result(column = "id", property = "id"),              @Result(column = "username", property = "username"),              @Result(column = "password", property = "password")      })      List<User> findAllUser();  }

上面两个方法都是查询user表数据的内容,一个是基于注解的方式实现的,一个基于xml方式操作的,其实这两种方式是大部分企业常用的,但是自己喜欢注解这种方式,所以自己写了注解的方式提供给需要的人。

我们的UserMapper.xml放在的位置是在resoureces下面的,在resources文件下下面我们定义mapper文件夹,在mapper文件夹下面我们定义一个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.wpw.mybatissqlsession.UserMapper">      <select id="findAll" resultType="com.wpw.mybatissqlsession.User">           select * from user;      </select>  </mapper>

注意一点,我们定义的UserMapper.xml文件的名字要和上面的UserMapper接口的名字保持一致,这是需要注意的点。

UserMapper.xml文件的位置放置其实是随意的,但是你需要在上面连接mysql服务器配置里面进行相应的配置,不然会容易出现错误。也就是下面这段配置信息。

##mybatis配置信息  mybatis.mapper-locations=classpath:mapper/*.xml  mybatis.type-aliases-package=com.wpw.mybatissqlsession  mybatis.configuration.map-underscore-to-camel-case=true

上面的classpath路径值得就是resources文件下下的路径,这个需要注意。

好了,上面的内容就配置好了,到这还没结束,还有一个实体类定义,一个表结构信息。

package com.wpw.mybatissqlsession;    public class User {      private Long id;      private String username;      private String password;        public Long getId() {          return id;      }        public void setId(Long id) {          this.id = id;      }        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;      }        @Override      public String toString() {          return "User{" +                  "id=" + id +                  ", username='" + username + ''' +                  ", password='" + password + ''' +                  '}';      }  }

上面的是实体类的定义,下面的是需要的表结构定义语句。

create table user(      -> id int(11),      -> name varchar(32),      -> age int(3))engine=InnoDB;

到这里我们整个mybatis的流程就结束了,看下我们如何访问的接口的。

http://localhost:8080/findAllUser    http://localhost:8080/findAll  注意一点,你需要在自己的数据库表里面进行查询数据

今天分享的内容就到这里结束了,上面的代码配置好,就可以运行了。