SpringBoot集成Mybatis实现xml和注解两种方式查询(一)

193 阅读3分钟

前言:本文章主要内容为Springboot集成Mybatis,实现Mybatis用xml和注解两种方式查询数据

一、搭建SpringBoot框架

1、用IDEA的Spring Initializr创建SpringBoot项目 图片.png 2、创建完成的pom文件 图片.png

二、配置Mybatis

整个项目结构图

图片.png

1、创建实体类

package com.jian.myspringboot.demo.model;

import lombok.Data;

/**
 * @program: mySpringBoot
 * @description: 用户信息
 * @author: xiaoQian
 * @create: 2021-11-22 20:11
 **/
@Data
public class UserInfo {
    private int id;
    private String userName;
    private String passWord;
}

2、创建Mapper接口

package com.jian.myspringboot.demo.dao;

import com.jian.myspringboot.demo.model.UserInfo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UserInfoMapper {

    /**
     * 按照id查询用户
     * @param id
     * @return
     */
    @Select("select * from user_info where id= #{id}")
    UserInfo queryUserById(@Param("id") Integer id);

    /**
     * 查询所有用户
     * @return
     */
    List<UserInfo> queryAllUser();
}

3、配置扫包(扫描Mapper文件),在启动类上面加上@MapperScan注解

图片.png 4、创建mapperXML文件

<?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.jian.myspringboot.demo.dao.UserInfoMapper">
    <select id="queryAllUser" resultType="UserInfo">
        select
            *
        from
            user_info
    </select>

</mapper>

5、在application.properties文件中加入数据库连接、服务器端口和Mybatis配置

######################### 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3307/myspringboot?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&failOverReadOnly=false
spring.datasource.username=root
#spring.datasource.password=123456
spring.datasource.password=wiztek2020.
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

########################### 服务器配置
# 端口号
server.port=8081

######################## mybatis
# 扫描mapper的xml文件(如果mapper文件夹下没有文件夹那就写classpath:mapper/*.xml)
mybatis.mapper-locations=classpath:mapper/**/*.xml
# 扫描pojo实体类(主要是xml的mapper文件使用,可以不写pojo类全限定名,只写类名)
# 如果不写这个在mapperXML文件中的resultType(返回结果类型)
mybatis.type-aliases-package=com.jian.myspringboot.*.model
# sql日志打印
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 下划线转驼峰
mybatis.configuration.map-underscore-to-camel-case=true

6、创建service接口和实现

package com.jian.myspringboot.demo.service;

import com.jian.myspringboot.demo.model.UserInfo;

import java.util.List;

public interface IUserinfoService {

    /**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    UserInfo queryUserById(Integer id);

    /**
     * 查询所有用户
     * @return
     */
    List<UserInfo> queryAllUser();
}
package com.jian.myspringboot.demo.service.impl;

import com.jian.myspringboot.demo.dao.UserInfoMapper;
import com.jian.myspringboot.demo.model.UserInfo;
import com.jian.myspringboot.demo.service.IUserinfoService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @program: mySpringBoot
 * @description: 业主信息Service
 * @author: xiaoQian
 * @create: 2021-11-22 20:39
 **/
@Service
public class UserInfoService implements IUserinfoService {

    @Resource
    private UserInfoMapper userInfoMapper;

    @Override
    public UserInfo queryUserById(Integer id) {
        return userInfoMapper.queryUserById(id);
    }

    @Override
    public List<UserInfo> queryAllUser() {
        return userInfoMapper.queryAllUser();
    }
}

7、创建controller

package com.jian.myspringboot.demo.controller;

import com.jian.myspringboot.demo.model.UserInfo;
import com.jian.myspringboot.demo.service.IUserinfoService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * @program: mySpringBoot
 * @description: 用户controller
 * @author: xiaoQian
 * @create: 2021-11-22 20:08
 **/
@RestController
@RequestMapping("/user")
public class UserInfoController {

    @Resource
    private IUserinfoService userinfoService;

    /**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    @PostMapping("/queryUserById")
    public UserInfo queryUserById(Integer id){
        return userinfoService.queryUserById(id);
    }


    /**
     * 查询所有用户信息
     * @return
     */
    @PostMapping("/queryAllUser")
    public List<UserInfo> queryAllUser(){
        return userinfoService.queryAllUser();
    }
}

8、创建数据库

建表语句:

CREATE TABLE user_info ( id int(32) NOT NULL AUTO_INCREMENT, user_name varchar(255) DEFAULT NULL, PRIMARY KEY (id) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

数据:

INSERT INTO user_info VALUES (1, 'aa'); INSERT INTO user_info VALUES (2, 'bb');

三、测试

1、根据id查询接口

接口调用图片 图片.png sql日志打印图

图片.png

2、查询所有用户接口

接口调用图片

图片.png sql日志打印图

图片.png

四、总结

1、这次集成Mybatis用了两种查询方式

第一种:用的XML查询的方式,一个mapper接口搭配一个mapperXML文件实现数据库的操作。这种方式就要在application.properties文件里面写上mybatis.mapper-locations(扫描mapperXML文件)和mybatis.type-aliases-package(扫描pojo类,让xml的resultType(返回结果)不用写全限定名)这两个配置

第二种:注解方式查询,这种方式不用写mapperXML,所以在application.properties文件就用不着mybatis.mapper-locations(扫描mapperXML文件)和mybatis.type-aliases-package(扫描pojo类,让xml的resultType(返回结果)不用写全限定名)这两个配置

queryAllUser接口用的是xml查询的方式,queryUserById用的是注解的查询方式,详情可以看代码,后续会补充单表增删改、多表联合查询,多条件查询