SpringBoot整合Mybatis(注解+xml)

SpringBoot整合Mybatis(注解+xml)


官方文档:

https://mybatis.org/mybatis-3/zh/getting-started.html

建议简单sql用注解,复杂sql用xml

SpringBoot整合Mybatis(注解开发 )

引入maven依赖

(IDEA建项目的时候直接选就可以了)

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.4</version>
</dependency>

配置application.yml文件

server:
  port: 8144
spring:
  #redis
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123456
    timeout: 3000
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/hellomybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

建实体类、Controller类、Service类

  • 实体类
package com.example.mybatisDemo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    
    
    private long id;
    private String name;
    private String pwd;
}
  • Controller类
package com.example.mybatisDemo.controller;

import com.example.mybatisDemo.entity.User;
import com.example.mybatisDemo.service.UserService;
import org.springframework.web.bind.annotation.*;

import java.util.*;


@RestController
@RequestMapping("api/user")
public class UserController {
    
    
    private final UserService userService;

    public UserController(UserService userService) {
    
    
        this.userService = userService;
    }

    @GetMapping()
    public List<User> getAllUsers(){
    
    
        return userService.getUsers();
    }

    @DeleteMapping("{id}")
    public int deleteUser(@PathVariable long id){
    
    
        return userService.deleteUser(id);
    }

    @PostMapping
    public int saveUser(@RequestBody User user){
    
    
        return userService.insertUser(user);
    }

    @PutMapping
    public int updateUser(@RequestBody User user){
    
    
        return userService.updateUser(user);
    }

    @GetMapping("{id}")
    public User getUser(@PathVariable long id){
    
    
        return userService.getUser(id);
    }
}
  • Service类

Service层最好还是定义一个接口然后实现不同的实现类,这里偷个懒就直接写一个实现类了

package com.example.mybatisDemo.service;

import com.example.mybatisDemo.entity.User;
import com.example.mybatisDemo.repository.UserRepository;
import org.springframework.stereotype.Service;
import java.util.*;


@Service
public class UserService {
    
    
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
    
    
        this.userRepository = userRepository;
    }

    public List<User> getUsers(){
    
    
        return userRepository.getUsers();
    }

    public int deleteUser(long id){
    
    
        return userRepository.deleteUser(id);
    }

    public User getUser(long id){
    
    
        return userRepository.getUser(id);
    }

    public int updateUser(User user){
    
    
        return userRepository.updateUser(user);
    }

    public int insertUser(User user){
    
    
        return userRepository.addUser(user);
    }
}

建Repository类

package com.example.mybatisDemo.repository;

import com.example.mybatisDemo.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;

import java.util.*;

/**
 * Mapper注解能省去以前复杂的xml配置,直接用注解写sql语句
 * 不添加Repository注解依赖注入会报错(不影响运行),强迫症还是加上吧
 */
@Mapper
@Repository
public interface UserRepository {
    
    
    @Select("select * from user")
    List<User> getUsers();

    @Delete("delete from user where id = #{id}")
    int deleteUser(long id);

    @Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
    int addUser(User user);

    @Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
    int updateUser(User user);

    @Select("select * from user where id = #{id}")
    User getUser(long id);
}
  • 然后直接调用即可

注解实现批量插入

  • 在Repository类中加入如下方法
/**
 * 批量插入
 * @param users
 * @return
 * @author Breeze
 * @Description collection对应的是传入的参数名,要跟@Param注解规定的参数名对应上,item是集合中每个成员变量的名字,这里实际是使用了mybatis的动态sql特性
 */
@Insert({
    
    
        "<script>","insert into user(id,name,pwd)",
        "values <foreach collection='users' item='user' index='index' separator=','>",
        "(#{user.id},#{user.name},#{user.pwd})",
        "</foreach>","</script>"
})
int addUsers(@Param("users")List<User> users);
  • 更新和插入同理,方法直接调用即可

SpringBoot整合Mybatis(xml开发 )

  • Controller层和Service层不变,实体类也同上

配置文件中添加mybatis相应配置

server:
  port: 8144
spring:
  #redis
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123456
    timeout: 3000
  datasource:
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/hellomybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

## springboot整合mybatis
mybatis:
  mapper-locations: classpath:mapper/*.xml  #注意:一定要对应mapper映射xml文件的所在路径
  type-aliases-package: com.example.mybatisDemo.entity

  • 这里的配置是用来绑定写sql语句用的xml文件的,下面的type-aliases-package绑定的是需要用到的实体类的路径名,这样xml里只要写实体类类名就可以了。这里改成自己的即可。

在Repository文件夹中添加UserMapper接口文件

package com.example.mybatisDemo.repository;

import com.example.mybatisDemo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Package: com.example.mybatisDemo.repository
 * @Class: Usermapper
 * @Author: Breeze
 * @Date: 2020/12/1 11:45
 */
@Mapper
@Repository
public interface UserMapper {
    
    
    List<User> queryUserList();

    User selectUserById(int id);

    int addUser(User user);

    int updateUser(User user);

    int deleteUser(int id);
}

在Resources文件夹下新建一个专门放×××Mapper.xml文件的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.example.mybatisDemo.repository.UserMapper">
    <select id="queryUserList" resultType="User">
        select * from user
    </select>

    <select id="selectUserById" resultType="User">
        select * from user where id = #{id}
    </select>

    <insert id="addUser" parameterType="User">
        insert into user(id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>

    <update id="updateUser" parameterType="User">
        update user set name=#{name},pwd=#{pwd} where id = #{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>
    <select id="selectUserBy" parameterType="User">
        select * from user where
    </select>
</mapper>
  • namespace绑定的是这个xml文件所匹配的mapper类

创建MyBatis核心配置文件(选)

  • 在resources文件夹下创建mybatis-config.xml文件(文件名可自定义)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--MyBatis核心配置文件-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${spring.datasource.driver-class-name}"/>
                <property name="url" value="${spring.datasource.url}"/>
                <property name="username" value="${spring.datasource.username}"/>
                <property name="password" value="${spring.datasource.password}"/>
            </dataSource>
        </environment>
    </environments>
</configuration>
  • 一般比较简单的需求在没有核心配置文件的情况下也是可以实现的,创建这个文件的目的是进行更定制化的配置以便满足更复杂的需求,具体见官方文档

如图是现在的文件结构

在这里插入图片描述

  • 到这一步xml开发和注解开发的配置就都完成了,Service层调用Dao层的代码相应进行调整即可。

注解开发和xml开发的区别只局限于Repository层(Dao层),往上的Controller层和Service层都是通用的。

猜你喜欢

转载自blog.csdn.net/qq_42026590/article/details/110114858