MyBatis基础操作——CRUD

作者: ASL_ly | 来源:发表于2024-06-24 10:12 被阅读0次

    MyBatis基础操作——CRUD

    前置步骤

    创建数据库

    创建好需要操作的数据库对象,插入几条数据,并测试能够连接到主机。

    创建实体类

    实体类用 @Data 注解可以直接内部生成get,set,toString,Equal和HashCode方法。 

    @NoArgsConstructor和@AllArgsConstructor注解可以内部生成无参构造和全参构造

    在创建实体类时若数据库中的参数含有下划线,则使用驼峰命名去掉下划线将下划线后的首字母大写

    创建Mapper类

    创建一个包 mapper。在mapper包下创建一个接口 UserMapper ,这是一个持久层接口(Mybatis的持久层接口规范一般都叫 XxxMapper)。并用注解@Mapper

    在这个接口中定义的所有方法无需在实现类中重写,在其他类中创建对象就可以直接就调用。

    导入依赖并添加配置文件

    配置文件中的内容如下

    接下来将介绍MyBatis的基础增删改查操作:

    1.按id删除记录

    删除的注解是@Delete,方法是在@Delete注解中加入删除记录的SQL语句后,且我们需要进行动态管理的参数使用占位符替换,在Mybatis中提供的参数占位符有两种:${...} 、#{...}

    - #{...}

      - 执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值

      - 使用时机:参数传递,都使用#{…}

    - ${...}

      - 拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题

      - 使用时机:如果对表名、列表进行动态设置时使用

    如果mapper接口方法形参只有一个普通类型的参数,#{…} 里面的属性名可以随便写,如:#{id}、#{value}。但是为了增强代码的可读性建议保持名字一致。

    若需要有返回值,返回值为int类型,值为影响的记录数。

    2.插入记录

      插入的注解是@Insert,新增记录时,为了避免参数过于复杂,直接用实体类作为参数,在调用时创建好实体类放入即可插入对应字段。在数据添加成功后,默认情况下,执行插入操作时,是不会主键值返回的。如果我们想要拿到主键值,需要在Mapper接口中的方法上添加一个Options注解,并在注解中指定属性useGeneratedKeys=true和keyProperty="实体类属性名"。

    3.按id修改记录

    修改的注解是@Update,其方法和前面说的一致,在Update注解中加入修改记录的SQL语句后,再用占位符#{字段名}替换掉需要传递参数的参数即可。

    4.按id查询记录

      查询的注解是@Select,查询操作的返回值是查询的结果记录,如果只有一条可以用实体类(我这里是Emp)来接收,如果是多条记录,则可以用List(Emp)来接收。

    这里还有一个问题,如果按照原来的流程来写,我们最终测试看到查询返回的结果中大部分字段是有值的,但是deptId,createTime,updateTime这几个字段是没有值的,而数据库中是有对应的字段值的。原因如下:

    -实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。

    -如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。

    解决方案有三种:

    (1)起别名

    在@Select注解的SQL语句中,给查询的字段添加别名,别名和实体类中的一致。

    (2)结果映射

    使用@Results和@Result注解来将实体类的参数映射到数据库的字段,下面是一个示例:

    @Results({

               @Result(column = "dept_id",property = "deptId"),

               @Result(column = "create_time",property = "createTime"),

               @Result(column = "updateTime",property = "updateTime"),

       })

    其中colum是数据库字段,property是实体类中的参数。

    (3)开启驼峰命名自动映射

    可以直接在配置文件中加入语句启动mybatis的驼峰命名自动映射,然后系统会自动将有下划线格式的字段映射为驼峰命名,但是这种方法要求写的代码必须是标准的驼峰命名。

    5.条件查询

    条件查询与前面的类似,都是用占位符替换掉需要进行动态管理的参数,且条件查询的结果一般为多条,所以返回值为实体类集合List<Emp,>。

    有一点需要注意,模糊查询中我们需要替换的是引号内的内容,这里使用#{...}去替换的话由于#{...}是预编译而不是拼接,就达不到我们的效果,有以下两种解决方式:

    (1)使用${...}拼接

    模糊查询使用${...}进行字符串拼接,这种方式呢,由于是字符串拼接,并不是预编译的形式,所以效率不高、且存在sql注入风险。

    (2)使用concat()拼接

    concat是MySQL提供的字符串拼接函数,其使用方法为:concat('%' , #{ } , '%')  ,可以同时实现拼接加预编译。

    相关文章

      网友评论

        本文标题:MyBatis基础操作——CRUD

        本文链接:https://www.haomeiwen.com/subject/iburcjtx.html