(十一)mybatis之映射器(select)

映射器

映射器的主要元素有八种:


元素名称


描述


select


查询语句,可自定义参数


insert


插入语句,执行后返回插入的条数


update


更新语句,执行后返回更新的条数


delete


删除语句,执行后返回删除的条数


sql


定义一部分的sql,被各处引用


resultMap


描述从数据库中得到的结果,提供映射规则


cache


给定命名空间的缓存配置


cache-ref


其他命名空间缓存配置的引用

 

select元素

①   简单地应用查询的select元素

<select id =”selectPerson” parameterType=”int” resultType=”hashmap”>

         SELECT * FROM PERSON WHERE ID=”#{id}”

</select>

在<select>标签中定义了,这个操作的标识id为”selectPerson”,而这个操作的接受的是int(Integer)类型的参数,并返回一个HashMap类型的对象。

其中的参数符号:

#{id}

就跟JDBC里面的SQL语句中的一个预处理语句参数“?”是一样的效果。

String selectPerson = “SELECT * FROM PERSON WHERE ID=?”;

而<select>标签中的标识属性id,需要与映射的Mapper类中的方法名一致。

public HashMap selectperson(int id);

这样就可以使用Mybatis调用SQL了。

②   自动映射

在Mybatis的配置文件(mybatis-config.xml)中的settings下的参数autoMappingBehavior,当它不设置为NONE的时候,Mybatis就会提供自动映射的功能------只要返回的SQL列名和POJO的属性一致,Mybatis就会回填这些字段而不需要任何设置。

在实际中,大部分的数据库规范都是要求每个单词用下划线分隔,而Java则是用驼峰命名法来命名,于是使用列的别名就可以使Mybatis自动映射,或者直接在配置文件中开启驼峰命名的方式

a)       使用列的别名

package com.entity

public class User{

         private int id;

         private String userName;

         public int getId(){

                   return id;

}

public void setId(int id){

         this.id = id;

}

public String getUserName(){

         return userName;

}

public void setUserName(String userName){

         this.userName = userName;

}

}

而数据库表(user_info)的字段(简略)如下:


字段


类型


说明


id


int(20)


角色编号,主键,递增


user_name


varchar(60)


角色名称

此时Mapper的映射语句是:

<select parameterType=”int” id=”getUser” resultType=”com.entity.User”>

         select id,user_name as username from user_info where id=#{id}

</select>

对于UserDao接口,提供的方法是:

public User getUser(int id);

b)       在配置文件中启用驼峰命名法

设置settings属性下的mapUnderscoreToCamelCase参数为true,这样就可以实现从数据库到POJO的自动映射了。

自动映射可以在settings元素中配置autoMappingBehavior属性值来设定。



说明


NONE


取消自动映射


PARTIAL


只会自动映射,没有定义嵌套结果集映射的结果集(默认值)


FULL


会自动映射任意复杂的结果集

 

③   传递多个参数:

a)         使用Map传递参数

我们可以使用Mybatis提供的Map接口作为参数来实现:

<select id=”findUserByMap” parameterType=”map” resultMap=”userMap”>

         select id,user_name from user_info where user_name like concat(‘%’,#{userName},‘%‘)

</select>

对于UserDao接口:

public List<User> findUserByMap(Map<int, String> params);

传递参数:

Map<int, String> paramsMap = new HashMap<int, String>();

paramsMap.put(“id”,1);

paramsMap.put(“username”,”tom”);

userMapper.findUserByMap(paramsMap);

使用Map传递参数。因为Map导致业务可读性丧失,从而导致后续扩展和维护的困难,所以这个方法废弃掉。

b)         使用注解方式传递参数

UserDao接口如下:

public List<User> findUserByAnnotation(@Param(“id”) int id, @Param(“userName”)String userName);

把映射器的XML修改为无需定义参数类型:

<select id=”findUserByAnnotation” parameterType=”map” resultMap=”userMap”>

select id,user_name from user_info where user_name like concat(‘%’,#{userName},’%’)

</select>

使用@Param注解传递多个参数,这种方式的使用受到参数个数(n)的影响。当n<=5时,它是最佳的传参方式;当n>5的时候,多个参数将给调用带来困难。

c)         使用JavaBean传递参数。

首先先定义一个UserParams的JavaBean:

package com.params;

public class UserParam{

         private String userName;

         public String getUserName(){

         return userName;

}

public void setUserName(String userName){

         this.userName = userName;

}

}

JavaBean传递参数:

<select id=”findUserByParams” parameterType=”com.params.UserParam” resultMap=”userMap”>

         select id,user_name from user_info where user_name like concat(‘%’,#{userName},’%’)

</select>

同样在RoleDao接口提供一个方法:

public List<User> findUserByParams(UserParam params);

当参数个数多于5个时,建议使用JavaBean方式。



参考文章:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

原文地址:https://www.cnblogs.com/NYfor2018/p/9110278.html

时间: 2024-10-02 23:59:31

(十一)mybatis之映射器(select)的相关文章

MyBatis XML 映射器 select、insert update 和 delete、参数

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在. 如果跟JDBC 代码进行对比,省掉了将近 95% 的代码. 1 selectCREATE TABLE person (id int(11) NOT NULL AUTO_INCREMENT,username varchar(100) DEFAULT NULL,password varchar(100) DEFAULT NULL,full_name varchar(100) DEFAULT NULL,first_name varchar

Mybatis映射器select

Mybatis映射器select 简单的select元素的应用 id 配合Mapper的全限定名,联合成为一个唯一的标示 parameterType 表示这条SQL接受的参数类型 resultType表示这条SQL返回的结果类型 #{firstName} 是被传递进去的参数 <select id="countUserByFirstName" parameterType="string" resultType="int"> select

(八)mybatis之映射器

映射器 映射器是由Java接口和XML文件(或注解)共同组成的,作用如下: ①   定义参数类型. ②   描述缓存. ③   描述SQL语句. ④   定义查询结果和POJO的映射关系. 以下用两种方式进行Mapper的实现. 1. XML文件配置方式实现Mapper 第一步:给出Java接口. package com.mapper; import com.entity.User; public interface UserMapper(){ public User getUser(int i

mybatis文件映射之select操作返回Map

1.返回的Map键为列所对应的名称,值就是具体的值 EmployeeMapper.java public Map<String,Object> getEmpByIdReturnMap(Integer id); EmployeeMapper.xml <select id="getEmpByIdReturnMap" resultType="map"> select id,last_name lastName,gender,email from t

Java Persistence with MyBatis 3(中文版) 第四章 使用注解配置SQL映射器

在上一章,我们看到了我们是怎样在映射器Mapper XML配置文件中配置映射语句的.MyBatis也支持使用注解来配置映射语句.当我们使用基于注解的映射器接口时,我们不再需要在XML配置文件中配置了.如果你愿意,你也可以同时使用基于XML和基于注解的映射语句. 本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l 动态SQL @SelectProvi

Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器

关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务器所提供的SQL语句的巨大威力.与此同时,MyBaits消除了书写大量冗余代码的痛苦,它使使用SQL更容易. 在代码里直接嵌套SQL语句是很差的编码实践,并且维护起来困难.MyBaits使用了映射器配置文件或注解来配置SQL语句.在本章中,我们会看到具体怎样使用映射器配置文件来配置映射SQL语句.

深入浅出MyBatis:「映射器」全了解

本篇文章是「深入浅出MyBatis:技术原理与实践」书籍的总结笔记. 上一篇总结了MyBatis的配置,详细说明了各个配置项,其中提到了映射器,它是MyBatis最强大的工具,也是使用最多的工具. 通过映射器,可以很容易的进行数据的增删改查操作,我们抽象下进行这些操作的关键点:传递查询参数.组装各种场景下的查询条件.关联查询.将查询结果映射为Java Bean对象或集合等.另外,可以通过延迟加载.缓存提高数据查询的性能. 本篇就按照这个思路进行总结,首先列举下映射器的主要元素,每个元素提供的配置

MyBatis配置文件(九)--mappers映射器

映射器是MyBatis中最复杂.最核心的组件,本文先介绍映射器的引入方法,其他的在我日后会再做分析和总结. 之前的文章中有提到过,映射器是由一个接口和一个XML配置文件组成,XML文件中需要定义一个命名空间namespace,它的值就是接口对应的全路径. 如我定义一个根据ID查询产品的映射器,需要以下两步: 第一步:创建一个接口,定义查询方法 1 public interface ProductMapper { 2 //查询接口 3 public Product selectById(Strin

MyBatis数据库连接的基本使用-补充Mapper映射器

补充 Mapper映射器的使用: Mapper映射器,google添加.Mapper映射器是将mapper.xml中配置的sql id,parameterType和resultMap按照规则一一映射到接口中,后续MyBatis创建完接口实例后,可以直接调用对象中的方法操作数据库,其底层还是调用了sqlSession的 API (1)什么是Mapper映射器 符合映射文件要求的一个接口:Mybatis会生成符合该接口要求的对象 (2)接口要求 a 方法名要与mapper.xml配置文件中sql的i