BoomMan

爱生活,爱Coding.....

Mybatis的基础

Mybatis的动态SQL

Mybatis的动态SQL语法有如下几种:


在常用来判断是否为空时使用
增删改查
if:
  <if test="title != null">
    AND title like #{title}
  </if>
set常用来更新和删除
set:
    <set>
      <if test="username != null">username=#{username},</if>
      <if test="password != null">password=#{password},</if>
      <if test="email != null">email=#{email},</if>
      <if test="bio != null">bio=#{bio}</if>
    </set>
类似arraylist取 并且有index 常用来插入操作
foreach:

  <foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  </foreach>
在模糊查询中使用:
bind:

<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
  SELECT * FROM BLOG
  WHERE title LIKE #{pattern}
如果where后有一个静态条件
choose:
  <choose>
    <when test="title != null">
      AND title like #{title}
    </when>
    <when test="author != null and author.name != null">
      AND author_name like #{author.name}
    </when>
    <otherwise>
      AND featured = 1
    </otherwise>
  </choose>
如果where后全是动态条件
trim:

select * from user 

  <trim prefix="WHERE" prefixoverride="AND |OR">

    <if test="name != null and name.length()>0"> AND name=#{name}</if>

    <if test="gender != null and gender.length()>0"> AND gender=#{gender}</if>

  </trim>

prefix:前缀      
prefixoverride:去掉第一个
suffixoverride:去掉最后一个
suffix:后缀
结果:select * from user where    name = 'xx' and gender = 'xx'

Mybatis增删改查的使用

增删改查分别是:

/**
insert
delete
update
selset
*/


//需要注意的是resultType="" resultMap=""

//resultMap 用来返回pojo对象需要用<resultMap type="" id =""></resultMap>定义 我们在使用generator生成时会生成BaseResultMap

还会有到 Base_Column_List 可重用的sql 常用来代替*

Mybatis结果集的映射问题,类型配置别名

类型配置别名方式:

类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余

简单的来说就是每次写完全限定名很麻烦

在mybatis中有很多已经写好的别名 基础数据类型加_ 引用类型用小写

结果集映射在很多情况下都用到了别名

结果几种返回时单体的pojo用 resulttype,返回的是list用resultmap

为什么返回名称用map是因为在mybatis中字段使用map<>保存的 一行数据就是一个map map<”字段名”,”字段值”>

Mybatis中#{}和${}的使用和注意事项

#{}用的是最多的并且最好不要用${}是因为#{}用来替代?防止sql注入

在传递pojo时不用加注解@Param 直接用属性名称即可,但是一定要写对,我就写错过!-!

Mybatis和Maven项目中.xml文件是否在target中生成问题

在maven中配置: 这个不是java的问题是maven在编译时会过滤非.java文件,不在classes中生成

     <build>
       <resources>
            <!-- 编译之后包含xml   -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

Mybatis获取主键

原来写过博客 mysql插入与主键相同值的另一个字段

那么在mybatis中如何获取使用呢?

在insert中加上 useGeneratedKeys=”true” keyProperty=”..” keyProperty为你要自增的字段,在插入后会返回到原实体中

对于不支持主键的数据库可以使用selectKey来生成id减少代码中的复杂

获取数据库的主键自增SELECT LAST_INSERT_ID();

Mybatis中批量语句问题和

如果使用insert 中写入了多条语句用;分割开,还需要在url中配置 &allowMultiQueries=true

1.foreach进行sql动态处理

Mybatis分页

分页还是查询的一种,效率高的分页查询就是每次将上次查询的id或者可以截取的部分取出来用> <取出 这时是二分查找效率高 ~-~

Mybatis中like查询 使用bind

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boom_man/article/details/79217988
个人分类: Java-Web应用
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Mybatis的基础

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭