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{int index;int size}

特殊思考

image-20210427165135294

源码分析

(3)${}取值和#{}取值的区别
  • ${}:直接在sql语句中注入内容,有一定安全问题

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

  • 虽然 有 安 全 问 题 , 但 是 有 一 些 地 方 J D B C 是 不 能 使 用 占 位 符 的 , 这 个 时 候 就 需 要 我 们 用 到 {}有安全问题,但是有一些地方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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值