使用mybatis框架时,那必然会有对数据库的查询语句的编写,所以这篇文章希望可以帮助到你。
什么是Mybatis框架?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
如何使用?
pom文件依赖
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>2.1.3</version>
- </dependency>
yml文件配置,这里匹配 resource/mapper/ 路径下的映射文件。
- mybatis:
- mapper-locations: classpath:mapper/*.xml
在xml文件中绑定持久层接口和实体对象
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.flamelephant.fabricmgt.dao.HostMapper">
- <resultMap type="com.flamelephant.fabricmgt.entity.po.Host" id="HostMap">
- <result property="id" column="id" jdbcType="INTEGER"/>
- <result property="hostName" column="host_name" jdbcType="VARCHAR"/>
- <result property="ip" column="ip" jdbcType="VARCHAR"/>
- <result property="userName" column="user_name" jdbcType="VARCHAR"/>
- <result property="passWord" column="pass_word" jdbcType="VARCHAR"/>
- <result property="state" column="state" jdbcType="OTHER"/>
- <result property="tag" column="tag" jdbcType="VARCHAR"/>
- <result property="gmtCreated" column="gmt_created" jdbcType="TIMESTAMP"/>
- <result property="gmtModified" column="gmt_modified" jdbcType="TIMESTAMP"/>
- </resultMap>
- </mapper>
- mapper标签中的namespace属性指定的是我们持久层接口的项目路径
- resultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中
- resultMap标签的type属性是我们要映射的实体对象的项目路径,id为resultMap的唯一标识。
- resultMap中的result标签是实体和数据库表字段的绑定,其中property属性为实体对象的属性名,column为数据库的字段名,jdbcType是字段的类型。
xml映射文件的sql编写
通过实体作为筛选条件查询
- <select id="queryAll" resultMap="HostMap">
- select id,
- host_name,
- ip,
- user_name,
- pass_word,
- state,
- tag,
- gmt_created,
- gmt_modified
- from host
- <where>
- <if test="id != null and id != ''">
- and id = #{id}
- </if>
- <if test="hostName != null and hostName != ''">
- and host_name like CONCAT('%', #{hostName}, '%')
- </if>
- <if test="ip != null and ip != ''">
- and ip like CONCAT('%', #{ip}, '%')
- </if>
- <if test="userName != null and userName != ''">
- and user_name = #{userName}
- </if>
- <if test="passWord != null and passWord != ''">
- and pass_word = #{passWord}
- </if>
- <if test="state != null and state != ''">
- and state = #{state}
- </if>
- <if test="tag != null and tag != ''">
- and tag = #{tag}
- </if>
- <if test="gmtCreated != null">
- and gmt_created = #{gmtCreated}
- </if>
- <if test="gmtModified != null">
- and gmt_modified = #{gmtModified}
- /if>
- </where>
- </select>
- id="queryAll"为持久层接口的抽象方法名
- resultMap="HostMap" 指定查询结果接收的resultMap的结果集。
持久层接口绑定
- /**
- * 条件查询
- *
- * @param host 条件查询
- * @return 对象列表
- */
- List<Host> queryAll(Host host);
通过主键批量删除
- <!--通过主键批量删除-->
- <delete id="deleteHostByIds" parameterType="java.lang.Integer">
- delete
- from host
- where id in
- <if test="hostIds != null and hostIds.length > 0">
- <foreach item="id" collection="hostIds" index="index" open="(" separator="," close=")">
- #{id}
- </foreach>
- </if>
- </delete>
以上sql语句的原型为
- delete from host where id in(1,2,3)
foreach标签中的属性理解
- collection属性为接收的数据源
- item为集合中的每一个元素
- index :用于表示在迭代过程中,每次迭代到的位置
- open :表示该语句以什么开始
- separator :表示在迭代时数据以什么符号作为分隔符
- close :表示以什么结束
持久层接口抽象方法
- /**
- * 批量删除主机
- *
- * @param hostIds 主机id数组
- * @return Integer
- */Integer deleteHostByIds(@Param("hostIds") Long[] hostIds);
批量新增
- <!--批量增加-->
- <insert id="addHostList">
- insert into host_and_group(host_group_id, host_id)
- values
- <foreach collection="hostGroupIdList" item="hostGroupId" index="index" separator=",">
- (#{hostGroupId}, #{hostId})
- </foreach>
- </insert>
持久层接口方法
- /**
- * 将多个主机添加至一个主机组
- *
- * @param request
- * @return Integer
- */Integer addHostList(HostAndGroupRequest request);
我是元素封装在一个对象中,所以这个对象里有批量增加的元素,则直接可以传一个对象。
总结
到此这篇关于mybatis框架的xml映射文件常用查询指南的文章就介绍到这了,更多相关mybatis xml映射文件查询内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!