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);
    }
相关推荐
C语言小火车2 小时前
【C++】学生管理系统设计与实现丨SQLite数据库版本
开发语言·c++
JIngJaneIL2 小时前
基于java+ vue学生选课系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
百锦再2 小时前
京东云鼎入驻方案解读——通往协同的“高架桥”与“快速路”
android·java·python·rust·django·restful·京东云
WZTTMoon2 小时前
Apache Tomcat 体系结构深度解析
java·tomcat·apache
啊哈哈哈哈啊有2 小时前
导出树形结构,excel
java·windows·excel
invicinble2 小时前
对于认识技术栈的几个角度
java
li.wz2 小时前
JDK17 深度解析:从特性实现到生产实践
java·开发语言
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于SSM的考研信息共享平台为例,包含答辩的问题和答案
java·eclipse