栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis-XxxxMapper.xml-SQL 映射文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis-XxxxMapper.xml-SQL 映射文件

MyBatis-XxxxMapper.xml-SQL 映射文件 1.官方文档 1.文档地址

https://mybatis.org/mybatis-3/zh/sqlmap-xml.html

2.XxxMapper.xml-基本介绍

1、MyBatis 的真正强大在于它的语句映射(在 XxxMapper.xml 配置), 由于它的异常强大, 如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。 MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。

2、SQL 映射文件常用的几个顶级元素(按照应被定义的顺序列出)

cache – 该命名空间的缓存配置。
cache-ref – 引用其它命名空间的缓存配置。 
resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。 
parameterType - 将会传入这条语句的参数的类全限定名或别名
sql – 可被其它语句引用的可重用语句块。
insert – 映射插入语句。
update – 映射更新语句。
delete – 映射删除语句。 
select – 映射查询语句。
3.XxxMapper.xml-详细说明 1.新建 Module xml-mapper

1、在原来的项目中,新建 xml-mapper 项目演示 xml 映射器的使用

2、新建 Module 后,先创建需要的包,再将需要的文件/资源拷贝过来(这里我们拷贝 Monster.java、resources/jdbc.properties 和 mybatis-config.xml)

3、创建 MonsterMapper.java MonsterMapper.xml 和 MonsterMapperTest.java

2.基本使用
  1. insert、delete、update、select 分别对应增删改查的方法和 SQL 语句的映射.
  2. 如何获取到刚刚添加的 Monster 对象的 id 主键


    INSERT INTO `monster`
    (`age`, `birthday`, `email`, `gender`, `name`, `salary`)
    VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})

3. parameterType(输入参数类型)

● parameterType(输入参数类型)

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

● parameterType-应用案例

案例 1:请查询 id = 1 或者 name = ‘牛魔王’ 的妖怪

案例 2:请查询 name 中 包含 “牛魔王” 的妖怪

1.修改 MonsterMapper.java, 增加方法接口

public interface MonsterMapper {

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


    // 查询名字中含义'精'妖怪
    List findMonsterByName(@Param("name") String name);
}
  1. 修改 MonsterMapper.xml


    
    
    



    select * from monster where name like '%${name}%'


  1. 修改 MonsterMapperTest.java ,完成测试
@Test
public void findMonsterByNameORId(){
    Monster monster = new Monster();
    monster.setName("牛魔王");
    monster.setId(1);
    List monsterList = monsterMapper.findMonsterByNameORId(monster);
    for (Monster m : monsterList) {
        System.out.println(m);
    }
}

@Test
public void findMonsterByName(){
    List monsterList = monsterMapper.findMonsterByName("牛魔王");
    for (Monster monster : monsterList) {
        System.out.println(monster);
    }
}

4.传入 HashMap

● 传入 HashMap(重点)

  1. HashMap 传入参数更加灵活,比如可以灵活的增加查询的属性,而不受限于 Monster 这 个 Pojo 属性本身
  2. 演示如何遍历一个 List> 的数据类型

● 传入 HashMap- 应用实例

要求:声明一个方法,按传入参数是 HashMap 的方式,查询 id >=1 并且 salary 大于 40 的所有妖怪

  1. 修改 MonsterMapper.java
//查询 id >= 1 并且 salary 大于 40, 要求传入的参数是 HashMap
List findMonsterByMap(Map map);

2.修改 MonsterMapper.xml



    SELECT id,name FROM monster WHERe id >= #{id} AND salary > #{salary}

3.测试

@Test
public void findMonsterByMapAndReturnMap(){
    Map map = new HashMap<>();
    // 注意:如果入参是map,这里的id、salary在map中必须存在对应的key,mybatis才能m匹配#{id} #{salary}
    map.put("id",1);
    map.put("salary",40);
    List> mapList = monsterMapper.findMonsterByMapAndReturnMap(map);
    for (Map monsterMap : mapList) {
        System.out.println(monsterMap);
        //遍历monsterMap去除属性和值
        for (String key : monsterMap.keySet()) {
            System.out.println(key+"="+monsterMap.get(key));
        }
        for (Map.Entry entry : monsterMap.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
        }
        
    }
}
5.resultMap(结果集映射) 1.应用实例

● 基本介绍

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

● 案例演示

  1. 创建表 user
-- 创建的 user 表
CREATE TABLE `user` (
	`user_id` INT NOT NULL AUTO_INCREMENT,
	`user_email` VARCHAr ( 255 ) DEFAULT '',
	`user_name` VARCHAr ( 255 ) DEFAULT '',
PRIMARY KEY ( `user_id` ) 
) CHARSET = utf8

2.创建srcmainjavacomllpentityUser.java,这里我们故意的不适用标准的小驼峰方式,让实体和数据库字段不匹配

@Data
public class User {
    private Integer user_id;
    private String username;
    private String useremail;
}

3.创建srcmainjavacomllpmapperUserMapper.java

public interface UserMapper {

    //添加方法
    void addUser(User user);

    //查询所有的 User
    List findAllUser();

}

4.创建srcmainjavacomllpmapperUserMapper.xml


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


    
    
        
        
    
     SELECT user_id,user_name AS username, user_email AS useremail FROM user  

2、说明:如果是 MyBatis-Plus 处理就比较简单, 可以使用 注解@TableField 来解决 实体字段名和表字段名不一致的问题,还可以使用@TableName 来解决 实体类名和表名 不一致的问题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1003036.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号