开发者

MyBatis项目的创建和增删查改操作详解

开发者 https://www.devze.com 2024-11-08 10:35 出处:网络 作者: 2的n次方_
目录1. 项目的创建2. 中文乱码问题解决3. MyBATis 的简单操作3.1. 查询3.1.1. 驼峰转化3.2. 单元测试3.3. 打印日志3.4. 参数传递3.5. 增加3.6. 删除3.7. 修改1. 项目的创建
目录
  • 1. 项目的创建
  • 2. 中文乱码问题解决
  • 3. MyBATis 的简单操作
    • 3.1. 查询
      • 3.1.1. 驼峰转化
    • 3.2. 单元测试
      • 3.3. 打印日志
        • 3.4. 参数传递
          • 3.5. 增加
            • 3.6. 删除
              • 3.7. 修改

              1. 项目的创建

              第一步还是和之前的 Spring 项目一样

              MyBatis项目的创建和增删查改操作详解

              然后还需要添加以下依赖,Lombok 和 web 依赖也可以加上

              MyBatis项目的创建和增删查改操作详解

              之后需要进行数据库的配置,这里通过 yml 来演示:

              spring:
                application:
                 name: mybatis-demo
                dhYOXftmtLcatasource:
                  url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
                  username: root
                  password: root
                  driver-class-name: com.mysql.cj.jdbc.Driver

              2. 中文乱码问题解决

              MyBatis项目的创建和增删查改操作详解

              yml 配置文件中,可能中文会出现乱码,可以设置 idea 中的编码方式来避免乱码

              MyBatis项目的创建和增删查改操作详解

              为了避免之后创建的项目也出现乱码,还需要更改一下新项目的设置

              MyBatis项目的创建和增删查改操作详解

              3. MyBatis 的简单操作

              3.1. 查询

              可以把数据库中的表的字段抽象为一个对象进行描述

              @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;
              }

              然后定义接口进行查询

              @Mapper
              public interface UserInfoMapper {
                  //查询所有的用户信息
                  @Select("select * from user_info")
                  List<UserInfo> selectAll();
              }

              在 Spring Boot 工程中,已经自动创建好了测试类,可以在这个类中进行测试

              @SpringBootTest
              class MybatisDemoApplicationTests {
               
                  @Autowired
                  private UserInfoMapper userInfoMapper;
                  @Test
                  void contextLoads() {
                      System.out.println(userInfoMapper.selectAll());
                  }
               
              }

              MyBatis项目的创建和增删查改操作详解

              3.1.1. 驼峰转化

              表中的数据都被转化为一个对象信息打印出来了,www.devze.com但是发现有几个字段是没有赋值的,只有和 Java 对象属性和数据库字段一样时才会进行赋值

              MyBatis项目的创建和增删查改操作详解

              但是由于数据库的命名规范和 java 的命名规范是不一样的,java 中驼峰命名,如果想要保持一致的话,可以进行别名的方式

              @Select("select id, username, password, age, gender, phone, " +
                      "delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from user_info")
              List<UserInfo> selectAll();

              除了这种方式之外还可以通过注解来存储映射:

              一个@Results注解中以数组的形式存储@Result注解

              @Results({
                  @Result(column = "delete_flag", property = "deleteFlag"),
                  @Result(column = "create_time", property = "createTime"),
                  @Result(column = "update_time", property = "updateTime"),
              })
              @Select("select id, username, password, age, gender, phone, delete_flag, create_time, update_time from user_info")
              List<UserInfo> selectAll();

              和上面的方式不同的是,这里配置一次映射整个类都可以用

              @Results(id = "BaseMap", value = {
                  @Result(column = "delete_flag", property = "deleteFlag"),
                  @Result(column = "create_time", property = "createTime"),
                  @Result(column = "update_time", property = "updateTime"),
              })

              这里指定好 id 之后,其他方法也就可以通过使用@ResultMap注解使用到了:

              @ResultMap("BaseMap")
              @Select("select id, username, password, age, gender, phone, delete_flag, create_time, update_time from user_info where id= #{aa}")
              UserInfo selectId(Integer id);

              上面这些方法写起来还是有些麻烦的,可以直接通过配置文件的方式,配置驼峰转化

              mybatis:
                configuration: 
                  map-underscore-to-camel-case: true #配置驼峰自动转换

              这样直接搞定,无论上面的别名还是注解,都不用写

              3.2. 单元测试

              除了上面的测试方法之外,还可以使用 idea 自动生成测试类

              首先在需要测试的 Mapper 接口中右键之后点 Generate,然后再点 Test

              MyBatis项目的创建和增删查改操作详解

              然后就可以选择要测试的方法,就会自动生成单元测试类

              MyBatis项目的创建和增删查改操作详解

              生成的测试类需要加上 @SpringBootTest 注解

              MyBatis项目的创建和增删查改操作详解

              3.3. 打印日志

              在 MyBatis 中可以借助日志来查看到 SQL 语句的执行,执行传递的参数和执行结果,可以现在配置文件中进行配置:

              mybatis:
                configuration: # 配置打印 MyBatis日志
                  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

              配置好之后多了下面的一些信息

              MyBatis项目的创建和增删查改操作详解

              通过这些信息也可以帮助我们去发现问题

              3.4. 参数传递

              如果说想要查询 id = 4 的用户,那么就可以这样写

              @Select("select * from user_info where id = 4")
              UserInfo selectId();

              这时返回值就可以用一个对象来接收了,上面的方式中参数就写的固定了,如果说把传入的 id 作为参数传递,就灵活很多

              MyBatis 中是通过使用#{}的方式进行参数传递的:

              @Select("select * from 编程客栈user_info where id = #{id}")
              UserInfo selectId(Integer id);

              并且在一个参数的情况下,这两个参数是可以不对应的,但是如果是多个参数,就需要相互对应了

              MyBatis项目的创建和增删查改操作详解

              来看多个参数的情况:

              @Select("select * from user_info where age = #{age} and gender = #{gender}")
              List<UserInfo> selectUserByAgeAndGender(Integer age,Integer gender);

              MyBatis项目的创建和增删查改操作详解

              由于是按照参数名称匹配的,所以参数顺序换一换也是没问题的,但是名称一定要匹配,如果名js称匹配不上是会报错的

              MyBatis项目的创建和增删查改操作详解

              还有另一种写法,还可以通过 param1, param2 这样的方式来匹配,不过还是推荐使用第一种写法

              MyBatis项目的创建和增删查改操作详解

              还可以使用@Param对参数进行重命名:

              @Select("select * from user_info where age = #{age} and gender = #{gender}")
              List<UserInfo> selectUserByAgeAndGender(@Param("gender") Integer gender, @Param("age") Integer age);

              但是如果重命名的参数和 SQL 语句中的参数不匹配也是会报错的

              MyBatis项目的创建和增删查改操作详解

              还是推荐重命名之后的参数和 SQL 的参数都保持一致,也就是参数和注解中的名称也要保持一致:

              @Select("select * from user_info where age = #{age} and gender = #{gender}")
              List<UserInfo> selectUserByAgeAndGender(@Param("gender") Integer gender, @Param("age") Integer age);

              3.5. 增加

              插入的话,由于表中有多个字段,可以直接传入一个对象,对象的属性就代表这些字段

              @Insert("insert into user_info(username,password,age,gender) " +
                      "values (#{username},#{password},#{age},#{gender})")
              Integer insertUser(UserInfo userInfo);

              然后测试一下

              @Test
              void insertUser() {
                  UserInfo userInfo = new UserInfo();
                  userInfo.setUsername("xxx");
                  userInfo.setPassword("111");
                  userInfo.setAge(19);
                  userInfo.setGender(1);
                  Integer integer = userInfoMapper.ihttp://www.devze.comnsertUser(userInfo);
              }

              在 mysql 的日志中也是成功的更新了

              MyBatis项目的创建和增删查改操作详解

              如果说要想上面那样通过参数重命名的方式的话,来看一下结果:

              MyBatis项目的创建和增删查改操作详解

              这里发现是报错了,如果使用重命名,SQL 语句中的参数是需要通过对象来获取属性的

              MyBatis项目的创建和增删查改操作详解

              insert 语句默认返回的是影响的行数,如果想要获取自增 id 的话需要在方法上再加上一个@Options注解

              MyBatis项目的创建和增删查改操作详解

              @Test
              void insertUser() {
                  UserInfo userInfo = new UserInfo();
                  userInfo.setUsername("xxx");
                  userInfo.setPassword("111");
                  userInfo.setAge(19);
                  userInfo.setGender(1);
                  Integer integer = userInfoMapper.insertUser(userInfo);
                  System.out.println("影响行数:" + integer + ",自增id:" + userInfo.getId());
              }

              方法的返回值还是影响行数,也是成功拿到了自增 id

              MyBatis项目的创建和增删查改操作详解

              3.6. 删除

              删除的返回值也是影响的行数

              @Delete("delete from user_info where id = #{id}")
              Integer deleteId(Integer id);

              3.7. 修改

              修改数据也是影响的行数

              @Update("update user_info set password = #{password} where id = #{id}")
              Integer update(Integer id,String password);

              以上就是MyBatis项目的创建和增删查改操作详解的详细内容,更多关于MyBatis项目创建和增删改查的资料请关注编程客栈(www.devze.com)其它相关文章!

              0

              精彩评论

              暂无评论...
              验证码 换一张
              取 消

              关注公众号