mybatis中的XML文件配置->mybatis-config.xml+XxxxMapper.xml-SQL

目录

一.mybatis-config.xml-配置文件详解

1.说明

2.properties 属性

3.settings 全局参数定义--》通常使用默认

 4.typeAliases 别名处理器

5.typeHandlers 类型处理器

 6.environments 环境

二.XxxxMapper.xml-SQL 映射文件

1.XxxMapper.xml-基本介绍

2.XxxMapper.xml-详细说明

2.1基本使用

3.parameterType(输入参数类型) 

4.传入 HashMap

5.resultMap(结果集映射)

注意事项和细节


一.mybatis-config.xml-配置文件详解

1.说明

1.1 mybatis 的核心配置文件 (mybatis-config.xml) ,比如配置 jdbc 连接信息,注册 mapper
等等 , 我们需要对这个配置文件有详细的了解

2.properties 属性

通过该属性,可以指定一个外部的 jdbc.properties 文件,引入我们的 jdbc 连接信息

代码演示

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
jdbc.user=root
jdbc.pwd=hong
jdbc.driver就是key值,名字随便起

当然使用一个配置文件在另外一个文件中自然需要引入(在前面引入)


    
    
                         
                
                
                

3.settings 全局参数定义--》通常使用默认

这是mybatis中极为重要的调整设置,他们会改变mybatis的运行时行为

mybatis中的XML文件配置->mybatis-config.xml+XxxxMapper.xml-SQL_第1张图片

 4.typeAliases 别名处理器

1. 别名是为 Java 类型命名一个短名字。它只和 XML 配置有关,用来减少类名重复的部分
2. 如果指定了别名 , 我们的 MappperXxxx.xml 文件就可以做相应的简化处理
3. 注意指定别名后,还是可以使用全名的
    
    
        

        
        
    

就可以直接使用类名操作了

5.typeHandlers 类型处理器

1. 用于 java 类型和 jdbc 类型映射
2. Mybatis 的映射基本已经满足,不太需要重新定义
3. 这个我们使用默认即可,也就是 mybatis 会自动的将 java jdbc 类型进行转换 .
4. java 类 型 和 jdbc 类 型 映 射 关 系 一 览 [ 手 册 ]
https://mybatis.org/mybatis-3/zh/configuration.html#typeHandlers

mybatis中的XML文件配置->mybatis-config.xml+XxxxMapper.xml-SQL_第2张图片

 6.environments 环境

1. resource 注册 Mapper 文件: XXXMapper.xml 文件(常用,使用过)



2. class:接口注解实现(使用过) 

        
        

3. url:外部路径,使用很少,不推荐,

4. package 方式注册 : 


         解读
            1. 当一个包下有很多的Mapper.xml文件和基于注解实现的接口时,为了方便,我们可以以包方式进行注册
           2. 将下面的所有xml文件和注解接口 都进行注册

二.XxxxMapper.xml-SQL 映射文件

1.XxxMapper.xml-基本介绍

1 MyBatis 的真正强大在于它的语句映射 ( XxxMapper.xml 配置 ), 由于它的异常强大 ,
果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。
MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。
2 SQL 映射文件常用的几个顶级元素(按照应被定义的顺序列出):
cache – 该命名空间的缓存配置。
cache-ref – 引用其它命名空间的缓存配置。
resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
parameterType - 将会传入这条语句的参数的类全限定名或别名
sql – 可被其它语句引用的可重用语句块。
insert – 映射插入语句。
update – 映射更新语句。
delete – 映射删除语句。
select – 映射查询语句。

2.XxxMapper.xml-详细说明

2.1基本使用

1. insert delete update select 这个我们在前面讲解过,分别对应增删改查的方法和 SQL
语句的映射 .
2. 如何获取到刚刚添加的 Monster 对象的 id 主键 [ 前面使用过了 ]

mybatis中的XML文件配置->mybatis-config.xml+XxxxMapper.xml-SQL_第3张图片

3.parameterType(输入参数类型) 

● parameterType( 输入参数类型 )
1. 传入简单类型,比如按照 id Monster( 前讲过 )
2. 传入 POJO 类型,查询时需要有多个筛选条件
3. 当有多个条件时,传入的参数就是 Pojo 类型的 Java 对象 , 比如这里的 Monster 对象
4. 当传入的参数类是 String 时,也可以使用 ${} 来接收参数

● parameterType- 应用案例
案例 1: 请查询 id = 1 或者 name = ' 白骨精 ' 的妖怪
案例 2: 请查询 name 中 包含 " 牛魔王 " 的妖怪

代码:案例1

   //通过id 或者名字查询
    public List findMonsterByNameORId(Monster monster);


    
    
    public void findMonsterByNameORId() {
        Monster monster = new Monster();
        monster.setId(1);
        monster.setName("狐狸精-100");
        List monsters =
                monsterMapper.findMonsterByNameORId(monster);

        for (Monster m : monsters) {
            System.out.println("m-" + m);
        }

        if (sqlSession != null) {
            sqlSession.close();
        }

        System.out.println("操作成功~");
    }

案例二:

    
    
    public void findMonsterByName() {

        List monsters = monsterMapper.findMonsterByName("牛魔王");
        for (Monster monster : monsters) {
            System.out.println("monster--" + monster);
        }

        if (sqlSession != null) {
            sqlSession.close();
        }

        System.out.println("操作成功~");

    }

4.传入 HashMap

传入 HashMap( 重点 )
1. HashMap 传入参数更加灵活,比如可以灵活的增加查询的属性,而不受限于 Monster
Pojo 属性本身
2. 演示如何遍历一个 List> 的数据类型
传入 HashMap- 应用实例 1
要求:声明一个方法,按传入参数是 HashMap 的方式,查询 id > 10 并且 salary 大于 40
的所有妖怪
1. 修改 MonsterMapper.java, 增加方法接口
//查询 id > 10 并且 salary 大于 40, 要求传入的参数是 HashMap
public List
findMonsterByIdAndSalary_PrameterHashMap(Map map);
2. 修改 MonsterMapper.xml

 public void findMonsterByIdAndSalary_PrameterHashMap() {
        //Diamond types are not supported at language level '5'
        //如何解决.=> 在pom.xml文件中指定编译器版本
        /*
             
            
                UTF-8
                1.8
                1.8
                1.8
            
         */

        Map map = new HashMap<>();
        map.put("id", 10);
        map.put("salary", 40);
        List monsters =
                monsterMapper.findMonsterByIdAndSalary_PrameterHashMap(map);

        for (Monster monster : monsters) {
            System.out.println("monster--" + monster);
        }

        if (sqlSession != null) {
            sqlSession.close();
        }

        System.out.println("操作成功~");

    }
传入和返回 HashMap- 应用实例
要求:将上面的方法的改成返回参数也以 HashMap 的类型
1. 修改 MonsterMapper.java
//查询 id > 10 并且 salary 大于 40, 要求传入的参数是 HashMap
public List>
findMonsterByIdAndSalary_PrameterHashMap_ReturnHashMap(Map map);
2. 修改 MonsterMapper.xml

3. 修改 MonsterMapperTest.java
    public void findMonsterByIdAndSalary_PrameterHashMap_ReturnHashMap() {

        Map map = new HashMap<>();
        map.put("id", 10);
        map.put("salary", 40);
        List> monsterList =
                monsterMapper.findMonsterByIdAndSalary_PrameterHashMap_ReturnHashMap(map);

        //取出返回的结果-以map取出
        //回顾java基础,map遍历
        for (Map monsterMap : monsterList) {
            //System.out.println("monsterMap-" + monsterMap);

            //遍历monsterMap(方式1) ,取出属性和对应值
            //Set keys = monsterMap.keySet();
            //for (String key : keys) {
            //    System.out.println(key + "=>" + monsterMap.get(key));
            //}

            //遍历monsterMap(方式2) ,取出属性和对应值
            for (Map.Entry entry : monsterMap.entrySet()) {
                System.out.println(entry.getKey() + "==>" + entry.getValue());
            }
            System.out.println("------------------------");
        }

        if (sqlSession != null) {
            sqlSession.close();
        }

        System.out.println("操作成功~");

    }

5.resultMap(结果集映射)

基本介绍
当实体类的属性和表的字段名字不一致时,我们可以通过 resultMap 进行映射,从而屏蔽
实体类属性名和表的字段名的不同 .

简单理解:就是当数据库中的字段名和我们pojo的属性名不一样的时候(因为我们在填写对应的xml文件的时候#{}要和属性名一样),使用resultMap 做一个专门的映射指定就可以找到了。我理解为就是将数据库的字段改变成属性的名字。

举例:

User表字段:

`user_id` INT NOT NULL AUTO_INCREMENT, 
`user_email` VARCHAR(255) DEFAULT '',
 `user_name` VARCHAR(255) DEFAULT '',

pojo类属性:

private Integer user_id;
private String username;
private String useremail;

xml中的配置(主要就在这里) 



    
    
        INSERT INTO `user` (`user_email`,`user_name`)
        VALUE (#{useremail}, #{username})
    

    
    
        
        
    
    


    
    
    
    

测试

public class UserMapperTest {

    //属性
    private SqlSession sqlSession;
    private UserMapper userMapper;

    //初始化
    @Before
    public void init() {

        sqlSession = MyBatisUtils.getSqlSession();
        userMapper = sqlSession.getMapper(UserMapper.class);

    }

    @Test
    public void addUser() {
        User user = new User();
        user.setUsername("jack");
        user.setUseremail("[email protected]");

        userMapper.addUser(user);

        //如果是增删改, 需要commit()
        if(sqlSession != null) {
            sqlSession.commit();
            sqlSession.close();
        }

        System.out.println("操作OK~");
    }

    @Test
    public void findAllUser() {
        List users = userMapper.findAllUser();
        for (User user : users) {
            System.out.println("user--" + user);
        }

        if(sqlSession != null) {
            sqlSession.close();
        }

        System.out.println("操作OK~");
    }

注意事项和细节

1 、解决表字段和对象属性名不一致 , 也支持使用字段别名--》复用性不高
  
    
    
    
2 、说明:如果是 MyBatis-Plus 处理就比较简单 , 可以使用 注解 @TableField 来解决
实体字段名和表字段名不一致的问题,还可以使用 @TableName 来解决 实体类名和表名
不一致的问题​​​​​​​

你可能感兴趣的:(Java框架,mybatis,java,mysql,后端,xml)