mybatis学习教程(五)mapper.xml篇

简介: 1、前言这一篇主要讲mapper.xml的一些讲解。在项目开发中这些是主要编写的,例如UserMapper.xml,以及一些动态数据。

1、前言

这一篇主要讲mapper.xml的一些讲解。在项目开发中这些是主要编写的,例如UserMapper.xml,以及一些动态数据。

2、resultMap与resultType比较

resultType :指定输出结果的类型(pojo、简单类型、hashmap..),将sql查询结果映射为java对象。

使用resultType注意:sql查询的列名要和resultType指定pojo的属性名相同,指定相同 属性方可映射成功,如果sql查询的列名要和resultType指定pojo的属性 名全部不相同,  list无法创建pojo对象的
resultMap:将sql查询结果映射为java对象。如果sql查询列名和最终要映射的pojo的属性名不一致,使用resultMap将列名和pojo的属性名做一个对应关系 (列名和属性名映射配置)的

2.1 resultMap的使用

在项目开发中我们会经常用到resultMap,因为不可能你查询出来的结果就是需要的类型。例如你需要统计结果呢?count sum等等

1、首先我们写好mapper

UserMapper.xml红色字体

<span style="font-size:12px;font-weight: normal;"><?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">
<!--命名空间:分类管理sql隔离,方便管理-->
<mapper namespace="com.ycy.mybatis.dao.UserMapper">
    <!--定义个ResultMap-->
    <!--如果ResultMap定义在一个mapper.xml里面,直接使用resultMap的id ,如果不在同一个mapper要在resultMap前面加namespace-->
  <resultMap id="userResultMap" type="User">
        <id column="id" property="id" />
        <result column="username" property="username" />
        <result column="birthday" property="birthday"/>
        <result column="sex" property="sex" />
        <result column="address" property="address"/>
    </resultMap>
    <!--id标示一个sql语句,一个Statement,封装为一个MapperStatement-->
    <!--parameterType:传入参数类型;resultType:输出结果类型,指定映射的pojo-->
    <!--#{}标示一个占位符,-->
    <!--查询用户-->
    <!--oracle-->
    <!--   SELECT * FROM  USER  WHERE  username  LIKE  '%'||#{_parameter}||'%'-->
    <!-- mysql-->
    <select id="getUserById" parameterType="int" resultType="User">
         SELECT  * FROM USER WHERE id=#{id}
        </select>
    <select id="findUserByName" parameterType="com.ycy.mybatis.module.User" resultType="com.ycy.mybatis.module.User">
      SELECT * FROM  USER  WHERE  username  LIKE  '%${username}%'
    </select>
    <!--新增用户-->
    <insert id="insertUser" parameterType="User" >
        <!--插入值之后返回主键值-->
        <selectKey resultType="int" order="AFTER" keyProperty="id">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT  INTO USER  (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})
    </insert>
    <!--删除用户-->
    <delete id="deleteUser" parameterType="int">
    DELETE  FROM USER  WHERE  id=#{id}
    </delete>
    <!--更新用户-->
    <update id="updateUser" parameterType="User">
        UPDATE USER  SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
    </update>
    <select id="findUserResultMap" parameterType="user" resultMap="userResultMap">
    SELECT * FROM  USER
    <where>
        <include refid="query_user_where"/>
    </where>
</select>
    <!--sql查询片段-->
    <sql id="query_user_where" >
        <if test="username!=null and username!=''">
            AND  username  LIKE  '%${username}%'
        </if>
        <if test="sex!=null and sex!=''">
            AND  sex  =#{sex}
        </if>

    </sql>

</mapper></span>


2、写入mapper.java

UserMapper.java的红色字体

public interface UserMapper {
    public User getUserById(int id) throws Exception;
    public List<User> findUserByName(@Param("username") String username) throws Exception;
    public void  insertUser(User user) throws  Exception;
    public void deleteUser(int id)throws  Exception;
    public  void updateUser(User use) throws  Exception;
    <public List<User>  findUserResultMap(User user)throws Exception;</span>
}
3、测试
<span style="font-size:12px;">    /**
     * 查询用户使用ResultMap
     * @throws Exception
     */
    @Test
    public  void findUserResultMap() throws Exception {
        SqlSession sqlSession=sqlSessionFactory.openSession();
        UserMapper userMapper=  sqlSession.getMapper(UserMapper.class);
        User user=new User();
        user.setUsername("小明");
        List<User> userList=  userMapper.findUserResultMap(user);
        sqlSession.close();
        for (User user1 : userList) {
            System.out.println(user1.getUsername());
        }
    }</span>

3、动态sql和sql片段(重点之重)

3.1动态sql

将自定义查询条件组合,达到动态sql,使得sql更加灵活。主要:本段紧接上面2中的xml,所以只展示部门代码。
where标签:自动去掉sql语句的第一个and,帅气吧。!
if标签:跟我们的jstl标签一样,判断你需要判断的事情。
以上标签都是配对出现,为什么你,因为xml文件就这么玩耍啊
    <select id="findUserResultMap" parameterType="user" resultMap="userResultMap">
         SELECT * FROM  USER
          <where>
              <if test="username!=null and username!=''">
                  AND  username  LIKE  '%${username}%'
              </if>
              <if test="sex!=null and sex!=''">
                  AND  sex  =#{sex}
              </if>
          </where>
    </select>
3.2 sql片段
我sql片段就是把你经常用到的sql语句抽离出来,单独的为一段,这样你的臃肿的sql语句就更加简单,只需要加一个include标签,引入id。在不同的命名时候需要加命名空间,一般不建议垮命名空间(自己都找不到,虽然提供我还是不知道呀,你觉得呢(个人经验))。
    <select id="findUserResultMap" parameterType="user" resultMap="userResultMap">
         SELECT * FROM  USER
          <where>
            <include refid="query_user_where"/>
          </where>
    </select>
    <!--sql查询片段-->
    <sql id="query_user_where" >
        <if test="username!=null and username!=''">
            AND  username  LIKE  '%${username}%'
        </if>
        <if test="sex!=null and sex!=''">
            AND  sex  =#{sex}
        </if>
    </sql>

3.3 for each语句

statement通过foreach遍历parameterType中的集合类型。单独说,表名起重要性。

注意:此标签单独将,是为了引起注意,还有foreach标签必须使用在sql语句中

        <!--foreach标签
        open:标示开始字符
        close:标示结束字符
        collection:标示list名字
        item:自定义名字
        separate:分隔符
        -->
        <foreach collection="ids" open="id in ( " close=" )" item="id" separator=",">
            #{id}
        </foreach>

到此:mybatis的基础篇讲完,完全你可以运用到你的项目,对于一个初级工程师已改没有什么阻碍。
如有疑问:qq群:78275755(目前木有人,来啦更好)
本项目1-5章 初级教程 项目百度分享盘:
http://pan.baidu.com/s/1o63SUaI


Mybatis传多个参数(三种解决方案)(转载)

据我目前接触到的传多个参数的方案有三种。

第一种方案 

DAO层的函数方法 


1

Public User selectUser(String name,String area);

对应的Mapper.xml  


1

2

3

<select id="selectUser" resultMap="BaseResultMap">

    select  *  from user_user_t   where user_name = #{0} and user_area=#{1}

</select>

其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

第二种方案

此方法采用Map传多参数.

Dao层的函数方法


1

Public User selectUser(Map paramMap);

对应的Mapper.xml


1

2

3

<select id=" selectUser" resultMap="BaseResultMap">

   select  *  from user_user_t   where user_name = #{userName,jdbcType=VARCHARand user_area=#{userArea,jdbcType=VARCHAR}

</select>

Service层调用


1

2

3

4

5

Private User xxxSelectUser(){

Map paramMap=new hashMap();

paramMap.put(“userName”,”对应具体的参数值”);

paramMap.put(“userArea”,”对应具体的参数值”);

User user=xxx. selectUser(paramMap);}

个人认为此方法不够直观,见到接口方法不能直接的知道要传的参数是什么。

第三种方案

Dao层的函数方法


1

Public User selectUser(@param(“userName”)Stringname,@param(“userArea”)String area);

对应的Mapper.xml


1

2

3

<select id=" selectUser" resultMap="BaseResultMap">

   select  *  from user_user_t   where user_name = #{userName,jdbcType=VARCHARand user_area=#{userArea,jdbcType=VARCHAR}

</select

个人觉得这种方法比较好,能让开发者看到dao层方法就知道该传什么样的参数,比较直观,个人推荐用此种方案。


目录
相关文章
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
47 1
|
13天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
22天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
XML 前端开发 Java
XML基本概念入门学习指南
XML(eXtensible Markup Language)是一种可扩展的标记语言,和HTML语言语法类似,同属于标记语言。
|
23天前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
61 5
|
29天前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
117 3
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
358 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
XML Java 应用服务中间件
tomcat学习一:tomcat 目录及配置文件学习 server.xml 等
这篇文章是关于Apache Tomcat服务器的目录结构、配置文件(特别是server.xml)的详细介绍和学习指南。
64 0
tomcat学习一:tomcat 目录及配置文件学习 server.xml 等
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
100 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
XML 存储 数据格式