mybatis-4-Mapper映射文件

Mapper映射文件

映射文件的Mapper标签包含标签

image-20210427153833236

1、CDUS增删改查

image-20210427155445536

2、参数处理

(1)直接传入参数

  • 单个参数
//传入当个参数
public Employee getEmployeeById(int id);
  • 多个参数

多个参数会被封装成一个Map对象,但是:map里的键是param1和param2...而不是id和lastName等等

//传入多个参数
//太过麻烦一般不用,用命名参数取代
public Employee getEmployeeByNameId(int id,String lastName);
  • 命名参数(@Param注解)

常用

//命名参数
//明确指出哪些参数的键名是什么
public Employee getEmployeeByNameById(@Param("id")int id,@Param("lastName")String lastName);

(2)传入POJO和Map

POJO概念:我们总结一下给一个定义把,POJO是一个简单的、正规Java对象,它包含业务逻辑处理或持久化逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。

如果多个参数正好是我们业务逻辑的数据逻辑,我们可以直接传入POJO

​ #{属性名}:取出传入的pojo的属性值

但如果多个参数不是我们业务逻辑的数据逻辑,我们可以直接传入一个HashMap<String,Object>

​ 注意点:键一定是String

如果传入多个参数,且经常需要使用,推荐编写一个TO(Tranfer Object)来达到目的

​ 比如:Page

特殊思考

image-20210427165135294

源码分析

(3)${}取值和#{}取值的区别

  • ${}:直接在sql语句中注入内容,有一定安全问题

  • {}:类似于JDBC的?占位符,

  • 虽然${}有安全问题,但是有一些地方JDBC是不能使用占位符的,这个时候就需要我们用到${}

    比如:我们有很多薪水表,每个都以年份为标注,这个时候我们的#{}就起不了作用了,就需要用${}

    insert into ${year}_salary (last_name,gender,email) values (#{lastName},#{gender},#{email});

(4)#{}规定参数规则

  • javaType、jdbcType、mode、numericScale、 resultMap、typeHandler、jdbcTypeName、expression

  • 一般使用 jdbcType,

    如:当接入数据库为Oracle时,我们传入的数据时null时,JDBC会转成OTHER,但Oracle是不能识别OTHER的,所以我们需要对传入的数据进行处理,#{email,jdbcType=NULL};强调当传入的参数为null时,JDBC传出的参数类型也为nul

  • 在全局配置的setting中也可以配置,

    <settings>
        <setting name="jdbcTypeForNull" value="NULL"/>
    </settings>
    

3、select元素

Select元素来定义查询操作。

  • Id:唯一标识符。用来引用这条语句,需要和接口的方法名一致
  • parameterType:参数类型。可以不传,MyBatis会根据TypeHandler自动推断,复杂的数据类型还是需要传入
  • resultType:返回值类型。别名或者全类名,如果返回的是集合,定义集合中元素的类型。不能和resultMap同时使用

4、resultMap

数据库中的字段和bean类中的属性不一致解决方法?

1、给字段起别名

2、在全局配置文件中的setting板块开启自动驼峰命名法

3、就是使用resultMap

解决字段和属性不一致问题

sql影射文件

<resultMap id="EmployeeMap" type="Employee">
    <!--id为主键:定义id为主键在后台会有优化-->
    <id column="id" property="id"/>
    <!--result定义普通封装-->
    <result column="last_name" property="lastName"/>
    <!--下面这些其实可以不写,但一般我们需要把全部都写下来-->
    <result column="gender" property="gender"/>
    <result column="email" property="email"/>
</resultMap>
posted @ 2021-06-07 16:04  Coder-Wang  阅读(64)  评论(0编辑  收藏  举报