【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件
编程技术  /  houtizong 发布于 3年前   84
SQL映射配置文件一方面类似于Hibernate的映射配置文件,通过定义实体与关系表的列之间的对应关系。另一方面使用<select>,<insert>,<delete>,<update>元素定义增删改查的SQL语句,
这些元素包含三方面内容
1. 要执行的SQL语句
2. SQL语句的入参,比如查询条件
3. 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元素是MyBatis对查询结果进行ORM的主要配置项,简单的说它类似于Hibernate的实体与POJO的映射配置,resultMap的属性和子配置项包括:
<select id="findStudentById" parameterType="int" resultType="Student"> select stud_id, name, email, dob from Students where stud_id=#{studId} </select>
<!--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>
<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId"> INSERT INTO STUDENTS(NAME, EMAIL, PHONE)VALUES(#{name},#{email},#{phone})</insert>
上面这个insert操作,传入的参数是Student类型,由于没有持久化,所以Student的studId属性是null,执行完insert语句后,作为传入参数的Student对象的studId包含了数据库自动生成的主键ID
还有第三种,注解的方式,注解这种方式,实际工作中基本不会用
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();}
注意:
public List<Student> findAllStudents() { SqlSession sqlSession = MyBatisSqlSessionFactory.getSqlSession(); try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); //SqlSession定义了获取Mapper的方法 return studentMapper.findAllStudents(); } finally { sqlSession.close(); } }
Student student = (Student)sqlSession.selectOne("com.mybatis3.mappers.StudentMapper.findStudentById",studId);
SqlSession的方法selectXXX,updateXXX,deleteXXX和insertXXX遵循这种方式,第一个参数是配置文件里namespace + id取得一个SQL操作,第二个参数是SQL语句的参数,由parameterType限定
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接