您的位置:首页 > 编程语言 > Java开发

JavaEE-ORM映射器MyBatis

2015-12-15 11:49 489 查看
MyBatis
sf2gis@163.com
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

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE configuration PUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

      <environmentsdefault="development">

           <environmentid="development">

                 <transactionManagertype="JDBC" />

                 <!--配置数据库连接信息 -->

                 <dataSourcetype="POOLED">

                      <propertyname="driver" value="com.mysql.jdbc.Driver" />

                      <propertyname="url" value="jdbc:mysql://localhost:3306/hib4" />

                      <propertyname="username" value="root" />

                      <propertyname="password" value="sf" />

                 </dataSource>

           </environment>

      </environments>

      <mappers>

           <!-- 注册userMapper.xml文件,userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->

           <mapperresource="empMapper.xml" />

      </mappers>

</configuration>

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

<?xml version="1.0"encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的

例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)

 -->

<mapper namespace="lee.empMapper">

    <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复

    使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型

   resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回

    User类就是users表所对应的实体类

    -->

    <!--

        根据id查询得到一个user对象

     -->

    <selectid="getUser" parameterType="int"

        resultType="lee.Employee">

        select * from employee where id=#{id}

    </select>

</mapper>

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  j2ee JavaEE iBatis MyBatis ORM