mybatis知识点分析之sql映射语句

本文详细分析了MyBatis的sql映射文件,包括Mapper、cache、resultMap、insert、update、delete和select等元素的使用。重点讲解了如何使用select进行单条件和多条件查询,以及如何利用resultMap处理复杂结果映射。同时,还介绍了MyBatis的缓存机制和动态SQL功能,如if、choose、where和foreach等。
摘要由CSDN通过智能技术生成

sql映射文件

mybatis最强大的低于就在于sql映射语句,mybatis专注于sql,对于开发人员来说,可以最大限度地调优,保证性能。

1.Mapper:映射文件的根节点,只有一个属性namespace(命名空间)

      作用:(1)用于区分不同的mapper,全局唯一。

                 (2)绑定Dao接口,即面向接口编程,当绑定一个接口,就不需要编写该接口的实现类,会通过接口的完全限
                          定名找到对应的 mapper配置来执行sql语句,所以namspqce必须要先接口的完全限定名。

2.cache:配置给定命名空间的缓存。

3.cache-ref:从其他命名空间引用缓存配置。

4.resultMap:用来描述数据库结果集和对象的对应关系。

5.sql:可以重用的sql快,可以被其他语句使用。

6..insert:映射插入语句。

7.update:更新映射语句。

8.delete:删除映射语句。

9.select:映射查询语句。

使用select完成单条件查询

<!--传入实体类参数时最好不要写parameterType=“实体类路径”,更不要写mybatis不用的parameterMap,会报错的。不写的话只要mapper接口中传入此类,mybatis会自动处理传参,可以直接使用里面的属性值。-->
<select id = "getUser" resultType = "User" parameterType = "string">
  select * from user where name like concat('%',#{name},'%')    //按照姓名模糊查询。
</select>

       id为GetUserByName的映射语句,参数类型为String,返回类型为User。

      1.#{参数名}:告诉MyBatis生成的PreparedStatement参数,相对于JDBC,该参数被标识为‘?’。

      2.id:命名空间的唯一标识符,可以被用来引用这条语句。

      3.parameterType:查询语句传入的参数类型和完全限定名或者别名,支持基础数据类型和复杂数据类型,上述传入的

        参数是个别名,代表Sting。

别名与java类型映射
别名 映射类型 别名 映射类型
string   String double Double
byte Byte float Float
long  Long boolean Boolean
short Short date Date
int Integer map Map
integer Integer hashmap HashMap
arraylist ArrayList list List

4.resultType:查询语句结果返回类型完全限定名或者别名。别名使用方式跟parameterType一样。

 

使用select完成多条件查询

      使用复杂数据类型,把条件参数封装为对象、Map进行入参。不管什么类型的参数,或者多少个参数,都可以封装为

      一个Map进行入参,通过map的key或者传入的参值。

<select id="getUser" resultType="User" parameterType="map">
     select * from user where userName like CONCAT('%',#{name},'%')  and age= #{age}
</select>

 

使用resultMap完成查询结果的展现

    resultMap:做自定义映射,实体类属性名和数据库列名不一致的情况下,并且可以指定要显示的列,使用灵活,应用广

    泛。

    实体类  User.xml

package com.mybatis.usermanage.entity;

public class User {
    private Integer id;
    private String name;
    private Integer age;
    //一对一查询使用
    private School school;
    //一对多查询使用
    private set<Furniture> furnitureSet = new HashSet<Furniture>();
    
	public User() {
		super();
	}
	
	public User(Integer id,String name, Integer age,School school) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.school=school;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}

	public School getSchool() {
		return school;
	}

	public v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值