MyBatis-2:MyBatis使用常见问题与技巧

一.实体类与数据库表属性名称不一致

  在初始开发学习中,我们经常要求数据库表的字段名称和实体类对应属性的名称必须相同,原因就是这样便于底层的结果封装,但是当我们在实际开发中如果实体类和数据库不一致,就会产生结果全为null的情况,原因就是由于对应字段不一致所以没有将属性封装进去,这时我们就需要人为地指明映射关系。

1.方法一:使用mysql语句 as ,给属性赋别名(与实体类同名)


    

2.方法二:使用resultMap从全局配置,给属性赋别名(与实体类同名)

 
    
    
        
        
        
    
    
    

二.传参方式的注意事项

1.# 传参和 $ 传参的区别

(1)#传参:预编译处理,类似于之前学习jdbc时候的 ?占位符,提交的字符只会被当作当前sql语句的参数处理,不会改变原sql语句的含义,会在实际传入的值前后加引号
(2)$传参: 直接传参,参数会被直接拼接到sql语句中,不会在实际传入的值前后加引号,会改变原sql语句的含义引发sql注入问题

 #  select * from tb_student order by "stu_age";
 $  select * from tb_student order by stu_age;
 传参方式总结: 能用 # 用# ,用不了#用$
 
    
    

    
    

2.单个参数传递

(1)在传递单个基本类型的参数时#{}取参数的命名可以任意,他只表示一个占位符;而${}取参数只能使用

  •  ${value}或者${_parameter} 进行固定取参
  • 使用 @Param() 注解进行指定映射取参
 public List findAllOrderBy(@Param("orderBy") String orderBy);

(2)传递单个对象类型参数时,#{}和${}内都可以填写对象的相应属性名直接取参。但如果使用@Param()注解,则{}都必须使用 注解映射名.属性名 的形式进行取参。

 public User findUserByUserName(@Param("newuser") User uname);
 public List findAllOrderBy(@Param("orderBy") User orderBy);

    


    

3.多参数传递

(1)使用下标传参

#{}里面的数字代表你传入参数的顺序。由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始

public List getXXXBeanList(String xxId, String xxCode);  

  

(2)使用Param注解传参

 以前在 SELECT * FROM addr__info     where addr_id=#{addrId} and corp_id=#{corpId}

三.package以及typeAliases配置

1. : 使用typeAliases配置别名,它只能配置实体类的别名,这样mapper.xml文件中就不用再写全限定类名了

2. : 用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写

  
    
        

        
        
    

四.mapper.xml文件的扫描方式

1.在注册映射文件时使用标签进行包扫描时,需要映射文件全限定名和接口全限定名一样(包名+文件名相同),不然会报错。

MyBatis-2:MyBatis使用常见问题与技巧_第1张图片

   MyBatis-2:MyBatis使用常见问题与技巧_第2张图片

 

 

    
    
        
    

 2.在注册映射文件时使用标签进行注解开发时,需要映射文件全限定名和接口全限定名一样(包名+文件名相同),不然会报错。

3.在注册映射文件时使用标签进行配置开发时,不需要映射文件名和接口名一样,只需能指明配置文件位置即可。

    
        
    

 

你可能感兴趣的:(-----SSM框架-----)