SpringBoot整合Mybatis的Demo

376 阅读3分钟

SpringBoot整合Mybatis

创建一个SpringBoot项目

这里我选择在Idea中的Spring Initializr进行创建,也可以在start.spring.io中配置好,下载下来。

填写好项目名称

勾选依赖,web,JDBC,MyBatis,MySQL

项目创建成功!


创建user表

这里为了简单,我在名为demo的数据库中创建了user表:

并插入三条数据:

idusernameageaddress
1张三22杭州
2李四19北京
3王五33上海

配置文件

打开application.properties文件,做如下配置:

# 端口
server.port=8080

# MySQL配置
spring.datasource.url=jdbc:mysql:///demo?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456

# MyBatis配置
mybatis.mapper-locations=classpath:mapper/*.xml

或者也可以用yml进行配置,效果是一样的,application.yml:

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql:///demo?serverTimezone=Asia/Shanghai
    username: root
    password: 123456

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.korilweb.demo_mybatis.entity

编写User类

新建一个entity文件夹,创建类User.java:

package com.korilweb.demo_mybatis.entity;

public class User {

    public Integer id;
    public String username;
    public Integer age;
    public String address;


    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

编写Mapper的xml文件

resources文件夹下,新建一个文件夹,名为mapper,这里面存放所有的xml文件

mapper文件夹下,新建一个名为user-mapper.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.korilweb.demo_mybatis.dao.UserMapper">

    <select id="selectUserById" resultType="com.korilweb.demo_mybatis.entity.User">
        select id, username, age, address
        from user
        where id = #{id}
    </select>
</mapper>

这里resultType可以简写成User,但是要在application.properties中多配置一项:

mybatis.type-aliases-package=com.korilweb.demo_springcloud.entity

编写dao层

新建一个dao文件夹,创建接口UserMapper.java:

package com.korilweb.demo_mybatis.dao;

import com.korilweb.demo_mybatis.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {

    User selectUserById(int id);
}

这里要在UserMapper上加@Mapper的注解,但是如果每写一个Mapper都要添加一个@Mapper,取代之的方式是在启动类上加@MapperScan的注解,并在括号内表明要扫描的Mapper们所在的包路径:

package com.korilweb.demo_mybatis;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.korilweb.demo_mybatis.dao") // 加了这个注解,就不用每个Mapper都写@Mapper了
public class DemoMybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoMybatisApplication.class, args);
    }

}

编写service层

新建一个service文件夹,创建类UserService.java:

package com.korilweb.demo_mybatis.service;

import com.korilweb.demo_mybatis.dao.UserMapper;
import com.korilweb.demo_mybatis.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User findUserById(int id) {
        return userMapper.selectUserById(id);
    }
}

编写测试

@Autowired
private UserService userService;

@Test
void findUserByIdTest() {
    User userById = userService.findUserById(1);
    System.out.println(userById);
}

测试结果:

User{id=1, username='张三', age=22, address='杭州'}

其它一些简单的功能实现(增删改查)

查找所有用户

先在UserMapper里面添加方法:

List<User> selectAllUsers();

然后,在user-mapper.xml里面写上相应的SQL语句:

<select id="selectAllUsers" resultType="com.korilweb.demo_mybatis.entity.User">
    select id, username, age, address
    from user
</select>

最后,在UserService里面调用UserMapper的方法:

public List<User> findAllUsers() {
    return userMapper.selectAllUsers();
}

测试:

@Test
void findAllUsersTest() {
    List<User> users = userService.findAllUsers();
    for (User user : users) {
        System.out.println(user);
    }
}

测试结果:

User{id=1, username='张三', age=22, address='杭州'}
User{id=2, username='李四', age=19, address='北京'}
User{id=3, username='王五', age=33, address='上海'}

增加一个用户

UserMapper.java:

int insertUser(User user);

user-mapper.xml

<insert id="insertUser" parameterType="com.korilweb.demo_mybatis.entity.User">
    insert into user (username, age, address)
    values (#{username}, #{age}, #{address})
</insert>

UserService.java

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

测试:

@Test
void addUserTest() {
    User user = new User();
    user.setUsername("赵六");
    user.setAge(18);
    user.setAddress("广州");
    int result = userService.addUser(user);
    System.out.println(result);
}

测试结果:

返回1,同时可以在数据库中看到增加了新的user

更新一个用户的信息

UserMapper.java:

int updateUserInfo(User user);

user-mapper.xml:

<update id="updateUserInfo" parameterType="com.korilweb.demo_mybatis.entity.User">
    update user
    set username = #{username}, age = #{age}, address = #{address}
    where id = #{id}
</update>

UserService.java:

public int changeUserInfo(User user) {
    return userMapper.updateUserInfo(user);
}

测试:

@Test
void changeUserInfoTest() {
    User user = new User();
    user.setId(1);
    user.setUsername("张三丰");
    user.setAge(88);
    user.setAddress("福建");
    int result = userService.changeUserInfo(user);
    System.out.println(result);
}

测试结果:

返回1,同时可以在数据库中看到id=1的user信息已经发生了改变

删除一个用户

UserMapper.java:

int deleteUserById(int id);

user-mapper.xml:

<delete id="deleteUserById">
    delete from user
    where id = #{id}
</delete>

UserService.java:

public int deleteUserById(int id) {
    return userMapper.deleteUserById(id);
}

测试:

@Test
void deleteUserByIdTest() {
    int result = userService.deleteUserById(1);
    System.out.println(result);
}

测试结果:

返回1,同时可以看到id=1的数据被删除了


代码

代码已上传至gitee:

gitee.com/ding_jing_h…