教你手把手使用 MyBatis 框架

目录

MyBatis 是什么?

配置 MyBatis 开发环境

方法一:创建项目时添加依赖

方法二:创建项目后添加依赖

配置连接字符串

配置 MyBatis 中的 XML 路径

业务代码

添加实体类

添加 Service

添加 Controller

增加,删除和修改操作

增加用户操作

修改用户操作

删除用户操作

参数占位符 #{} 和 ${}

like 查询(模糊匹配)

多表查询

下期我们继续了解更多关于mybatis框架的知识,喜欢就关注我吧~


MyBatis 是什么?

MyBatis 是一款款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 

一句话概括就是 MyBatis 是更简单完成程序和数据库交互的工具

配置 MyBatis 开发环境

方法一:创建项目时添加依赖

首先我们创建一个新项目,如下图所示:

 然后点击next

最后我们就创建好了一个项目

如果创建好了一个项目想添加mybatis依赖怎么办?

别急,我们还有planB

方法二:创建项目后添加依赖

 我们先在插件(settings)里面下载 EditStarters,如下图所示:

EditStarters 插件的使法: 

点击蓝色框框: 

 搜索“MyBatis”添加即可:

配置连接字符串

在 application.yml 添加如下内容:

# 数据库连接配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

配置 MyBatis 中的 XML 路径

MyBatis 的 XML 中保存是查询数据库的具体操作 SQL,配置如下:

# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml

把这段代码放在配置连接字符串的下面

业务代码

添加实体类

先添加用户的实体类:

import lombok.Data;
import java.util.Date;
@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String photo;
    private Date createTime;
    private Date updateTime;
}

添加 mapper 接口:

import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
    public List<User> getAll();
}

添加 UserMapper.xml:

在这里建一个包,再创建一个xml文件:

数据持久成的实现,mybatis 的固定 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.mybatisdemo1.mapper.UserMapper">
    
</mapper>

在xml文件里面添加sql语句

<?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.mybatisdemo1.mapper.UserMapper">
    <select id="getAll" resultType="com.example.mybatisdemo1.entity.User">
        select * from userinfo
    </select>
</mapper>

mapper 标签:需要指定 namespace 属性,表示命名空间,值为 mapper 接口的全限定名,包括全包名.类名。

查询标签:是用来执行数据库的查询操作的

id:是和 Interface(接口)中定义的方法名称⼀样的,表示对接口的具体实现方法。

resultType:是返回的数据类型,也就是开头我们定义的实体类。

添加 Service

服务层实现代码如下:

import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserService {
       @Resource
       private UserMapper userMapper;
       public List<User> getAll() {
              return userMapper.getAll();
       }
}

添加 Controller

控制器层的实现代码如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/u")
public class UserController {
    @Resource
    private UserService userService;
    @RequestMapping("/getall")
    public List<User> getAll(){
        return userService.getAll();
    }
}

以上代码写完,整个 MyBatis 的查询功能就实现完了,接下来使用 postman 来测试⼀下

增加,删除和修改操作

下面我们来实现⼀下用户的增加、删除和修改的操作,对应使用 MyBatis 的标签如下:

<insert>标签:插入语句

<update>标签:修改语句

<delete>标签:删除语句

增加用户操作

controller 实现代码:

@RequestMapping(value = "/add",method = RequestMethod.POST)
    public Integer add(@RequestBody User user){
        return userService.getAdd(user);
    }

在mapper接口里面增加一个抽象方法:

Integer add(User user);

在mapper.xml里面增加增加sql语句

<insert id="add">
 insert into userinfo(username,password,photo,state)
 values(#{username},#{password},#{photo},1)
</insert>

在postman中添加一个json格式的数据:

默认情况下返回的是受影响的行数 

特殊的添加:返回自增 id

controller 实现代码:

@RequestMapping(value = "/add2", method = RequestMethod.POST)
    public Integer add2(@RequestBody User user) {
        userService.getAdd2(user);
        return user.getId();
    }

在usermapper里面增加add2()方法:

Integer add2(User user);

mapper.xml 实现如下sql语句:

<!-- 返回⾃增id -->
    <insert id="add2" useGeneratedKeys="true" keyProperty="id">
        insert into userinfo(username,password,photo,state)
        values(#{username},#{password},#{photo},1)
    </insert>

useGeneratedKeys:这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键,默认值为false

keyColumn:设置生成键值在表中的列名

keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。如果生成列不止⼀个,可以用逗号分隔多个属性名称

使用 postman 返回结果:

修改用户操作

controller添加修改密码方法: 

@RequestMapping("/updatePassword")
    public int update(Integer id, String password, String newPassword) {
        return userService.updatePassword(id,password,newPassword);
    }

在usermapper接口里面定义一个update方法:

Integer updatePassword(Integer id, String password,String newPassword);

服务端service代码:

public Integer updatePassword(Integer id, String password, String newPassword){
              return userMapper.updatePassword(id,password,newPassword);
       }

mapper.xml 实现代码(只有原来密码正确和id正确才能修改密码):

<update id="updatePassword" >
        update userinfo set password=#{newPassword} where id=#{id} and password=#{password}
    </update>

用postman进行测试:

 

 注意:返回1代表受影响的行数为1

删除用户操作

controller添加删除方法:

@RequestMapping("/delete")
    public Integer delById(Integer id){
        return userService.delById(id);
    }

 在usermapper接口里面定义一个update方法:

Integer delById(Integer id);

服务端service代码:

public Integer delById(Integer id){
              return userMapper.delById(id);
       }

 mapper.xml 实现代码:

<delete id="delById" parameterType="java.lang.Integer">
        delete from userinfo where id=#{id}
    </delete>

用postman进行测试:

参数占位符 #{} 和 ${}

#{}:预编译处理。

${}:字符直接替换。

预编译处理是指:MyBatis 在处理#{}时,会将 SQL 中的 #{} 替换为?号,使用 PreparedStatement 的 set 方法来赋值。直接替换:是MyBatis 在处理 ${} 时,就是把 ${} 替换成变量的值。

like 查询(模糊匹配)

不能直接使用 ${},可以使用 mysql 的内置函数 concat() 来处理,实现代码如下:

<select id="findUserByName3" resultType="com.example.demo.model.User">
     select * from userinfo where username like concat('%',#{username},'%');
</select>

多表查询

如果是增、删、改返回搜影响的行数,那么在 mapper.xml 中是可以不设置返回的类型的

然而即使是最简单查询用户的名称也要设置返回的类型,否则会报错

对于查询标签来说至少需要两个属性:

id 属性:用于标识实现接口中的那个方法;

结果映射属性:结果映射有两种实现标签: <resultMap> 和 <resultType> 。

如下图所示:

下期我们继续了解更多关于mybatis框架的知识,喜欢就关注我吧~

猜你喜欢

转载自blog.csdn.net/m0_62468521/article/details/131401944