• Mybatis常用代码


    以下使用的数据库是Mysql。

    Mybatis字段类型映射

    在resultMap 中定义数据库字段对应的字段类型。

      
        
          
          
          
          
          
          
        
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    TINYINT 类型,可以直接用 布尔类型去映射。命名时,避免使用is开头,可以用 type,或者status 结尾。

    也可以使用property,如下所示

        
            
            
            
            
           
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ###Mybatis动态Sql:
    Mapper.xml如下:

    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    如果不想写1=1,也可以直接使用where标签。
    where标签知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且,若最后的内容是“AND”或“OR”开头的,where 标签也知道如何将他们去除。
    示例如下:

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    对应的Dao层如下:
    此处直接将对象作为方法参数,假设参数为Order对象,传递到xml中的参数就包括了Order对象的属性变量,如上的id、serialId。

    List  selectOrderList(Order order);
    
    • 1

    如果仅有一两个变量,也可以直接传递变量,如下:

    List  selectOrderList( @Param("id ")Integer id  , @Param("serialId ")String serialId );
    
    • 1

    Mybatis复用字段或条件:

    通过 标签将字段或查询条件包装起来,就可以用引用,减少重复。

    
        id, user_name , code
    
    
    
    	
    		
    			and t.user_name= #{userName}
    		
    				
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    Mybatis的 choose

    choose 按顺序判断其内部 when 标签中的 test 条件出否成立。类似于 java的 switch()。

    
    	 and t.user_code = #{ code1 } 
    	 and t.user_code = #{ code2 } 
    	and t.user_code = #{ code3 } 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ###Mybatis模糊查询:
    模糊查询可以使用LIKE关键字和CONCAT()函数。
    假设要查询的字段为product,从Dao层传递过来的参数为productName。
    示例如下:

         WHERE 1=1  
            AND product LIKE CONCAT('%',#{ productName , jdbcType=VARCHAR },'%')                  
    
    • 1
    • 2

    ###Mybatis使用IN关键字指定条件范围:
    IN关键字,需要通过foreach标签来实现。
    其中,collection对应的是Dao层传递过来的参数(一般是集合或数组),
    如果懒得使用 @Param(“”)指定参数名称,可以直接用 collection=“list”。
    item是自己命名的,表示范围中的变量名称。
    separator是指分隔符。index是指下标。
    示例如下:

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    对应的Dao层为:

    String  queryOrderListByCondition(@Param("clientIdList")List clientIdList);
    
    • 1

    ###Mybatis查询条件范围判断。
    经常需要用Mysql查询在某个时间段的数据。
    由于Mybatis中可能会将大于号>和小于号<视为标签,所以需要加上 字符。
    示例如下:

     WHERE 1=1
        = #{ beginTime , jdbcType=VARCHAR }  ]]>     
              
            
    
    • 1
    • 2
    • 3
    • 4

    ###Mybatis多表查询。
    多表查询,分为一对一、一对多、多对多。
    简单的Sql语句,一对一可以通过association标签实现,一对多和多对多通过collection标签实现。
    详情见: https://www.cnblogs.com/expiator/p/9328338.html
    复杂的Sql语句,可以直接设置返回的resultMap为Map,通过Map的键值对解析。
    示例如下:

       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    对应的Dao层如下:

    List> queryOrderList( @Param("productName")String  productName , 
    		     @Param("beginDate") String beginDate, @Param("endDate") String endDate );
    
    • 1
    • 2

    返回类型为List>,遍历List,获取Map中键对应的值即可。
    Controller层如下所示:

           //....
           //忽略其他无关逻辑     
           List> orderList=orderService.queryOrderList( productName, beginDate , endDate);
    	    if( orderList.size()>0 ) {
    	    	//取第一行的订货信息
    	         Map orderMap=orderList.get(0);
                    //Object转换为Integer类型
    	         Integer allNum =   (Integer) orderMap.get("allnum")   ;
                    //Object转换为String类型
    	         String userName = String.valueOf( orderMap.get("username ")  )   ;
             }
    	   
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Mybatis插入数据

    对应sql语句:

    insert into  表名 (字段1,字段2,字段3) values (字段1的值,字段2的值,字段3的值);
    
    • 1

    xml如下所示:
    其中的useGeneratedKeys=“true” keyProperty="id"表示主键自动产生。
    而clientId 、clientSecret 、clientName 、eCheck 都是属于Developer类的属性。在Dao层传递对象过来后,可以使用该对象的属性。

    
    		insert into t_bd_developer
    		
    			client_id,
    			client_secret, 
    			client_name,
    			isCheck,
    		
    		
    			#{clientId,jdbcType=VARCHAR},
    			#{clientSecret,jdbcType=VARCHAR}, 
    			#{clientName,jdbcType=VARCHAR},
    			#{eCheck,jdbcType=INTEGER},
    		
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    其中的 useGeneratedKeys=“true” keyProperty=“id” 表示自动产生主键,并将自动生成的主键通过keyProperty这个属性返回。

    Dao层则如下所示:

    int insert(Developer developer);
    
    
    • 1
    • 2

    Mybatis处理日期

    当jdbcType="DATE"类型时,返回的时间只有年月日(yyyy-MM-dd)的,当jdbcType=“TIMESTAMP”的时候,返回的时间是年月日和时分秒(yyyy-MM-dd HH:mm:ss)
    比如createDate为 2019-04-17,createTime为 2019-04-17 22:25:28,处理如下:

    
        
       
    
    
    • 1
    • 2
    • 3
    • 4

    Mybatis返回Map,并指定key

    可以使用 @Mapkey。
    xml跟平常的一样:

    
    
    • 1
    • 2
    • 3

    Mapper类,在方法上面添加一个注解 @MapKey(“userName”),括号里的值可以写User对象的一个字段 ,作为 map的 key,方法的返回类型为 Map.

    public interface UserMapper {
    
        @MapKey("userName")
        Map getUserMapper(String ids);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    参考资料:

    https://www.cnblogs.com/expiator/p/9328338.html
    https://blog.csdn.net/u011781521/article/details/79669180
    https://www.cnblogs.com/cyttina/p/3894428.html

  • 相关阅读:
    从书本《皮囊》摘录的几个句子
    php连接mssql数据库的几种方式
    生产环境TiDB集群缩容TiKV操作步骤
    国产麒麟V10系统如何运行exe文件,麒麟系统运行windows软件
    go 并发
    该使用什么API?APISpace给你答案
    virtio-blk简易驱动
    程序员上班摸鱼,这么玩才高端!
    Maven
    社区分享丨东风康明斯基于JumpServer构建统一运维安全审计平台
  • 原文地址:https://blog.csdn.net/sinat_32502451/article/details/132819574