MYSQL mybatis

 mysql

1 每个语句的结束记得加分号;

2where条件里再做if分支

    SELECT *FROM `table` WHERE IF( `parentID` is null, `plan_id` <10, `plan_id` >500 )

3 is null, is not null 用于判断某个字段或是变量为null或不为null.

4 isnull(expr) 的用法:
  如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。

5 ifnull(exp1,exp2)如果exp1是null的话,就用exp2的值,否则还是用exp1的值

6 NULLIF(expr1,expr2)    如果expr1 =   expr2     成立,那么返回值为NULL,否则返回值为   expr1

7 out参数,存储过程的参数要指明in,out。在调用存储过程时,用带@开头的变量来接值,比如 call procedure1(1,1,@result);

8 用户变量不用声明,直接在变量前加@就可用

9 select count(distinct id) as rowCount from table1

10 Mysql数据库里表名大小写敏感,字段名大小写不敏感,sql server里大小写不敏感

myBatis动态构建sql语句

if

<if test="state != null">
         state = #{state}
</if>

  

choose when otherwise,不想写太多 条件语句的时候,可以用这个

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <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>
</select>

  

where, 会自动去掉多余的and 或or

<select id="findActiveBlogLike"
     resultType="Blog">
  SELECT * FROM BLOG
  <where>
    <if test="state != null">
         state = #{state}
    </if>
    <if test="title != null">
        AND title like #{title}
    </if>
    <if test="author != null and author.name != null">
        AND author_name like #{author.name}
    </if>
  </where>
</select>

  

trim ,显示的去掉字符

<trim prefix="WHERE" prefixOverrides="AND |OR ">
  ...
</trim>

set,会自动去掉多余的逗号

<update id="updateAuthorIfNecessary">
  update Author
    <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>
  where id=#{id}
</update>

  

foreach

<foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  </foreach>

bind

<select id="selectBlogsLike" resultType="Blog">
  <bind name="pattern" value="‘%‘ + _parameter.getTitle() + ‘%‘" />
  SELECT * FROM BLOG
  WHERE title LIKE #{pattern}
</select>

  

mybatis里所有的判断都是用test  ="",比如test="username != null"

mybatis调用存储过程

 <!-- 创建多个文档 -->
    <select id="createProcedures" parameterType="map" >
	    <foreach collection="entities" item="entity" index="index" >
	    call SP_CREATE_PROCEDURE(
		#{entity.fileName, mode=IN, jdbcType=VARCHAR},
		#{entity.filePath, mode=IN, jdbcType=VARCHAR},
		#{entity.deviceIdsWithComma, mode=IN, jdbcType=VARCHAR},
		#{entity.createUserId, mode=IN, jdbcType=VARCHAR}
		);
	    </foreach>
    </select>

 

myBatis JDBC type和java数据类型对应表:

 <resultMap id="bookMapping" type="com.expample.base.repository.entity.BookEntity">
        <result property="id" column="Id"/>
        <result property="Name" column="Name"/>
        <result property="filePath" column="FilePath"/>
        <result property="createUserName" column="CreateUserName"/>
        <result property="createUserId" column="CreateUserId"/>
        <result property="createTime" column="CreateTime"/>
        <result property="isPublished" column="IsPublished"/>
        <collection property="assDevices" ofType="com.expample.base.repository.entity.BookCategoryAssEntity">
            <result property="id" column="CateotryID"/>
            <result property="name" column="CateotryName"/>
        </collection>
    </resultMap>
 <select id="getBookById"  parameterType="Integer" resultMap="bookMapping">
       SELECT
	    B.Id,
            B.Name,
            B.FilePath,
            E.Name as CreateUserName,
            E.Code as Code,
            B.CreateUserId,
            B.CreateTime,
            B.IsPublished,
            C.ID as CateotryID,
            C.Name as CateotryName
       FROM `Book` AS B
       LEFT JOIN `BookCategoryAss`AS BC on B.Id = BC.ProcedureId
       LEFT JOIN `Employee` AS E ON ON B.CreateUserId = E.Id
       LEFT JOIN `Category` AS C ON BC.Category.Id = C.Id
       WHERE B.id = #{id}
    </select>

  mybatis语法,从数据库查出来的字段可以多于或少于resultType指定的类的属性,都会按能对应的上的名字进行映射。

原文地址:https://www.cnblogs.com/Gift/p/10429591.html

时间: 2024-10-16 22:22:01

MYSQL mybatis的相关文章

as3+java+mysql(mybatis) 数据自动工具(七) - 完结

autoscript packed 文件地址:http://pan.baidu.com/s/1dDvgcO5 如果需要项目源码的话,可以留下邮箱,先声明一下,该工具主要是为了实现自动同步输出代码类文件的功能,所以代码写得并不是很规范什么的,没太大的参考意义,主要还是工具的实用性. 数据类和常量的配置基本就是前面所说明的那些了,现在来说一下怎么执行配置文件.执行配置文件需要写一个批处理文件,格式如下 java -classpath ./lib/*; AutoScript -? 这是一个执行 jav

as3+java+mysql(mybatis) 数据自动工具(六)

这篇来写一些常量定义的实例.我一般在配置常量的时候,都会让 bitOffset = 20,这样是一个比较好的分配,就是每个分组可以有 0xFFFFF(1048575) 个常量,0xFFF(4095) 个分组. 游戏中的客户端和服务端都需要的游戏常量,如下 <macros name="MacroDefine" author="idoublewei" note="常量宏定义"> <macro name="ACCOUNT_R

as3+java+mysql(mybatis) 数据自动工具(五)

现在介绍常量的配置,主要用于客户端(as3)与服务端(java)之间的常量同步,比如错误码.请求标识等 配置格式: <macros name="Macros" groupStart="16" groupEnd="128" bitOffset="20" author="idoublewei" note="宏定义"> <macro name="SEX_MALE&q

mysql+mybatis存储超大json

1. 场景描述 因前端界面需存储元素较多,切割后再组装存储的话比较麻烦,就采用大对象直接存储到mysql字段中,根据mysql的介绍可以存放65535个字节,算了算差不多,后来存的时候发现: 一是基本都中文,mysql用的utf-8存储,每个字符要占用3个字节,剩下就能存2万出头的样子(21845): 二是测试发现这个最大存储2万多字符,不仅仅是一个字段的长度,而是整条记录的所有字段加起来的长度,不够存. 2. 解决方案 2.1 方案说明 采用longtext类型进行存储.longtext也是变

Druid+mysql+mybatis做定时批量操作出现CommunicationsException: Communications link failure

最近使用Druid+mysql+mybatis实现定时批量操作,过一段时间就会抛出 2019-08-21 11:43:51.731 [task-3] ERROR com.alibaba.druid.pool.DruidPooledStatement - CommunicationsException, druid version 1.1.17, jdbcUrl : jdbc:mysql://localhost:3306/bim?serverTimezone=Asia/Shanghai&zeroD

IDEA新建SpringBoot+MySQL+MyBatis+Lombok+Spring Boot DevTools项目

一,IDEA新建SpringBoot+MySQL+MyBatis+Lombok+Spring Boot DevTools项目 1,新建项目的选中项 2,新建后我们需要配置勾选这个自动编译 3,按住shift+alt+ctrl+/,然后选中registry 4,然后选中这个选项 5,然后在 pom.xml文件添加以下代码,开启热部署工具,不配置不生效 <build> <plugins> <plugin> <groupId>org.springframework

mysql+mybatis 插入可递增字段库表操作

mysql本身类型介绍: BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值 需求本身id为16位,8字节长度已经完全满足,因此考虑采用数据库自增id来处理,关于性能方面的考虑,后续系统开发过程中,逐步考虑:这里暂且这样使用: 另外: 真正用到的只是两个链接放一下: 一个是建立mysql自增字段 http://www.cnblogs.com/

mysql,mybatis使用中遇到的类型转化的问题

产生原因还没有明白,先记录一下. 使用DATEDIFF函数,计算两个日期的时间差.在mybatis中,resultType 是map.在代码中,根据map的key取值的时候. 在mysql 5.5.39  中,得到的类型是Integer 在mysql 5.6.11 中,得到的类型是Long 目前解决方案是map取出的值,统一转化成string.在根据需要转化.产生原因目前还不清楚.先记录一下

MySQL+MyBatis下批量修改数据的问题

今天处理数据批量的更新,场景是这样子的,web站管理的字典功能,需要添加一个记录的整体描述,以及详细内容的描述.一个字典整体概述只有一组信息,但是其详细内容,会有很多项,不确定. 这个场景,在关系型数据库操作中,就是典型的1vN的问题,即一对多的问题. 做内容修改时,涉及到批量的更新过程.这里,只针对具体的问题描述细节,不过多介绍字典的设计. 字典的查询没有问题,mybatis的mapper函数如下: <resultMap id="FullConfResultMap" type=

Spring boot入门(二):Spring boot集成MySql,Mybatis和PageHelper插件

上一篇文章,写了如何搭建一个简单的Spring boot项目,本篇是接着上一篇文章写得:Spring boot入门:快速搭建Spring boot项目(一),主要是spring boot集成mybatis和pagehelper 关于mybatis和pagehelper的介绍,可以自行博客,网上很多类似的博客,这里,我直接上代码和项目搭建教程. 1.配置文件:在配置文件application.yml中配置MySql数据库连接池和Mybatis扫描包以及PageHelper分页插件 1 mybati