Mybatis学习(2)

本文详细介绍了Mapper接口代理的开发规范,包括namespace设置、SQL映射规则,以及如何通过XML配置、注解映射和代理对象进行操作。涵盖了参数类型、结果类型、动态SQL、关联查询和延迟加载等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mapper代理方式:

mapper代理开发规范:

  1. 映射文件中的 namespace 必须是 mapper 接口的地址。
  2. 映射文件中 statement 的 id 必须与 mapper 接口中的方法名一致。
  3. 映射文件中 parameterType 必须与 mapper 接口中的方法参数类型一致。
  4. 映射文件中 resultType 必须与 mapper 接口中的返回值类型一致。

使用方式:

创建mapper接口

package com.losoft.mapper;lo
import java.util.List;
import com.losoft.po.Emp;
public interface EmpMapper {
    public Emp getEmpById(int empno);
    public List<Emp> listEmpAll();
}

创建mapper映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-msapper.dtd">
<mapper namespace="com.losoft.mapper.EmpMapper">
    <select id="getEmpById" parameterType="int" resultType="Emp">
        select * from t_emp where empno = #{empno}
    </select>
    <select id="listEmpAll" resultType="Emp">
        select * from t_emp order by empno
    </select>
</mapper>
<!-- mapper接口与映射文件最好在同一个文件夹内,并且接口名与映射文件名要一致 -->

不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复;

注册mapper映射文件

<configuration>
    <mappers>
        <mapper resource="com/losoft/mapper/EmpMapper.xml" />
    </mappers>
</configuration>

获取代理对象测试

SqlSession sqlSession = Util.getSqlSessionFactory().openSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = mapper.getEmpById(7369);
System.out.println(emp);
List<Emp> list = mapper.listEmpAll();
for(Emp e : list) {
    System.out.println(e);
}

转义字符:

由于mybatis的配置都是写在xml文件中的,有些特殊字符需要转义。

Mybatis转义字符
&lt;<小于
&gt;>大于
&amp;&
&apos;'单引号
&quot;"双引号

常用数据库操作注意事项:

parameterType只有一个。所以,有多个参数时使用对象传值(这就是输入映射)。

{} 中书写的是实体对象的属性名,所以要严格区分大小写。

如果返回值只有一行一列时,resultType才能使用基本数据类型。

增删改都会返回影响的行数(int值),但是,增删改标签中不能书写resultType属性

获取主键的方式:

 <selectKey keyProperty=" empno" resultType="int" order="AFTER">
        select LAST_INSERT_ID()
    </selectKey>
  1. selectKey标签中的 select LAST_INSERT_ID() 语句就能获取生成的主键
  2. selectKey标签中的keyProperty属性就是主键名,MyBatis会自动将获取的主键封装给此属性。
  3. order的值有两种:BEFORE、AFTER
    BEFORE:先获取主键,然后执行insert; 比如 Oracle数据库。
    AFTER:先执行insert,然后获取主键; 比如 MySql数据库。
<insert id="insertEmp" parameterType="Emp" useGeneratedKeys="true" keyProperty="empno">
    insert into t_emp(ename,job,hiredate,deptno)
    values(#{ename},#{job},#{hiredate},#{deptno})
</insert>

useGeneratedKeys设置为true后,mybatis会使用JDBC的getGeneratedkeys方法获取由数据库内部自动生成的主键,并将该值赋值给由keyProperty指定的属性; 注意:此种方式只适合于有自增长列的数据库(mysql、sqlserver等)

动态sql

MyBatis中用于动态sql的元素主要有:if、where、trim、set、foreach、choose等

if+where

if+where会实现以下功能:

  1. 自动添加where
  2. 不需要考虑where后是否加and,mybatis会自动处理
  3. 不需要考虑是否加空格,mybatis会自动处理
  4. 没有 else 标签,也没有 else if 标签。

注意: job!='' 此处只可以判断是否为空,不能判断是否为某个值。也就是说:job!='manger' 是无效的。

choose

choose会实现如下功能:

  1. 多个 when 标签中,只能执行一个。也就是说:当一个 when 条件满足并执行后,其它的 when 将不再执行。
  2. 当所有 when 都不满足条件时,执行 otherwise 标签。

if 与 choose 的区别:if 相当于java中的if语句; choose相当于java中的switch语句。

trim

trim标签可以在自己包含的内容中加上某些前缀或后缀,与之对应的属性是:prefix、suffix。 还可以把包含内容的开始内容覆盖,即忽略。也可以把结束的某些内容覆盖,对应的属性是:prefixOverrides、suffixOverrides

注意:

  1. prefix与suffix可以在sql语句中拼接出一对小括号。
  2. suffixOberrides可以将最后一个逗号去掉。

set

set标签主要用于更新操作时使用

注意:

  1. set可以在sql语句中自动加上set关键词。
  2. 可以自动将最后的逗号去掉。
  3. 上面写法中,必须要保证有一个if成立

foreach

foreach标签可以在sql中迭代一个集合或数组,主要用于拼接in条件。

oreach标签的属性:

  1. collection:需要遍历的类型,值有:list、array
  2. item:表示遍历出来的对象
  3. open:表示语句的开始部分
  4. close:表示语句的结束部分
  5. separator:表示每次迭代之间以什么符号为间隔
  6. index:每次迭代的位置索引,就是循环变量

输入映射总结:

sql语句需要一个参数时:

接口方法参数为一个基本数据类似;parameterType配置一个基本数据类型;

sql语句需要多个参数时:

接口方法参数为一个实体对象类型;parameterType配置一个实体对象类型;

接口方法参数为一个集合类型(List、Map);parameterType配置集合中元素的类型;

输出映射总结:

当sql语句中的字段名和实体对象中的属性名一致时,使用resultType;

当sql语句中的字段名和实体对象中的属性名不一致时,使用resultMap;

MyBatis关联查询:

一对一、多对一关:使用association标签

一对多、多对多:使用collection标签

关联查询的延迟加载(懒加载)

延迟加载:执行查询时,关联查询不会立即加载。只有在使用关联数据时才会加载。 优点:按需加载,提高效率。

这与单例模式里的懒汉式很相似,都是节省了空间,但是浪费了时间

要使用关联查询的延迟加载,就必须要使用单独查询形式。并且,需要先启用MyBatis的延迟加载配置(需要配置两项):

  1. lazyLoadingEnabled:延迟加载的全局开关(默认为false)。
  2. aggressiveLazyLoading:延迟加载整个对象(默认为true; false:对象的每个属性都会延迟加载,即属性按需加载)

使用注解完成mybatis映射

主要有四种注解来实现增删改查:@Select、@Insert、@Update、@Delete

在接口的方法上面加上注解里面包含sql语句,便可绑定接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值