MyBatis映射器学习一

一.何为映射器?

映射器是由java接口和XML文件(或注解)共同组成的,它的作用如下:
1.定义参数类型
2.描述缓存
3.描述SQL语句
4.定义查询结果和POJO的映射关系

一个映射器的实现方式有两种,下面只了解xml方式:
1.通过XML文件方式实现
如:
RoleMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <mapper namespace="mybaits.mapper.RoleMapper">
 
   <select id="getRole" parameterType="long" resultType="role">
    select id,role_name as roleName,note from t_role where id = #{id}
   </select>
   
   <insert id="insertRole" parameterType="role">
     insert into t_role(role_name,note) values (#{roleName},#{note})
   </insert>
   
   <delete id="deleteRole" parameterType="long">
    delete from t_role where id = #{id}
   </delete>
 </mapper>

RoleMapper.java(接口)

package mybaits.mapper;
import mybaits.pojo.Role;
public interface RoleMapper {
	public Role getRole(Long id);
	public int deleteRole(Long id);
	public int insertRole(Role role);
}

xml映射文件和java接口文件一起相呼应才能发挥映射器的作用。

二.映射器的主要元素

1.select元素
1)配置
在这里插入图片描述
在这里插入图片描述
简单例子:

 <select id="getRole" parameterType="long" resultType="role">
    select id,role_name as roleName,note from t_role where id = #{id}
   </select>

它和接口里的getRole方法对应。

下面我们总结下:
1.id标出了这条SQL
2.parameterType定义参数类型
3.resultType定义返回值类型

1.2自动映射
有一个参数autoMappingBehavior,当它不设置为NONE的时候,MyBatis会提供自动映射的功能,
在settings中配置,它包含三个值:NONE 取消自动映射。PARTIAL 只会自动映射 。FULL 会自动映射任意复杂的结果集。 默认为PARTIAL
只要返回的SQL列名和JavaBean的属性一致,MyBatis就会帮助我们回填这些字段而无需任何配置。
在实际的情况中,大部分的数据规范都是要求每个单词用下划线分隔,而Java则使用驼峰命名法,于是使用列的别名就可以使得MyBatis自动映射,或者在配置文件中开启驼峰命名方式。

下面我们通过一个例子来学习:
Role.java

public class Role {
	private Long id;
	private String roleName;
	private String note;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getRoleName() {
		return roleName;
	}
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	public String getNote() {
		return note;
	}
	public void setNote(String note) {
		this.note = note;
	}
}

数据表如下:
在这里插入图片描述

下面是自动映射配置:

<select parameterType="id" id="getRole" resultType="com.Role">
   Select id, role_name as roleName,note from t_role where id=#{id}
</select>

使用SQL提供的别名功能使得查询结果和JavaBean的属性一一对应起来。

如果我们的数据库是规范命名的,POJO也采用驼峰式的,我们也可以设置mapUnderscoreToCamelCase为true,这样就可以实现从数据库到POJO的自动映射了。

1.3.传递多个参数
如果我们想要传递多个参数到映射器,我们可以有:

1)使用注解方式传递参数
此方式的使用受到参数个数的影响,当参数个数小于6时,它是最佳的传参方式,否则使用javaBean方式。

例子:
接口方法

public List<Role>findRoleByAnnotation(@Param("roleName")String rolename,@Param("note") 
String note);

映射配置:

<select id="findRoleByAnnotation" resultMap="roleMap">
   select id, role_name , note from t_role
   where role_name like concat('%',#{roleName},'%')
   and note like concat('%',#{note},'%')
</select>

2)使用javaBean传递参数

例子:
javaBean

package com.params;
public class RoleParam {
	private String roleName;
	private String note;
	public String getRoleName() {
		return roleName;
	}
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}
	public String getNote() {
		return note;
	}
	public void setNote(String note) {
		this.note = note;
	}
}

接口方法:

public List<Role> findRoleByParams(RoleParam params);

映射配置:

<select id="findRoleByParams" parameterType="com.params.RoleParam" resultMap="roleMap">
  select id, role_name , note from t_role
   where role_name like concat('%',#{roleName},'%')
   and note like concat('%',#{note},'%')
</select>

猜你喜欢

转载自blog.csdn.net/c1776167012/article/details/107402781
今日推荐