码迷,mamicode.com
首页 > 其他好文 > 详细

MyBatis之基础入门

时间:2015-11-05 23:45:14      阅读:368      评论:0      收藏:0      [点我收藏+]

标签:

什么是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>

 

MyBatis之基础入门

标签:

原文地址:http://www.cnblogs.com/azcode/p/4940968.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!