MyBatis之基础入门

什么是MyBatis

起源  Apache基金会开源项目iBatis,   2010年由Apache迁移到google code,并改名MyBatis

作用  支持普通SQL查询,存储过程和高级映射

封装  几乎所有的JDBC代码/参数的手工设置/结果集的检索

优势  简化数据库访问代码

MyBatis体系结构

1:加载配置

  两种形式:XML配置文件 / Java代码注解
  SQL配置信息加载 --> MappedStatement对象--> 内存
  (传入参数映射配置、执行SQL语句、结果映射配置)

2:SQL解析

  API接口接收请求(SQL ID:obj//可以是Map、JavaBean或基本数据类型)
  MyBatis 根据 ID --> MappedStatement --> 解析 --> SQL语句 参数

3:SQL执行

  解析后的SQL语句 参数 --> Database execute --> result

4:结果映射

  result --> 根据映射配置转换 --> HashMap JavaBean 基本数据类型 --> return

MyBatis配置文件

 1 eg. SqlMapConfig.xml
 2 <configuration>
 3 <environments default="environment">
 4     <environment id="environment">
 5
 6         <transactionManager type="JDBC"/>
 7
 8         <dataSource type="POOLED">
 9             <property nam="driver" value="com.mysql.jdbc.Driver"/>
10             <property name="url" value="jdbc:mysql://localhost:33066/MyDatabase?useUnicode=true&characterEncoding=gbk"/>
11             <property name="username" value="root"/>
12             <property name="password" value=""/>
13         </dataSource>
14
15     </environment>
16 </environment>
17 </configuration>
 1 eg. SqlMap.xml
 2 <mapper>
 3 <!-- mysql insert sentence -->
 4 <insert id="addEmp" parameterType="Emp">
 5     insert into EMP(NAME,SALARY,AGE)
 6     values(#{name},#{salary},#{age})
 7 </insert>
 8 <!-- mysql select sentence -->
 9 <select id="findAll" resultMap="empMap">
10     select NAME,SALARY,AGE from EMP
11 </select>
12 <!-- result Map -->
13 <resultMap id="empMap" type="cn.com.azcode.entity.Emp">
14     <result property="name" column="NAME"/>
15     <result property="salary" column="SALARY"/>
16     <result property="age" cloumn="AGE"/>
17 </resultMap>
18 </mapper>

MyBatis框架API介绍

#SqlSessionFactoryBuilder

  根据MyBatis配置文件SqlMapConfig.xml构建SqlSessionFactory实例

#SqlSessionFactory

  每一个MyBatis的应用程序都以一个SqlSessionFactory对象为核心

#SqlSession

  该对象包含了所有执行SQL操作的方法,用于执行已映射的SQL语句

MyBatis 基本应用

1 搭建MyBatis技术环境
· MyBatis-jar包,SQL-jar包
· src/SqlMapConfig.xml配置参数
· 获取SqlSession实例

2:获取SqlSession对象

1     //inject SqlMapConfig.xml
2     String conf="SqlMapConfig.xml";
3     Reader reader=Resource.getResourceAsReader(conf);
4     //Entity SessionFactory
5     SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBudiler();
6     SqlSessionFactory sf=sfb.build(reader);
7     //Entity Session
8     SqlSession session=sf.openSession();

3:利用SqlSession实现CRUD操作
· 根据表编写实体类 Java POJOs(Plain Old Java Objects)
· 编写SqlMap.xml映射文件,定义SQL操作和映射信息
· 获取SqlSession对象,执行增删改查操作
· 提交事物(DML操作)
· 释放SqlSession对象资源

    //返回类型是实体对象 parameterType="Emp"
    <!-- mysql insert sentence -->
    <insert id="addEmp" parameterType="Emp">
        insert into EMP(NAME,SALARY,AGE)
        values(#{name},#{salary},#{age})
    </insert>

    //insert mission
    session.insert("addEmp",emp);
    session.commit();
    Session.close();
    ------------------------------------------
    <!-- mysql update sentence -->
    <update id="updateDept" parameterType="Emp">
        update EMP  set NAME=#{name},SALARY=#{salary}where AGE=#{age}
    </update>

    //update mission
    session.update("updateDept",25);
    session.commit();
    Session.close();
    ------------------------------------------
    <!-- mysql delet sentence-->
    <delete id="deleteByName" parameterType="String">
        delete from EMP where NAME=#{name}
    </delete>

    //delete mission
    session.delete("deletByName",susan);
    ------------------------------------------
    <!-- mysql findOne sentence-->
    <select id="findByName" parameterType="String" resultType="Emp">
        select NAME,SALARY,AGE from EMP where NAME=#{name}
    </select>

    //findOne mission
    Emp emp = (Emp)session.selectOne("findByName",susan);
    ------------------------------------------
    <!-- mysql findAll sentence-->
    <select id="findAll" resultType="Emp">
        select NAME,SALARY,AGE from EMP
    </select>

    //findAll mission
    List<Emp> list = seesion.selectList("finAll");

4:返回Map类型查询结果

    <!-- reusultType="java.util.HashMap" -->
    <select id="findAge" parameterType="int" resultType="java.util.HashMap">
        select NAME,SALARY from EMP where AGE=#{age}
    </select>

    //map find
    Map map=(Map)session.selectOne("findAge",20);
    String name=(String)map.get("NAME");
    double salary=(double)map.get("SALARY")

5:使用Mapper映射器

  什么是Mapper映射器:开发者创建绑定映射语句的接口获取映射器接口实例

  使用Mapper映射器的好处:不用多次通过session进行操作,简化操作流程,方便方法复用

    SqlSession session=sqlSessionFactory.openSession();
    try{
        EmpMapper mapper=session.getMapper(EmpMapper.class);
        //do work
        ...
    }finally{
        session.close();
    }

    //DeptMapper 接口定义
    public interface EmpMapper{
        public List<Emp> findAll();
        public Emp find(String name);
        public void addEmp(int age);
        public void updateEmp(int age);
        public void deleteByAge(int age);
    }
    //Mapper接口中的方法名和SqlMap.xml中SQL-id一致

6:ResultMap映射定义

  SqlMap.xml定义<select>操作时
  若查询字段名和Java POJOs属性不一致时
  需要使用<resultMap>指定映射关系

eg.
    <!-- mysql select sentence -->
    <select id="findAll" resultMap="empMap">
        select NAME,SALARY,AGE from EMP
    </select>
    <!-- result Map -->
    <resultMap id="empMap" type="cn.com.azcode.entity.Emp">
        <result property="name" column="NAME"/>
        <result property="salary" column="SALARY"/>
        <result property="age" cloumn="AGE"/>
    </resultMap>
时间: 2024-12-22 04:26:03

MyBatis之基础入门的相关文章

MyBatis基础入门《五》核心配置文件

MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-config.xml 文件. 资料参考:http://www.mybatis.org/mybatis-3/ 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUB

MyBatis基础入门《七》查询参数传入对象

MyBatis基础入门<七>查询参数传入对象 描述: 在执行查询语句的时候,传入的参数是一个对象,依据对象的属性,进行检索数据.此时,书写SQL语句中的条件时,其参数需要和对象中的属性保持一致. 实体类:TblClient.java 接口方法 注意: 接口中定义了一个新的方法(根据对象属性进行查询数据),方法的参数传入的是一个对象. xml文件 注意: >>> parameterType="baitang" resultType="baitang

MyBatis基础入门《十五》ResultMap子元素(collection)

MyBatis基础入门<十五>ResultMap子元素(collection) 描述: 见<MyBatis基础入门<十四>ResultMap子元素(association )> >>collection >> 复杂类型集合,一对多 >> 内部嵌套 > 映射一个嵌套结果集到一个列表 >> 属性 > property : 映射数据库列的实体对象的属性 > ofType : 完整java类名或别名(集合所包括的

MyBatis基础入门《十七》动态SQL

MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > where > set > choose( when , otherwise ) > foreach 动态SQL为Mybatis重要部分,项目也重新新建了一个:mybatis-dynamic-sql 项目结构: TblClient.java 1 package com.charles.e

零基础入门学习java,应该如何快速打好Java基础?

零基础入门学习java,应该如何快速打好Java基础?从大学到现在,我使用Java已经将近20年,日常也带实习生,还在公司内部做training,所以可以分享下我的经验,希望对你有用. 创一个小群,供大家学习交流聊天如果有对学java方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学java能够持之以恒java爱好群,如果你想要学好java最好加入一个组织,这样大家学习的话就比较方便,还能够共同交流和分享资料,给你推荐一个学习的组织:快乐学习java组织

2019刘老师教你用springboot2.x开发整合微信支付的线上教育平台带源码送springboot2.x零基础入门到高级实战教程

第一部分:springboot2.x零基础入门到高级实战教程一.零基础快速入门SpringBoot2.0 1.SpringBoot2.x课程全套介绍和高手系列知识点 简介:介绍SpringBoot2.x课程大纲章节 java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 3.快速创建SpringBoot2.x应用之手工创建web应用 简介:使用Maven手工创建SpringBoot2.x应用 4

Android基础入门教程——10.12 传感器专题(3)——加速度-陀螺仪传感器

Android基础入门教程--10.12 传感器专题(3)--加速度/陀螺仪传感器 标签(空格分隔): Android基础入门教程 本节引言: 本节继续来扣Android中的传感器,本节带来的是加速度传感器(Accelerometer sensor)以及 陀螺仪传感器(Gyroscope sensor),和上一节的方向传感器一样有着x,y,z 三个轴, 还是要说一点:x,y轴的坐标要和绘图那里的x,y轴区分开来!传感器的是以左下角 为原点的!x向右,y向上!好的,带着我们的套路来学本节的传感器吧

Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3

Android基础入门教程--8.1.3 Android中的13种Drawable小结 Part 3 标签(空格分隔): Android基础入门教程 本节引言: 本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图: 1.LayerDrawable 层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来

Android基础入门教程——8.1.2 Android中的13种Drawable小结 Part 2

Android基础入门教程--8.1.2 Android中的13种Drawable小结 Part 2 标签(空格分隔): Android基础入门教程 本节引言: 本节我们继续来学习Android中的Drawable资源,上一节我们学习了: ColorDrawable:NinePatchDrawable: ShapeDrawable:GradientDrawable!这四个Drawable~ 而本节我们继续来学习接下来的五个Drawable,他们分别是: BitmapDrawable:Insert