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. ng-checked选择和点击增加dom

      1.需求 在添加页面实现一个checkbox的选择,然后在详情页面展示时,会自动选上之前被选中的. 2.添加页面 看官最好将这个代码复制过去看看效果. <!DOCTYPE html>& ...

  2. Swift学习笔记(4):字符串

    目录: 初始化 常用方法或属性 字符串索引 初始化 创建一个空字符串作为初始值: var emptyString = "" // 空字符串字面量 var anotherEmptyS ...

  3. 编程语言与C语言的简介

    1.什么是程序 指挥计算机执行我们想要它做的动作,而依照顺序执行的一组指令 2.程序的作用是什么 指挥计算机工作 3.程序的特征 1.程序是一行一行的执行 2.是一种与计算机沟通的语言 3.程序是由特 ...

  4. 利用shell脚本监控目录内文件改动

    #! /bin/bash webroot="/home/www/" cp /dev/null rsync_file if [ ! -f   file.md5 ];then      ...

  5. 《JAVA与模式》之门面模式

    <JAVA与模式>之门面模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的 ...

  6. 关于IOS sourcetree 注册 2017最新hosts

    今天用sourcetree  git管理工具的时候,第一次打开发现需要注册. 在网上搜索了一下教程,发现现在新版本没有  (我同意协议)这个条款,这就尴尬.我以前没有sourcetree的账号. 试了 ...

  7. DATA VISUALIZATION – PART 2

    A Quick Overview of the ggplot2 Package in R While it will be important to focus on theory, I want t ...

  8. BUGKUctf-web-writeup

    ---恢复内容开始--- 找到了个ctf平台.里面的web挺多的.终于将web题目写的差不多了. Web 签到题 加群就可以了 Web2 直接F12就看到了 文件上传测试 Burp抓包 文件名改成 1 ...

  9. cpp(第十四章)

    1.类的静态成员变量.静态常整型(static const int)变量可以直接在类声明中初始化,静态常变量(static const )需要在类定义文件中初始化, 常变量(const )则在构造函数 ...

  10. intel hex 格式的几个链接

    intel hex GENERAL: INTEL HEX FILE FORMAT Intel Hex文件格式说明 - starspace - 博客园 C# Hex文件转bin文件 - bule - 博 ...