• mybatis配置文件


    名字:

    mybatis-config.xml

    作用:

    配置自己的数据库地址、名字、密码以及mysql驱动

    ...
    
    
    	      
    	
    	 
    	
    	     
    	
    	
    	
    	
    	
    	   
    	    
    	
    	 
    	
    		  
    	    
    	    	  
    	        transactionManager
    	        
    	        dataSource
    	    
    	
    	
    	databaseIdProvider
    	
    	
    	
    
    ...
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    例子:

    
    
    
    
        
            
                
                
                    
                    
                    
                    
                
            
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    properties 标签

    1.如果两个配置文件有同一个字段,优先使用外部配置文件的
    2.可以直接引入外部配置文件,properties子元素中可以增加一些属性配置

    在这里插入图片描述

    在这里插入图片描述

    typeAliases 标签

    typeAliases类型别名是为java类型设置一个短的名字,存在的意义仅在于用来减少类完全限定名的冗余。

    java内置内建类型别名它们都不区分大小写,注意对基本类型名称重复采用的特殊命名风格。

    在这里插入图片描述

    注意:

    方法二中,每一个在包中的Java bean,在没有注解的情况下,会使用bean的首字母小写的非限定类名来作为它的别名。若有注解,则别名为其注解值。(实体类上使用注解:@Alias(“user”))

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

    setting 标签

    setting设置标签,这是Mybatis中极为重要的调整设置,它们会改变Mybatis的运行时行为.

    在这里插入图片描述

    environments标签

    这个标签是最主要的标签,就是用来配置数据源的,基本上都是在这里配置数据库的地址,用户名,密码等等。

    
    
    
    
        
            
                
                
                    
                    
                    
                    
                
            
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    dataSource子标签的type属性表达采用何种连接池方式,

    • POOLED

    • UNPOOLED

    • JNDI

    mappers标签

    mappers映射器属性,MapperRegistry:注册绑定我们的Mapper文件。有三种方式如下:

    方法一

    
    
    	
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    方法二

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

    方法三

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

    映射文件

    名字:

    UserMapper.xml

    作用:

    通过sql语句,将具体的对应文件返回。

    三个重要的描述

    parameterType(输入类型)

    resultType(输出类型)

    resultMap(映射实体类)

    传递参数的方式

    在mapper中传递多个参数的方式有四种:顺序传递法、@Param注解传参法、Map传参法、Java Bean传参法;

    1、顺序传递参数

    xxMapper.java

    public User selectUser(String name, int deptId);

    xxMapper.xml

    #{}里面的数字代表传入参数的顺序。这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

    2、@Param注解

    xxMapper.java

    public User selectUser(@Param(“userName”) String name, int Param(“deptId”)deptId);

    xxMapper.xml

    #{}里面的名称对应的是注解@Param括号里面修饰的名称。这种方法在参数不多的情况还是比较直观的,(推荐使用)。

    3、Map传参法

    xxMapper.java

    public User selectUser(Map params);

    xxMapper.xml

    #{}里面的名称对应的是Map里面的key名称。这种方法适合传递多个参数,且参数易变能灵活传递的情况。

    4、Java Bean传参数

    xxMapper.java

    public User selectUser(User user);

    xxMapper.xml

    #{}里面的名称对应的是User类里面的成员属性。这种方法直观,需要建一个实体类,扩展不容易,需要加属性,但代码可读性强,业务逻辑处理方便,推荐使用。(推荐使用)。

    parameterType(输入类型)

    1、简单类型

    2、pojo对象

    mybaits使用OGNL表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称

    [注]OGNL表达式:object Graphic Navigation Language (对象图导航语言),它是通过对象的取值方法来获取数据。在写法上把get给省略了。比如:我们获取用户的名称类中的写法:user.getUsername(); OGNL表达式写法:user.username 那么,mybatis中为什么能直接写username,而不用user呢?因为在parameterType中已经提供了属性所属的类,所以此时不需要写对象名

    3、pojo包装对象

    开发中通过pojo传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件还包括其他的查询条件(比如将用户购买商品消息也作为查询条件),这时可以使用包装对象传递输入pojo类参数中包含pojo

    输出结果方式 resultType

    可输出的类型有四种:返回一般数据类型(单条)、JavaBean 类型(单条)、List类型(多条)、Map类型

    1、一般数据类型(单条)

    比如要根据Id属性获得数据库中的某个字段值

    //**Mapper.java

    String getStuNameById(Integer id);

    2、JavaBean类型(单条)

    比如根据某个字段获得数据库中的信息,把查询的结果信息封装成某个javaBean类型的数据,

    //**Mapper.java

    Student getStuById(Integer id);

    3、List类型(多条)

    有时候开发者查询的数据不止一条,比如,模糊查询,全表查询等,这时候返回的数据可能不止一条数据,对于多数据的处理可以存放在List集合中

    //**Mapper.java

    List getAllStus();

    4、Map类型

    mybatis支持将查询的数据封装成Map,

    如果查询的结果是一条,开发者可以把查询的数据以(表字段名,对应的值)方式存入到map中

    //**Mapper.java

    Map getStuAsMapById(Integer id);

    如果查询的结果是多条数据,我们也可以把查询的数据以{表中某一字段名, JavaBean}方式来封装成Map

    ①mapper(dao)接口

    // 查询所有学生的信息,把数据库中的 ‘id’ 字段作为 key,对应的 value 封装成 Student 对象
    // @MapKey 中的值表示用数据库中的哪个字段名作 key
    @MapKey(“id”)
    Map getAllStusAsMap();

    ②Mapper.xml 映射文件

    返回map集合时返回的类型是List>

    ①mapper(dao)接口

    List> getAllStuAsMapById(Integer id);

    ②Mapper.xml 映射文件

    resultMap(映射实体类)

    实体类属性名和表中字段名不一样时,无法映射到值,输出为Null。

    这是因为mybatis会根据这些从数据库中查询到的列名,将列名转化为小写(数据库不区分大小写)去对应实体类中查询相应列名的set方法设值,由于找不到setUserName(),所以会返回Null值。

    解决办法

    方法一

    第1种:通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。

    
    
    
    • 1
    • 2
    • 3
    • 4

    方法二

    第2种:通过resultMap 中的来映射字段名和实体类属性名的一一对应的关系。

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

    resultMap的说明:

    
    
    	
    	
    	
    	
    	
    	  
    	  
    	
    	
    	
    	
    	  
    	  
    	
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    1)resultMap 标签

    type属性:指开发者需要映射到的类对象

    id属性:表示resultMap在select标签中使用时id的名称

    方案一 -->为列名指定别名,别名和Java实体类的属性名一致 
    
    	 	
    
    方案二 --> 使用结果集映射ResultMap [推荐]
    
    	
            
            
            
            
        
    
    	
        
    
    ===========================标签描述====================================
    
    
    --> 
    	
    	column   --> 表的主键字段,或者可以为查询语句中的别名字段
    	jdbcType --> 字段类型
    	property --> 映射pojo对象的主键属性
    
    result标签 --> 属性用于配置映射关系时使用
    
    	column   --> 表的一个字段(可以为任意表的一个字段)
    	jdbcType --> 字段类型
    	property --> 映射到pojo对象的一个属性(须为type定义的pojo对象中的一个属性)
    
    association标签 --> 
    
    	property --> pojo的一个对象属性
    	javaType --> pojo关联的pojo对象
    
    	id标签--> 
    	
    		column   --> 关联pojo对象对应表的主键字段
    		jdbcType --> 字段类型
    		property --> 关联pojo对象的主席属性	
    
    	result标签 -->
    	
    		column   --> 任意表的字段
    		jdbcType --> 字段类型
    		property --> 关联pojo对象的属性
    					
    	select   -->表示所需要的哪个类的查询语句
    	column   -->从resultMap中传过去用作查询参数
    	ofType   -->集合属性中的对象(可以不写)
    
    collection标签 -->
    
    	property --> 表示pojo类集合中的属性
    	select   -->表示所需要的哪个类的查询语句
    	column   -->从resultMap中传过去用作查询的参数
    	ofType   -->集合属性中的对象(可以不写)
    
    ===========================标签细节====================================
    
    id & result
    
    	示例
    
    		
    		
    
    	含义
    	
    		这些是结果映射最基本的内容,id和result都将一个列的值映射到一个简单的数据类型
    
    		的属性或字段。这两者之间的唯一不同是,id表示的结果将是对象的标识属性,这些在
    
    		比较对象实例时用到,这样可以提高整体的性能,尤其是缓存和嵌套结果映射的时候
    ```
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
  • 相关阅读:
    [每周一更]-(第63期):Linux-nsenter命令使用说明
    数据库MySQL(四):表中字段约束和外键约束
    最短路相关笔记
    961题库 北航计算机 计算机网络 附答案 简答题形式
    GDPU Java 天码行空9
    wordpress 上传附件中文文件名乱码解决办法(for Windows)
    猿创征文|一个网站的完整部署流程
    关于3D-AIGC的调研与探讨
    AI算力碎片化:矩阵乘法的启示
    list容器(20221117)
  • 原文地址:https://blog.csdn.net/dongdongdongJL/article/details/128023168