【JavaEE】Mybatis基础使用注解 增删改查操作

目录

一、配置日志

我们加上下面的代码在配置文件中,那么我们在日志中就可以看到我们执行的操作,和数据库返回的数据。

yaml 复制代码
# 配置打印 MyBatis⽇志 
mybatis:
 configuration: 
 	log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

二、传递参数 #{}

当我们的SQL语句中,要根据参数来操作时,我们通过 注解传参的时候可以使用#{参数名}来将后端的参数传给数据库。

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

查询结果:

注意事项:

  • 当我们数据库返回的只有1行或者0行数据的时候,我们使用对象接收不会报错。
  • 当有多条数据返回时,适用对象接收就会报错,应该使用集合。
  • 后端的参数名强烈建议在注解#{}中的参数名要相同。
  • 当后端只有一个参数的时候,#{}中的参数无论怎么写都可以正确传参。
  • 当后端有多个参数的时候,Mybatis会将参数根据顺序转换为param1,param2,也可以根据这个来传参。
  • 也可以通过 @Param , 设置参数的别名, 如果使⽤ @Param 设置别名, #{...}⾥⾯的属性名必须和@Param 设置的⼀样.

三、增(@Insert)

使用注解@Insert来写入数据,直接使⽤UserInfo对象的属性名来获取参数。

java 复制代码
@Insert("insert into user_info (username, password, age) values (#{username},#{password},#{age})")
    Integer insertOne(UserInfo userInfo);

测试函数:

java 复制代码
    @Test
    void insertOne() {
        UserInfo userInfo = new UserInfo();
        userInfo.setAge(6);
        userInfo.setPassword("666");
        userInfo.setUsername("666");
        Integer result = userMapper.insertOne(userInfo);
        System.out.println("增加行数:"+ result);
    }

结果:

四、返回主键@Options

insert 语句默认返回的是 受影响的⾏数, 但有些情况下, 数据插⼊之后, 还需要有后续的关联操作, 需要获取到新插⼊数据的主键,这时就需要使用注解@Options。

java 复制代码
	@Insert("insert into user_info (username, password, age) values (#{username},#{password},#{age})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    Integer insertOne(UserInfo userInfo);
  • useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据库内部⽣成的主键(⽐如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的⾃动递增字段),默认值:false.
  • keyProperty:指定能够唯⼀识别对象的属性,MyBatis 会使⽤ getGeneratedKeys 的返回值或 insert 语句的 selectKey ⼦元素设置它的值,默认值:未设置(unset)

测试方法:

java 复制代码
@Test
    void insertOne() {
        UserInfo userInfo = new UserInfo();
        userInfo.setAge(7);
        userInfo.setPassword("777");
        userInfo.setUsername("777");
        Integer result = userMapper.insertOne(userInfo);
        System.out.println("增加函数:"+ result+", 增加数据的id:"+userInfo.getId());
    }

结果:

五、删(@Delete)

使用@Delete注解,加上删除的SQL语句即可。

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

测试方法:

java 复制代码
    @Test
    void deleteUser() {
        userMapper.deleteUser(7);
    }

结果:

六、改(@Update)

修改数据直接使用@Update注解,加上修改SQL语句即可。

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

测试方法:

java 复制代码
    @Test
    void updateUser() {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(6);
        userInfo.setDeleteFlag(1);
        userMapper.updateUser(userInfo);
    }

结果:

七、查(@Select)

当我们要查询数据的时候直接使用@Select注解加上查询语句即可。

java 复制代码
 @Select("select * from user_info")
    List<UserInfo> selectAll() ;

但是由于我们的类的属性名与数据库的字段名不一致时,会出现数据库该字段有返回值,但是不能复制给类中的对应属性。

我们有以下三种方式解决:

  1. 使用查询语句时将数据库不同字段名取别名为属性名。
java 复制代码
@Select("select username , password, age, gender, phone, " +
            "delete_flag as deleteFlag , create_time as createTime, update_time as updateTime " +
            "from user_info")
    List<UserInfo> selectAll() ;
  1. 使用注解@Result和@Results。在@Results注解中放入@Result注解数组,@Result注解的column属性对应数据库字段,property属性对应类属性名。
java 复制代码
@Results(value = {
            @Result(column = "delete_flag", property = "deleteFlag"),
            @Result(column = "create_time", property = "createTime"),
            @Result(column = "update_time", property = "updateTime"),

    })
    @Select("select * from user_info ")
    List<UserInfo> selectAll() ;
  1. 当我们想要将上面的@Results这一大段迁移使用@ResultMap注解,在@Results注解的id属性中写上名字即可。只能引用同一个类中的@Results注解。
java 复制代码
 @Results(id = "userInfoMap",value = {
            @Result(column = "delete_flag", property = "deleteFlag"),
            @Result(column = "create_time", property = "createTime"),
            @Result(column = "update_time", property = "updateTime"),

    })
    @Select("select * from user_info ")
    List<UserInfo> selectAll() ;

    @ResultMap("userInfoMap")
    @Select("select * from user_info where id = #{id}")
    UserInfo selectId(Integer id) ;
  1. 使用配置文件将数据库字段中使用下划线的蛇形命名转换为小驼峰命名。mybatis.configuration.map-underscore-to-camel-case: true
yaml 复制代码
mybatis:
  configuration:
    map-underscore-to-camel-case: true #配置驼峰⾃动转换
相关推荐
llwszx1 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁
云泽野2 小时前
【Java|集合类】list遍历的6种方式
java·python·list
二进制person2 小时前
Java SE--方法的使用
java·开发语言·算法
小阳拱白菜3 小时前
java异常学习
java
FrankYoou4 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
麦兜*4 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了5 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
天河归来5 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea
weixin_478689765 小时前
十大排序算法汇总
java·算法·排序算法
码荼5 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud