Sql映射文件

MyBatis真正的力量是在映射语句中。这里是奇迹发生的地方。对于所有的力量,SQL映射的XML文件是相当的简单。当然如果你将它们和对等功能的JDBC代码来比较,你会发现映射文件节省了大约95%的代      码量。MyBatis的构建就是聚焦于SQL的,使其远离于普通的方式。

SQL映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

>mapper:映射文件的根元素节点,只有一个属性namespace命名空间,用于区分不同的mapper,全局唯一 ,namespace绑定的DAO接口全名称,即面向接口编程。这里的mapper就相当于接口的实现类。

  • cache - 配置给定命名空间的缓存。
  • cache-ref – 从其他命名空间引用缓存配置。
  • resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。
  • parameterMap – 已经被废弃了!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除。这里不会记录。
  • sql – 可以重用的SQL块,也可以被其他语句引用。
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句

一:使用select完成但条件查询

使用工具idea和mysql数据库

创建实体类

public class student {

    private int stuId;

    private String  stuName;

    private grade getGrade;

    private  int stuAge;

    public grade getGetGrade() {
return getGrade;
} public void setGetGrade(grade getGrade) {
this.getGrade = getGrade;
} public int getStuAge() {
return stuAge;
}
public student(int id,String name){ }
public student(){}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
} public int getStuId() {
return stuId;
} public void setStuId(int stuId) {
this.stuId = stuId;
} public String getStuName() {
return stuName;
} public void setStuName(String stuName) {
this.stuName = stuName;
}
}

使用select完成条件查询

一:首先配置mapper使用resultType

<!--模糊查询   使用resultType返回结果集-->
<select id="getAllStudentByLike" parameterType="String" resultType="stu">
select * from student where stuName like CONCAT('%',#{stuName},'%')

</select>

测试类

 public  void Test() throws IOException {

        studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class);
List<student> list = dao.getAllStudentByLike("z");
for (student item:list) {
System.out.println("----------"+item.getStuName());
}
}

另外parameterType支持的复杂类型除了javaBean之外,还包括Map类型

即修改Mapper

 <!--模糊查询-->
<select id="getAllStudentByLike" parameterType="Map" resultType="stu">
select * from student where stuName like CONCAT('%',#{stuName},'%')
</select>

然后再测试类里创建一个 HashMap集合直接作为方法参数即可

studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class);
Map<String,String> userMap = new HashMap<String, String>();
userMap.put("stuName","z");
List<student> list = dao.getAllStudentByLike(userMap);
for (student item:list) {
System.out.println("----------"+item.getStuName());
}

不过map集合的key值必须和类中的字段名相同。

二:使用resultMap完成两表查询

比如学生表里关联班级表的主键id,如果使用resultType只能展示其id但在实际中往往关注的是班级名称,所有需要使用resultMap映射自定义结果。

<resultMap id="studentMap" type="entity.student">
<id property="stuId" column="stuId"></id>
<result property="stuName" column="stuName"></result>
<result property="gradeName" column="gradeName"> </resultMap> //sql语句
select * from student,grade 

resultType直接表示 返回 类型 ,包括基础类型和复杂数据类型

resultMap则是对外部resultMap的引用,对应resultMap的id 表示返回结果映射到 哪一个resultMap。:他的应用场景是:数据库字段信息与对象属性不一致或者需要做复杂的联合查询以便自由控制映射结果 。

另外在 MyBatis的select元素中,resultType和resultMap本质上是一样的,都是Map数据结构。但是 二者不能同时 存在。

三:使用resultMap的自动映射级别

MyBatis中分为三个映射级别

>NONE:禁止自动匹配

>PARTIAL:(默认):自动匹配所有属性有内部嵌套(association,collection)的除外

>FULL:自动匹配所有

在大配置里设置autoMappingBehavior

 <settings>

        <!--设置resultMap的自动映射级别为Full(自动匹配所有)-->
<setting name="autoMappingBehavior" value="FULL" /> <!--FULL要大写··--> </settings>

设置autoMappingBehavior的值为FULL时就不需要配置resultMap下的节点,他会根据数据库自动匹配

四:使用update完成修改

 <update id="update">
update student set stuName=#{0} where stuId=#{1}
</update>

这里使用占位符比较简单的一种作为参数,在测试类中就直接填参就行了

五:使用映射复杂类型的属性association

前面的result只能映射到javaBean的某个“简单类型”属性,基础数据类型和包装类等/

但要映射复杂类型的属性时需要用到assocoation    复杂类xing:即一个javaBean里有另一个javaBean,但是association仅处理一对一的关联关系

    private int stuId;

    private String  stuName;

    private grade getGrade;

    private  int stuAge;

   。。。。。省略封装
 <resultMap id="studentMap" type="entity.student">
<!-- <id property="stuId" column="stuId"></id>
<result property="stuName" column="stuName"></result>-->
<!--关联另一个 属性-->
<association property="getGrade" javaType="grade">
<!-- <id property="gradeId" javaType="Integer" column="gradeId"></id>
<result property="gradeName" javaType="String" column="gradeName"></result>-->
</association>
</resultMap>
<!--这里使用了自动匹配-->
<select id="getAllStudent" resultMap="studentMap">
SELECT * FROM student,grade WHERE student.stuGrade=grade.gradeId
</select>

测试类里直接调用即可

六:前面说到association仅处理一对一的管理关系

如果要处理一对多的关系,则需要使用collection,它与 association元素差不多,但它映射的属性是一个集合列表,即javaBean内部嵌套一个复杂数据类型属性。

javaBean

  private int gradeId;

    private String gradeName;

    private List<student> gatStudent;
 <resultMap id="gradeMap" type="grade">
<!--<id property="gradeId" column="gradeId"></id>
<result property="gradeName" column="gradeName"></result>-->
<collection property="gatStudent" ofType="stu">
<!-- <id property="stuId" column="stuId"></id>
<result property="stuName" column="stuName"></result>-->
</collection>
</resultMap>

 <!--查询对应年级的student-->
<select id="getAll" resultMap="gradeMap">
select * from student,grade where stuGrade = gradeId and gradeId=1
</select>

完:

MyBatis-sql映射文件的更多相关文章

  1. Mybatis sql映射文件浅析 Mybatis简介(三)

    简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML为载体映射SQL 之前提到过,各项配置信息将Mybatis应用的整 ...

  2. Mybatis sql映射文件浅析 Mybatis简介(三) 简介

    Mybatis sql映射文件浅析 Mybatis简介(三)   简介 除了配置相关之外,另一个核心就是SQL映射,MyBatis 的真正强大也在于它的映射语句. Mybatis创建了一套规则以XML ...

  3. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

  4. MyBatis -- sql映射文件具体解释

    MyBatis 真正的力量是在映射语句中. 和对等功能的jdbc来比价,映射文件节省非常多的代码量. MyBatis的构建就是聚焦于sql的. sql映射文件有例如以下几个顶级元素:(按顺序) cac ...

  5. SSM - Mybatis SQL映射文件

    MyBatis 真正的力量是在映射语句中.和对等功能的jdbc来比价,映射文件节省很多的代码量.MyBatis的构建就是聚焦于sql的. sql映射文件有如下几个顶级元素:(按顺序) cache配置给 ...

  6. 初始MyBatis、SQL映射文件

    MyBatis入门 1.MyBatis前身是iBatis,是Apache的一个开源项目,2010年这个项目迁移到了Google Code,改名为MyBatis,2013年迁移到GitHub.是一个基于 ...

  7. MyBatis 创建核心配置文件和 SQL 映射文件

    Mybatis 的两个配置文件(mybatis-config.xml  和 xxxMapper.xml)都为 xml 类型,因此在 eclipse 中创建 xml 文件命名为相应的 mybatis-c ...

  8. MyBatis 的基本要素—SQL 映射文件

    MyBatis 真正的强大在于映射语句,相对于它强大的功能,SQL 映射文件的配置却是相当简单.对比 SQL 映射配置和 JDBC 代码,发现使用 SQL 映射文件配置可减少 50% 以上的代码,并且 ...

  9. Mybatis(二) SQL映射文件

    SQL映射文件 单条件查询 1. 在UserMapper接口添加抽象方法 //根据用户名模糊查询 List<User> getUserListByName(); 2. 在UserMappe ...

  10. MyBatis学习-映射文件标签篇(select、resultMap)

    MyBatis 真正的核心在映射文件中.比直接使用 JDBC 节省95%的代码.而且将 SQL 语句独立在 Java 代码之外,可以进行更为细致的 SQL 优化. 一. 映射文件的顶级元素 selec ...

随机推荐

  1. .Net程序猿需掌握的知识

    作为一个.Net的技术人员需要掌握的技术,当然,理解这些知识点并不能让你学会.NET开发. 但能够衡量你是否有着走出校门的能力,也算是给自己留一个知识的储备库吧. 共勉! 基础知识: 数据类型 变量 ...

  2. DropDownList如何绑定DataTable,如何绑定DataSet

    dpDnUpMenu是我定义的DropDownList控件 如果直接使用下面的方式,则会出现如下错误 dpDnUpMenu.DataSource = menu_tbBll.GetPID() dpDnU ...

  3. android调用系统相机

    Intent intent = new Intent(); intent.setPackage("com.android.camera"); intent.setAction(Me ...

  4. Struts2 控制文件上传下载

    之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Strut ...

  5. web 直播&即时聊天------阿里云、融云(二)

    上一篇简要主要介绍了融云制作聊天室的基本方法,这次基本属于对上一篇的补充以及进阶...^_^... (ps:吐槽一下,加了三个融云的线下qq群,全部没人解决问题,也不知道建此群的意义,若是民间的话就当 ...

  6. 开涛spring3(2.3) - IoC的配置使用

    2.3.1  XML配置的结构 一般配置文件结构如下: <beans> <import resource=”resource1.xml”/> <bean id=”bean ...

  7. RabbitMQ_安装配置与管理

    RabbitMQ 安装配置与管理 安装 安装erlang虚拟机 Rabbitmq基于erlang语言开发,所有需要安装erlang虚拟机 #wget  http://www.erlang.org/do ...

  8. Reinforcement Learning in R

    Reinforcement learning has gained considerable traction as it mines real experiences with the help o ...

  9. Spring学习(2)---IOC

    1.接口及面向接口编程 2.什么是IOC 3.Spring的Bean配置 4.Bean的初始化 5.Spring的常用注入方式 (一)接口 用于沟通的中介物的抽象化 实体把自己提供给我外接的一种抽象化 ...

  10. datatables 学习笔记1 基础篇

    本文共3部分:基本使用|遇到的问题|属性表 1.DataTables的默认配置 $(document).ready(function() { $('#example').dataTable(); } ...