mybatis (二)

本文详细介绍了MyBatis映射器的各个元素,包括<select>、<insert>、<update>、<delete>、<sql>、<resultMap>及级联查询。重点讲解了如何使用Map接口传递多个参数,主键回填,自定义主键,以及动态SQL的<if>、<choose>、<trim>、<where>、<set>、<foreach>和<bind>元素的应用,帮助读者深入理解MyBatis的映射和动态SQL功能。
摘要由CSDN通过智能技术生成

一、mybatis配置文件概述

mybatis的核心配置文件配置了很多影响mybatis行为的信息,这些信息通常只会配置在一个文件中,并且不会轻易改动。但是,与spring框架整合后,mybatis的核心配置文件信息将配置到spring的配置文件中。不过也需要了解mybatis的核心配置文件中的元素。

模板很多,借助网上大佬的模板总结

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 属性 -->
    <properties />
    <!-- 设置 -->
    <settings>
        <setting name="" value=""/>
    </settings>
    <!-- 类型的别名 -->
    <typeAliases />
    <!-- 类型处理器 -->
    <typeHandlers />
    <!-- 对象工厂 -->
    <objectFactory type="" />
    <!-- 插件 -->
    <plugins>
        <plugin interceptor=""></plugin>
    </plugins>
    <!-- 配置环境 -->
    <environments default="">
        <!-- 环境变量 -->
        <environment id="">
            <!-- 事务管理器 -->
            <transactionManager type=""/>
            <!-- 数据源 -->
            <dataSource type=""/>
        </environment>
    </environments>
    <!-- 数据库厂商标识 -->
    <databaseIdProvider type=""/>
    <!-- 映射器,告诉MyBatis到哪里去找映射文件 -->
    <mappers>
        <mapper resource="../../xxMapper.xml"/>
    </mappers>
</configuration>

配置文件中元素的配置顺序不能颠倒,一旦颠倒,在 MyBatis 启动阶段将发生异常

二、映射器概述

映射器是mybatis最复杂且最重要的组件,由一个接口加上XML文件(SQL映射文件)组成。mybatis的映射器也可以使用注解完成,但注解复杂SQL不适用、可读性较差等缺点在实际应用并不广泛。

SQL映射文件常用配置元素

元素名称 描述 备注
select 查询语句,最常用、最复杂的元素之一 可以自定义参数,返回结果集
insert 插入语句 执行后返回一个整数,代表插入的行数
update 更新语句 执行后返回一个整数,代表更新的行数
delete 删除语句 执行后返回一个整数,代表删除的行数
sql 定义一部分SQL,在多个位置被引用 例如一张表,列名一次定义,可以在多个SQL语句中使用
resultMap 用来描述从数据库结果集来加载对象,是最复杂、最强大元素 提供映射规则

2.1 <select>元素-----select

<select>元素的常用属性

属性名称 描述
id 它和Mapper的命名空间组合起来使用,是唯一标识符,供MyBatis调用
parameterType 表示传入SQL语句的参数类型的全限定名或别名。它是一个可选属性,MyBatis能推断出具体传入语句的参数
resultType SQL语句执行后的返回类型(全限定名或者别名)。如果是集合类型,返回的是集合元素的类型,返回是可使用resultType或resultType之一。
resultMap 它是映射集的引用,与<resultMap>元素一起使用,返回时可以使用resultType或resultMap之一
flushCache 用于设置在调用SQL语句后是否要求mybatis清空之前查询的本地缓存和二级缓存,默认值为false
useCache 启动二级缓存的开关,默认为true,表示将查询结果存入二级缓存
timeout 用于设置超时参数,单位是秒(s),超时将抛出异常
fetchSize 获取记录的总条数设定
statementType 告诉mybatis使用哪个jdbc的statement工作
resultSetType 针对jdbc的ResultSet接口

2.1.1 使用Map接口传递多个参数

在开发中,查询SQL语句经常需要传递多个参数。在mybatis中运行Map接口通过键值对传递多个参数。

在mybatis(一)MyBatis与Spring的整合 的基础上进行添加

  1. 首先在UserMapper.xml映射文件中添加多条件查询语句
    <!--多条件查询-->
    <select id="selectByMap" parameterType="map" resultType="User">
        select * from user where id = #{id} and name = #{name}
    </select>
  1. 在接口UserDao中添加接口
 /**
     * @param param 
     * @return
     * 多条件查询
     */
    public List<User> selectByMap(Map<String,Override> param);
  1. 在UserController的test方法中添加

        //多条件查询
        Map<String,Object> param = new HashMap<>();
        param.put("id", 1);
        param.put("name", "张三");
        userDao.selectByMap(param);
  1. 在TsetController中进行测试

在这里插入图片描述

可以看出多条件查询成功。

还有一种传递多个参数的方法是:

使用JavaBean传递多个参数

修改UserMapper.xml映射文件 parameterType = “User” ,在UserController的test方法中使用User的set方法进行设定查询条件,然后进行传参即可。

  <!--多条件查询JavaBean,实际可以重新创个parameterType的类-->
    <select id="selectByUser" parameterType="User" resultType="User">
        select * from user where id = #{id} and name = #{name}
    </select>

		// User为新建的javabean
		// JavaBean传递参数
        User param = new User();
        param.setId(1);
        param.setName("张三");
        userDao.selectByUser(param);

2.2 <insert>元素-----insert

<insert>元素用于映射插入语句,mybatis执行完一条插入语句将返回一个整数表示其影响的行数。它的属性与 <select>元素的属性大部分相同,但也有几个特有属性:

  • keyProperty:该属性的作用是将插入或更新操作时的返回值赋给PO类的某个属性,通常会设置为主键对应的属性。如果是联合主键,可以将多个值用逗号隔开。
  • keyColumn:该主键用于设置第几列是主键,当主键列表不是表中的第1列时需要设置。如果是联合主键,可以将多个值用逗号隔开。
  • useGeneratedKeys:该属性将使mybatis使用jdbc的getGeneratedKeys()方法获取由数据库内部产生的主键,例如MySQL、SQL Server 等自动递增的字段,其默认值为false。

2.2.1 主键(自动递增)回填

MySQL、SQL Server 等数据库的表格可以采用自动递增的字段作为主键,有时可能需要使用这个刚产生的主键,用于关联其他业务。

  1. 首先在UserMapper.xml映射文件中修改<insert>元素中的内容
 <!--添加一个用户,开启获取主键值,并将插入后自动递增的主键值返回给id属性-->
    <insert id="insertOneUser" parameterType="User" keyProperty="id" useGeneratedKeys="true">
        insert into user values(null,#{name},#{sex})
    </insert>
  1. 在UserController的test方法中修改
 //增加一个用户并返回主键值
        User addUser = new User();
        addUser.setName("老王");
        addUser.setSex("女");
        userDao.insertOneUser(addUser);
        System.out.println("插入后的主键值为:" + addUser.getId());
  1. 结果显示

在这里插入图片描述

2.2.2 自定义主键

在实际项目中,有的数据库不支持自动递增或者没有设置自动递增,可以使用mybatis的<selectKey>元素来自定义生成主键。

  <!--自定义主键-->
    <insert id="" parameterType="">
        <!--先使用selectKey元素定义主键,然后再定义SQL语句-->
        <selectKey keyProperty="" resultType="" order="">
            select decode(max(id),null,1,max(id)+1) as newId from user
        </selectKey>
        insert into user values (null,#{name},#{sex})
    </insert>
  • keyProperty元素指定哪个字段为主键,order可以取值before 或者after 意思是在插入语句之前或者之后执行selectKey中的语句

2.3 <update> 和<delete>元素----update–delete

<update> 和<delete>元素中的属性和<select>元素中的相似。用法就像之前一样。

2.4 <sql>元素----sql

<sql>元素元素的作用在于定义SQL语句的一部分,以方便后面的SQL语句引用它,例如反复使用的列名。

  1. 首先在UserMapper.xml映射文件中修改<select>元素中的内容
	<!--重复的列名-->
    <sql id="columns"> id,name,sex</sql>

    <!--根据id查询user信息-->
    <select id="selectByID" parameterType="Integer" resultType=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值