`
bit1129
  • 浏览: 1069999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件

 
阅读更多

 SQL映射配置文件一方面类似于Hibernate的映射配置文件,通过定义实体与关系表的列之间的对应关系。另一方面使用<select>,<insert>,<delete>,<update>元素定义增删改查的SQL语句,

这些元素包含三方面内容

1. 要执行的SQL语句

2. SQL语句的入参,比如查询条件

3. SQL语句的返回结果,包括查询结果,更新结果等等

 

 

基本的SQL映射配置:

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="com.mybatis3.mappers.StudentMapper">

    <!--resultMap定义了SQL列与type指定的POJO类的属性之间的映射关系-->
    <!--type属性表示要转换的ORM的POJO-->
    <!--id属性用来指示resultMap这个配置,在配置的其它地方可以引用-->
    <resultMap type="Student" id="StudentResult">
		<id 	property="studId" column="stud_id"/>
		<result property="name" column="name"/>
		<result property="email" column="email"/>
		<result property="dob" column="dob"/>
	</resultMap>

    <!--resultMap属性指的是一行转换规则-->
    <!--这个语句根据需要可以返回List或者唯一的一行数据-->
  	<select id="findAllStudents" resultMap="StudentResult">
    	select * from Students
  	</select>

    <!--如果SQL查询返回多行数据,这个查询可以请求MyBatis返回一个List<Student>-->
  	<select id="findStudentById" parameterType="int" resultType="Student">
        <!--如果查询的列名称与POJO的属性名不一致,使用SQLas语法-->
    	select stud_id as studId, name, email, dob from Students where stud_id=#{studId}
  	</select>

    <!--如何返回插入语句的主键-->
  	<insert id="insertStudent" parameterType="Student">
  		INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB) VALUES(#{studId},#{name},#{email},#{dob})
  	</insert>
  	
  	<update id="updateStudent" parameterType="Student">
  		UPDATE STUDENTS SET NAME=#{name}, EMAIL=#{email}, DOB=#{dob} WHERE STUD_ID=#{studId}
  	</update>
  	
</mapper>

 

resultMap元素

resultMap元素是MyBatis对查询结果进行ORM的主要配置项,简单的说它类似于Hibernate的实体与POJO的映射配置,resultMap的属性和子配置项包括:

 

resultMap元素的属性

  • id:定义resultMap配置项的唯一ID,用于标示resultMap,在<select>中可以引用
  • type: 定义要映射的实体类型,可以使用类型别名
  • extends:用于具有继承关系的resultMap的定义,比如实体B继承自实体A,那么定义B的resultMap时,可以让它继承自A对应的resultMap
  • autoMapping:true|false 含义用法未知

SQL表列名与POJO字段之间的映射关系

  	<select id="findStudentById" parameterType="int" resultType="Student">
            select stud_id, name, email, dob from Students where stud_id=#{studId}
  	</select>
  • 当列名与POJO属性名一样时,MyBatis自动将列的取值设置到POJO字段上,比如
  • 当列名与POJO属性名不一样时,MyBatis不会将列的取值设置到POJO字段上,所以上面的例子中返回的Student对象,studId字段为null
  • 可以使用SQL的列名的as语法,将列名重命名为对应的POJO的属性名如 select stud_id as studId
  • 大多数的列名和POJO的字段名通常是不一致的,而且我们会写多个<select>查询语句,如果都是用列名as语法进行重命名,那么将会很繁琐,MyBatis提供了一种列名和属性名映射关系,称之为ResultMap,这里的Map是Mapping,即结果的映射,而不是指result是一个Map,ResultMap的真实含义类似于Hibernate的Table与POJO之间的映射关系

 

    <!--resultMap定义了SQL列与type指定的POJO类的属性之间的对象关系-->  
    <!--type属性表示要转换的ORM的POJO-->  
    <!--resultMap的id属性用来指示resultMap这个配置,在配置的其它地方可以引用-->  
    <resultMap type="Student" id="StudentResult">  
        <!--The <id> element is similar to <result> but is used to map the identifier property  that is used for comparing objects.-->
        <id  property="studId" column="stud_id"/>  
        <result property="name" column="name"/>  
        <result property="email" column="email"/>  
        <result property="dob" column="dob"/>  
    </resultMap>  
  
    <!--resultMap属性指的是一行转换规则-->  
    <!--这个语句根据需要可以返回List或者唯一的一行数据-->  
    <select id="findAllStudents" resultMap="StudentResult">  
        select * from Students  
    </select> 

 

 resultMap和resultType

  •  在一个select配置项中,select可以包含resultMap或者resultType,用于指定返回的类型,但是二者不能同时出现
  • resultMap和resultType的含义是select结果集的一行进行映射,不是说整个SQL的查询结果的类型是resultMap或者resultType类型
  • sqlSession.selectOne("<select>.id")表示之返回一行数据,sqlSession.selectList表示返回多行数据

 

 

主键自动增长的方式插入数据

 

<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId">
    INSERT INTO STUDENTS(NAME, EMAIL, PHONE)VALUES(#{name},#{email},#{phone})
</insert>

 

  • useGeneratedKeys为true表示插入数据时使用MySQL自动生成主键,
  • keyProperty表示这个主键值存储在哪个属性中

 上面这个insert操作,传入的参数是Student类型,由于没有持久化,所以Student的studId属性是null,执行完insert语句后,作为传入参数的Student对象的studId包含了数据库自动生成的主键ID

 

API执行增删改查的方式

还有第三种,注解的方式,注解这种方式,实际工作中基本不会用

 

Mapper方式

1.定义接口StudentMapper,与配置文件中mapper的namespace一致

 

<mapper namespace="com.mybatis3.mappers.StudentMapper">

 

2.定义StudentMapper接口

 

StudentMapper接口的方法签名与配置文件中的<select>,<insert>,<update>,<delete>保持一致,方法名id属性,参数类型parameterType,返回结果类型resultType或者resultMap

 

package com.mybatis3.mappers;

import java.util.List;

import com.mybatis3.domain.Student;


public interface StudentMapper {

    List<Student> findAllStudents();

    Student findStudentById(Integer id);

    void insertStudent(Student student);

    void updateStudent(Student student);

    List<Student> findStudentById2();

}

 

注意:

  • Mapper的权限定类名跟mapper的namespace属性保持一致
  • 方法签名与配置文件中的<select>,<insert>,<update>,<delete>保持一致,方法名id属性,参数类型parameterType,返回结果类型resultType
  • StudentMapper的用法
	public List<Student> findAllStudents() {
        SqlSession sqlSession = MyBatisSqlSessionFactory.getSqlSession();
        try {
            StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); //SqlSession定义了获取Mapper的方法
            return studentMapper.findAllStudents();
        } finally {
            sqlSession.close();
        }
    }

 

SQL映射的方式

Student student = (Student)sqlSession.selectOne("com.mybatis3.mappers.StudentMapper.findStudentById",studId);

 

SqlSession的方法selectXXX,updateXXX,deleteXXX和insertXXX遵循这种方式,第一个参数是配置文件里namespace + id取得一个SQL操作,第二个参数是SQL语句的参数,由parameterType限定

 

 

 

分享到:
评论

相关推荐

    java 之持久化框架mybatis3,

    MyBatis的核心思想是将SQL语句从Java代码中分离出来,通过映射配置文件,或注解的方式,将SQL语句与Java对象进行绑定,从而实现数据的持久化操作。 MyBatis的主要特性包括: 1. 消除大量的JDBC冗余代码:MyBatis...

    ssm框架spring+mybatis+mvc

    这个框架的集成使得开发者在处理业务逻辑、持久化操作以及控制层交互时有了强大的支持。接下来,我们将详细探讨这三个组件以及如何利用它们搭建一个Web应用。 1. Spring框架: Spring是Java领域的一个全功能框架,...

    maven生成mybatis映射文件

    而MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。本篇主要讨论如何利用Maven来自动化生成MyBatis的映射文件。 一、MyBatis ...

    MyBatis3官方中文文档

    MyBatis是一款流行的Java持久层框架,它的设计理念是通过简单的XML或注解用于配置和映射原始类型、接口和Java POJOs(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。MyBatis可以与各种数据库交互,...

    MyBatis基本了解

    MyBatis是一个优秀的持久层框架,它主要支持普通的SQL查询、存储过程以及高级映射。MyBatis的主要目的是简化数据库操作,避免繁琐的JDBC代码和手动处理参数及结果集。它采用XML或注解的方式来配置和映射基础数据类型...

    Mybatis3官方文档

    Mybatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    ssi框架(struts2+myBatis+spring3)

    MyBatis是一个灵活的SQL映射框架,它将ORM(对象关系映射)与SQL分离,允许开发者编写个性化的SQL语句。主要特点包括: 1. **XML或注解配置**:通过XML配置文件或注解定义SQL语句,灵活控制数据库操作。 2. **动态...

    mybatis框架笔记

    MyBatis将Java对象转换为SQL语句,实现了数据的持久化。 五、MyBatis第一个程序 1. 需求:将内存中的对象持久化到数据库。 2. 搭建步骤: (1)导入jar包:将MyBatis的jar包及其依赖包放到项目的根目录的lib...

    struts2,spring4,spring mvc,hibernate4,mybatis的三大框架(三套)

    MyBatis是一个轻量级的持久层框架,它不同于Hibernate,不完全封装SQL,而是将SQL语句写在XML配置文件或注解中,让开发者有更大的自由度来编写复杂的SQL。MyBatis提供了动态SQL的功能,使得在处理复杂查询时更加灵活...

    mybatis源码+配置步骤+包文件

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    Mybatis3帮助文档

    首先,Mybatis3的配置文件是整个框架的核心,它包含了数据源、事务管理器、SqlSessionFactory等关键元素的设置。SqlSessionFactory是Mybatis的主要工厂对象,负责创建SqlSession,而SqlSession则是执行SQL操作的接口...

    spring3.2.6struts2.3.15MyBatis3整合DEMO

    MyBatis作为一款优秀的持久层框架,以其简洁的SQL映射和灵活的数据操作能力深受开发者喜爱。MyBatis 3提供了动态SQL、结果映射等功能,能够方便地处理复杂的数据操作。它与Spring的整合,使得事务管理变得更加便捷,...

    springMybatis+redis三级缓存框架

    首先,MyBatis作为一款轻量级的持久层框架,其核心特性之一就是支持自定义的SQL查询。MyBatis的二级缓存机制允许我们将执行过的SQL查询结果存储在内存中,以供后续相同的查询直接使用,从而避免了重复的数据库访问。...

    mybatis demo mybatis 实例

    MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...

    mybatis配置文件 config与mapper

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在使用MyBatis时,配置文件是整个框架的核心部分,它定义了数据源、事务管理器、SqlSessionFactory等关键元素。本文将深入探讨MyBatis...

    mybatis自动生成代码和配置文件

    MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...

    MyBatis-Simplified-Chinese.rar_ mybatis-3_Mybatis-spring_mybatis

    MyBatis 提供了一个简单且强大的 SQL 映射框架,使得开发人员能够将注意力集中在 SQL 查询本身,而无需过多地处理 JDBC 的低级细节。它通过 XML 或注解方式配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old ...

    MyBatis 3 中文参考文档

    MyBatis是一个流行的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及结果集的检索。MyBatis使用简单的XML或注解来配置和映射原生信息,将Java的POJOs...

Global site tag (gtag.js) - Google Analytics