JavaEE-ORM映射器MyBatis

MyBatis

[email protected]

2015年12月9日

 

1  目标:实现对象和关系的映射。

包括对象和关系的实体映射及实体操作的映射。

2 原理:将表映射为一个类,列映射为类的属性,行映射为对象,OO行为映射为SQL操作(由映射文件配置SQL操作)。

PO=POJO+与表相同列属性。

3 流程:安装,配置数据库,创建实体类,创建SQL操作映射文件,操作实体类。

参考:http://www.cnblogs.com/xdp-gacl/p/4261895.html

3.1 创建JavaApplication。

3.2 安装:下载mybatis。解压,复制mybatis-3.2.8.jar到lib目录,并添加到classpath。

3.3 配置数据库:复制相应的数据库驱动到lib,并添加到classpath。配置数据库连接参数的xml。

本机使用mysql-connector-java-5.0.8.jar。

//mybatis.xml

     

          

                

                

                

                     

                     

                     

                     

                

          

     

     

          

          

     

3.4 创建实体类:创建对应于数据库表的实体类。属性名与列名对应的bean(有get/set,有无参构建函数)。

//Employee.java

package lee;

 

import java.io.Serializable;

 

public class Employee implements Serializable{

      privateint id; 

      privateString emp_Name;

      privateString emp_Address;

      privateString emp_Mobile_Nos;

 

      publicint getId() {

           returnid;

      }

 

      publicvoid setId(int id) {

           this.id= id;

      }

 

      publicString getEmp_Name() {

           returnemp_Name;

      }

 

      publicvoid setEmp_Name(String emp_Name) {

           this.emp_Name= emp_Name;

      }

 

      publicString getEmp_Address() {

           returnemp_Address;

      }

 

      publicvoid setEmp_Address(String emp_Address) {

           this.emp_Address= emp_Address;

      }

 

      publicString getEmp_Mobile_Nos() {

           returnemp_Mobile_Nos;

      }

 

      publicvoid setEmp_Mobile_Nos(String emp_Mobile_Nos) {

           this.emp_Mobile_Nos= emp_Mobile_Nos;

      }

}

3.5 创建SQL映射文件:创建SQL操作对应的映射文件,并将此文件注册到数据库配置文件的mapper中。

//empMapper.xml

   

   

   

        resultType="lee.Employee">

        select * from employee where id=#{id}

   

3.6 操作实体类:连接数据库后,傅SQL操作id,传递参数执行。

//Main.java

package lee;

 

import java.io.InputStream;

 

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

 

public class Main {

 

      publicstatic void main(String[] args) {

           //TODO Auto-generated method stub

           //mybatis的配置文件

        Stringresource = "mybatis.xml";

        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)

       InputStream is = Main.class.getClassLoader().getResourceAsStream(resource);

        //构建sqlSession的工厂

       SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(is);

        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)

       //Reader reader = Resources.getResourceAsReader(resource);

        //构建sqlSession的工厂

       //SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(reader);

        //创建能执行映射文件中sql的sqlSession

       SqlSession session = sessionFactory.openSession();

        /**

         * 映射sql的标识字符串,

         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,

         *getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

         */

        String statement ="lee.empMapper.getUser";//映射sql的标识字符串

        //执行查询返回一个唯一user对象的sql

        Employee user =session.selectOne(statement, 1);

        System.out.println(user.getEmp_Name());

      }

 

}

结果:

4 方法:配置和操作

参考:http://mybatis.org/mybatis-3/zh/dynamic-sql.html

4.1 数据库配置

4.1.1组织结构

参考:http://mybatis.org/mybatis-3/zh/configuration.html

configuration 配置,根节点

-|properties 属性,变量定义

-|environments 环境,全局配置

--|environment 环境变量,独立的配置,可以定义多个

---|transactionManager 事务管理器,连接池

---|dataSource 数据源,数据库连接配置

-|mappers 映射器,SQL操作映射

4.2 SQL操作配置

参考:http://mybatis.org/mybatis-3/zh/sqlmap-xml.html

mapper:映射根元素,需要指定一个唯一的namespace属性,一般使用文件的包路径。

-|cache – 给定命名空间的缓存配置。

-|cache-ref – 其他命名空间缓存配置的引用。

-|resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。

-|sql – 可被其他语句引用的可重用语句块。

-|insert – 插入语句

-|update – 更新语句

-|delete – 删除语句

-|select – 查询语句,包含唯一标识id,参数类型parameterType,返回值类型resultType。

4.3 实体操作方法

4.3.1目标:连接数据库,进行SQL操作。

4.3.2原理:读取配置,通过驱动连接数据库,进行SQL操作。

4.3.3流程:读取配置文件,创建连接工厂,打开连接,执行SQL映射操作。

4.3.3.1  读取配置文件:读取xml文件为流。

String resource ="org/mybatis/example/mybatis-config.xml";

InputStream inputStream =Resources.getResourceAsStream(resource);

4.3.3.2  创建连接工厂:使用配置文件流。

sqlSessionFactory = newSqlSessionFactoryBuilder().build(inputStream);

4.3.3.3  打开连接:使用连接工厂打开。

SqlSession session =sqlSessionFactory.openSession();

4.3.3.4  执行SQL映射操作:根据SQL映射文件定义的id,传入参数执行。

 String statement ="lee.empMapper.getUser";//映射sql的标识字符串

        //执行查询返回一个唯一user对象的sql

        Employee user =session.selectOne(statement, 1);

5 示例:

6 扩展:

6.1 与Hibernate区别

ORM:都实现了ORM,但是Hibernate的实体映射需要配置,MyBatis只需要实体类对应即可。

操作:Hibernate对PO操作,直接映射为SQL操作。MyBatis需要配置操作SQL,然后执行,不能直接映射PO操作。

易用性:Hibernate(推荐)学习较MyBatis更复杂一些,但是操作简单。

6.2 iBatis与MyBatis

MyBatis=iBatis3

参考:http://baike.baidu.com/view/628102.htm

你可能感兴趣的:(Java,j2ee,JavaEE,iBatis,MyBatis,ORM)