MyBatis-Plus使用入门

2021-06-17  本文已影响0人  文景大大

一、准备工作

1.1 数据库MySQL

下载安装过程略。

1.2 数据库可视化工具DBeaver

下载安装过程略。

1.3 表及数据的准备

1.4 SpringBoot工程下载

start.spring.io上下载一个SpringBoot工程,要求的依赖有web,导入本地IDEA后,创建子项目mybatis和mybatis-plus,分别演示各自功能的使用。

父工程pom需要增加mysql驱动依赖、连接池依赖和Lombok依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.6</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

mybatis子工程的pom还需要增加如下依赖项:

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

mybatis-plus子工程pom还需要增加如下依赖项:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>

1.5 数据源配置

mybatis子项目做如下的配置。

application.properties中加上如下的配置。

# 配置数据源信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://x.x.x.x:3306/zhangxun?characterEncoding=utf-8&&serverTimezone=Asia/Shanghai&&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

# 配置mapper xml的位置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml

# 是否显示执行sql
logging.level.com.xun.mapper=debug

mybatis-plus做如下的配置。

application.properties中加上如下的配置。

# 配置数据源信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://x.x.x.x:3306/zhangxun?characterEncoding=utf-8&&serverTimezone=Asia/Shanghai&&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

# 是否显示执行sql
logging.level.com.xun.mapper=debug

二、MyBatis增删查改案例

2.1 新建实体类

在合适的包下面新建实体类。

@Data
public class User {

    private Long userId;
    private String userName;
    private Integer age;
    private String userEmail;

}

2.2 新建Mapper接口

路径为com.xun.mapper,后续在启动类上设置@MapperScan时需要指定该路径。

@Repository
public interface UserMapper {

    public List<User> listUsers();

    public List<User> getUserById(String userId);

    public Integer addUser(User user);

    public Integer deleteUserById(String userId);

    public Integer updateUserNameById(User user);
}

2.3 新建Mapper.xml

在resources/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.xun.mapper.UserMapper">
    <insert id="addUser" parameterType="com.xun.bean.User">
        insert into zx_user (user_id, user_name, age, user_email)
        values (#{userId}, #{userName}, #{age}, #{userEmail});
    </insert>

    <update id="updateUserNameById" parameterType="com.xun.bean.User">
        update zx_user set user_name = #{userName} where user_id = #{userId}
    </update>

    <delete id="deleteUserById" parameterType="string">
        delete from zx_user where user_id = #{userId}
    </delete>

    <select id="listUsers" resultType="com.xun.bean.User">
        select zu.user_id userId, zu.user_name userName, zu.age age, zu.user_email userEmail from zx_user zu;
    </select>

    <select id="getUserById" resultType="com.xun.bean.User" parameterType="string">
        select zu.user_id userId, zu.user_name userName, zu.age age, zu.user_email userEmail from zx_user zu where
        zu.user_id = #{userId};
    </select>
</mapper>

2.4 新建controller

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @GetMapping("/listUsers")
    public List<User> listUsers(){
        return userMapper.listUsers();
    }

    @GetMapping("/getUserById/{userId}")
    public List<User> getUserById(@PathVariable String userId){
        return userMapper.getUserById(userId);
    }

    @PostMapping("/addUser")
    public Integer addUser(@RequestBody User user){
        return userMapper.addUser(user);
    }

    @DeleteMapping("/deleteUserById/{userId}")
    public Integer deleteUserById(@PathVariable String userId){
        return userMapper.deleteUserById(userId);
    }

    @PutMapping("/updateUserNameById")
    public Integer updateUserNameById(@RequestBody User user){
        return userMapper.updateUserNameById(user);
    }
}

2.4 配置启动

@MapperScan("com.xun.mapper")
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

最后使用postman模拟测试,全部成功。

三、MyBatis-Plus增删查改案例

3.1 新建实体类

在合适的包下面新建实体类,其中@TableName不是必须的,如果不写或者只写该注解不带值,那么默认查询的表名称就是实体类的名称User,如果表名和实体类名不一致,就需要像如下一样绑定表名和实体类名。

@Data
@TableName("zx_user")
public class User {

    private Long userId;
    private String userName;
    private Integer age;
    private String userEmail;

}

默认情况下mybatis-plus会认为实体类字段名称和数据库表字段的名称是对应的,比如userName对应user_name,userId对应user_id,age对应age;如果实体类的字段名称是userNameStr,那么就会去数据库表中找user_name_str字段,所以,如果不存在对应关系的话,就需要增加注解@TableField,通过value属性指定该实体类字段对应的数据库表字段名称,如下所示:

@TableField("user_name")
private String userNameStr;

3.2 新建Mapper接口

路径为com.xun.mapper,后续在启动类上设置@MapperScan时需要指定该路径。

public interface UserMapper extends BaseMapper<User> {
}

其中,Mapper接口需要继承BaseMapper父类,父类中包含了常用的增删查改方法,我们就不用自己再定义了,甚至都不用再写xml文件了。

3.3 新建Controller

3.3.1 查询

3.3.2 新增

@PostMapping("/addUser")
public Integer addUser(@RequestBody User user){
    // INSERT INTO zx_user ( user_id, user_name, age, user_email ) VALUES ( ?, ?, ?, ? )
    return userMapper.insert(user);
}

新增的时候需要注意的是,主键应该如何生成,此时我们的实体类User上面没有指定主键@TableId的规则,默认就是NONE,表示由用户输入。下面对各种主键规则进行介绍:

3.3.3 修改

// 更新操作
@PutMapping("/updateUserNameById")
public Integer updateUserNameById(@RequestBody User user){
    // UPDATE zx_user SET user_name=? WHERE user_id=?
    return userMapper.updateById(user);
}

@PutMapping("/update/{userName}")
public Integer update(@RequestBody User user, @PathVariable String userName){
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("user_name", userName);
    // user参数表示需要更新的内容,wrapper表示匹配记录的条件
    // 即使user参数中有userId,也不会去更新数据库的主键user_id
    // UPDATE zx_user SET user_name=?, age=? WHERE (user_name = ?)
    return userMapper.update(user, queryWrapper);
}

3.3.4 删除

删除操作的方法和查询非常类似,这里就不做详细讲解,直接给出代码示例。

@DeleteMapping("/deleteUserById/{userId}")
public Integer deleteUserById(@PathVariable String userId){
    // DELETE FROM zx_user WHERE user_id=?
    return userMapper.deleteById(userId);
}

@DeleteMapping("/deleteBatchIds/{userIds}")
public Integer deleteBatchIds(@PathVariable String userIds){
    List<String> userIdList = Arrays.asList(userIds.split(","));
    // DELETE FROM zx_user WHERE user_id IN ( ? , ? )
    return userMapper.deleteBatchIds(userIdList);
}

@DeleteMapping("/deleteByMap/{userName}")
public Integer deleteByMap(@PathVariable String userName){
    Map<String,Object> paramMap = new HashMap<>();
    // 还可以输入多个其它查询条件
    paramMap.put("user_name", userName);
    // DELETE FROM zx_user WHERE user_name = ?
    return userMapper.deleteByMap(paramMap);
}

@DeleteMapping("/delete/{userId}")
public Integer delete(@PathVariable String userId){
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("user_id", userId);
    // DELETE FROM zx_user WHERE (user_id = ?)
    return userMapper.delete(queryWrapper);
}

3.4 配置启动

@MapperScan("com.xun.mapper")
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

最后使用postman模拟测试,全部成功。

上一篇 下一篇

猜你喜欢

热点阅读