首页 > 其他分享 >MyBatis项目的创建和增删查改操作

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

时间:2024-11-10 17:20:17浏览次数:3  
标签:info gender age 增删 查改 userInfo MyBatis Integer id

1. 项目的创建

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

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

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

spring:
  application:
   name: mybatis-demo
  datasource:
    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. 中文乱码问题解决

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

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

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());
    }

}

3.1.1. 驼峰转化

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

但是由于数据库的命名规范和 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

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

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

3.3. 打印日志

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

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

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

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

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);

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

来看多个参数的情况:

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

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

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

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

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

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

还是推荐重命名之后的参数和 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.insertUser(userInfo);
}

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

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

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

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

@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

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);

主页 

标签:info,gender,age,增删,查改,userInfo,MyBatis,Integer,id
From: https://blog.csdn.net/2202_76097976/article/details/143471129

相关文章

  • 【MyBatis源码】SQL 语句构建器AbstractSQL
    文章目录介绍org.apache.ibatis.jdbc.SQLSQL类使用示例@SelectProvider搭配动态SQLAbstractSQL类源码分析介绍当我们需要使用Statement对象执行SQL时,SQL语句会嵌入Java代码中。SQL语句比较复杂时,我们可能会在代码中对SQL语句进行拼接,查询条件不固定时,还需要根据不同......
  • spring整合mybatis解析(黑马SSM-26)
    spring整合mybatis文章目录spring整合mybatis前言一、核心对象分析1.环境准备数据库的创建项目创建(1)配置文件的创建及配置pom.xml文件的配置SqlMapConfig.xml文件的配置jdbc.properties文件的配置(2)相关类的创建模块目录:dao接口的创建domain类的创建service类的创建serv......
  • 六、MyBatis-Plus高级用法(1):最优化持久层开发
    一、MyBatis-Plus快速入门1.1简介课程版本:3.5.3.1MyBatis-Plus......
  • 深入 MyBatis-Plus 插件:解锁高级数据库功能
    一、关于Mybatis-Plus插件1.1简介Mybatis-Plus提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展Mybatis的功能,提升开发效率、优化性能和实现一些常用的功能。​‍1.2实现原理Mybatis-Plus的插件实现是基于MyBatis的拦截器机制,这些插件通过MybatisPlusInte......
  • MyBatis如何关闭一级缓存(分注解和xml两种方式)
    @目录问题:为什么有缓存什么场景下必须需要关闭一级缓存关闭一级缓存方法(针对使用MyBatis场景)第1种:注解形式(可指定仅仅某个Mapper关闭注解)第2种:sql动态拼接传入的随机数问题:为什么有缓存mybatis默认开启一级缓存什么场景下必须需要关闭一级缓存场景:执行2次相同sql,但是第一次......
  • MyBatis Plus之注解实现动态SQL
     参考下面的sql语句即可实现@Select("<script>"+"selectgp.TEWRTYR,gp.FJFNM,gs.CVNNN,u.VCNBMBNV,gp.RAEER,gr.BVNCCVN\n"+"fromUPPBHTu\n"+"leftjoinGP_testgp\n"+......
  • Mybatis 延迟加载的实现原理
    一、MyBatis延迟加载的支持1.延迟加载的配置在MyBatis中,延迟加载可以通过全局配置和局部配置来实现:全局配置:可以在MyBatis的配置文件中进行设置,控制全局的延迟加载行为。<configuration><settings><settingname="lazyLoadingEnabled"value="true......
  • 【客户投诉系统】 Sringboot+vue+soap+activiti+mybatis+element-ui
    [!NOTE]分享课程系统,客户平台投诉系统主要框架:Springboot,mybatis,Activiti,soap,Element-UI,Vue主要功能:用户可以对不同的平台,例如美团、学习通、饿了么等进行投诉(Springboot,mybatis),工作管理员会对该投诉信息进行审批(Activiti),若审批通过,通过soap服务传递给对应......
  • CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro
    说明此文章为转发的,方便日后查看。系统演示环境http://www.cc-admin.top/#/home简介CC-ADMIN前端简介现在市面的上后台管理系统很多,不差你这一个,为啥又来个轮子?答:材料不一样。本轮子的选材是在考察过antv、element之后选择了quasar,前两个很优秀,尤其是antv的外观我特......
  • Mybatis框架入门
    IDEA使用Maven部署第一个MyBatis项目,两种方法导入,一个是Jar包的形式,此形式用于初学者学习并完成学校实训作业,第二种则是通过pom.xml文件引入依赖从而避免了从官网下载jar包等问题。一、创建一个Maven工程:File-->New-->projcet-->Maven二、导入以下Jar包:New-->ProjcetStruc......