MyBatis:注解方式实现数据库 CRUD 全操作

Mybatis是什么

Mybatis 是一个轻量级的 Java 持久层框架,它简化了数据库操作,将 SQL 语句与 Java 代码解耦。通过 XML 或注解配置 SQL 映射,开发者可以更灵活地操作数据库,同时避免了传统 JDBC 的繁琐编码。Mybatis 支持动态 SQL、存储过程以及高级映射功能,是 Java 应用中常用的 ORM 解决方案之一。

根据MyBatis的写法完成数据库的操作

1.先创建一个接口

java 复制代码
@Mapper
public interface UserInfoMapper {
    @Select("select * from user_info")
        List<UserInfo> selectAll();
}

@Mapper 注解替代了传统的五大注解,用于将该接口交由 Spring 容器进行管理。

java 复制代码
@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

2.创建测试类

我们在这个接口中点击鼠标右键,然后点击Generate,再点击Test:

然后记得把左下角的那个选项勾选

于是在test文件之下就会生成测试类:

3.进行测试

由于我们这个测试需要搭建Spring的环境,所以@SpringBootTest这个注解不能删除,这个注解的作用就是用来搭建Spring的环境的。

测试方法1:通过注解直接将 IOC 容器中的UserInfoMapper注入到测试类中使用。

测试方法2:通过ApplicationContext(Spring 上下文)主动从 IOC 容器中获取 Bean 的测试方法

执行具体的查询操作

在查询中传入一个参数

java 复制代码
@Select("select * from user_info where id=#{id}")
    UserInfo selectAllById(Integer id);

上面的#{id}就获取到了我们所传入的id的数值,这样我们就可以根据不同的id来灵活查询不同的数据

java 复制代码
@Test
    void selectAllById() {
        System.out.println(userInfoMapper.selectAllById(1));
    }

在查询中传入多个参数

java 复制代码
@Select("select * from user_info where username =#{username} and password=#{password}")
    List<UserInfo> selectByNameAndPassword (String username,String password);
java 复制代码
@Test
    void testSelectByNameAndPassword() {
        System.out.println(userInfoMapper.selectByNameAndPassword("zhangsan123", "zhangsan"));
    }

1.新增数据

java 复制代码
@Options(useGeneratedKeys = true,keyProperty = "id")
    @Insert("insert into user_info (username,password,age)VALUES(#{username},#{password},#{age}) ")
    Integer insertUser(UserInfo userInfo);

@Options(useGeneratedKeys = true,keyProperty = "id")
这行注解就可以让我们方便在后续拿到自增后的id的数值。

java 复制代码
@Test
    void insertUser() {
        UserInfo userInfo=new UserInfo();
        userInfo.setAge(18);
        userInfo.setUsername("user");
        userInfo.setPassword("password");
        Integer result= userInfoMapper.insertUser(userInfo);
        System.out.println("影响行数:" +result +", id: "+userInfo.getId());
    }

参数重命名(参数绑定)

这里我们就引入了@Param这个新的注解:

java 复制代码
@Select("select * from user_info where username =#{userName} and password=#{PassWord}")
    List<UserInfo> selectByNameAndPassword (@Param("userName") String username, @Param("PassWord") String password);

这里就把我们所传入的username这个参数的值赋值给了userName,把password的值赋值给了PassWord。

如果是针对对象来重命名的话要做出额外的处理:

java 复制代码
@Options(useGeneratedKeys = true,keyProperty = "id")
    @Insert("insert into user_info (username,password,age)"+
            "VALUES(#{UserInfo.username},#{UserInfo.password},#{UserInfo.age}) ")
    Integer insertUser2( @Param("UserInfo") UserInfo userInfo);

我们要在对象对应的属性的前面加上我们重新命名的名字然后再加上.

2.删除数据

java 复制代码
@Delete("delete from user_info where id=#{id}")
    Integer deleteUser(Integer id);
java 复制代码
@Test
    void deleteUser() {
        userInfoMapper.deleteUser(2);
    }

通过数据库中的信息我们可以发现id为2的数据确实被删除了。

3.更新数据

java 复制代码
@Update("update user_info set delete_flag=#{deleteFlag},phone=#{phone} where id=#{id}")
    Integer updateUser(UserInfo userInfo);

上面参数中的对应关系要注意:

delete_flag是数据库中字段的名称,deleteFlag是Java中UserInfo的属性名称。

java 复制代码
 @Test
    void updateUser() {
        UserInfo userInfo=new UserInfo();
        userInfo.setId(3);
        userInfo.setPhone("123456");
        userInfoMapper.updateUser(userInfo);
    }
相关推荐
weixin_BYSJ19871 分钟前
springboot鹿邑县旅游网站99312(源码+文档)
java·javascript·spring boot·python·django·flask·php
七夜zippoe2 分钟前
DolphinDB异常检测引擎:实时告警
java·服务器·网络·异常·告警·dolphindb
Ws_3 分钟前
WPF 面试题 + 参考答案,偏 C# 桌面端开发高频。
开发语言·c#·wpf
程序猿编码3 分钟前
如何把远程文件变化“骗“成本地inotify事件:一个LD_PRELOAD钩子
c语言·开发语言·网络·tcp/ip·安全
星空椰9 小时前
Python 面向对象高级:继承与类定义详解
开发语言·python
橙淮9 小时前
并发编程(六)
java·jvm
拽着尾巴的鱼儿9 小时前
springboot openfeign 自定义feign 接口重试机制
java·spring boot·后端
白露与泡影9 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
凯瑟琳.奥古斯特9 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
雪度娃娃9 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++