前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java之springboot整合mybatis

java之springboot整合mybatis

作者头像
码农王同学
发布2019-11-14 17:56:35
4420
发布2019-11-14 17:56:35
举报
文章被收录于专栏:后端Coder

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

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

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

首先,我们的pom文件的内容如下

代码语言:javascript
复制
<?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配置文件里面进行配置。

代码语言:javascript
复制
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接口提供的方法进行查询数据库的数据,由于本篇文章只是写了一下查询的用法,不涉及到其它的操作,因为在我看来,你会了查询就会了其它的操作。

代码语言:javascript
复制
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();
    }
}

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

代码语言:javascript
复制
package com.wpw.mybatissqlsession;

import java.util.List;

public interface UserService {
    /**
     * 返回集合的数据
     * @return  返回查询到的集合数据
     */
    List<User> findAll();
    /**
     * 返回集合的数据
     * @return  返回查询到的集合数据
     */
    List<User> findAllUser();
}

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

代码语言:javascript
复制
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这个接口。

代码语言:javascript
复制
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文件。

代码语言:javascript
复制
<?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服务器配置里面进行相应的配置,不然会容易出现错误。也就是下面这段配置信息。

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

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

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

代码语言:javascript
复制
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 + '\'' +
                '}';
    }
}

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

代码语言:javascript
复制
create table user(
    -> id int(11),
    -> name varchar(32),
    -> age int(3))engine=InnoDB;

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

代码语言:javascript
复制
http://localhost:8080/findAllUser

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档