【MyBatis】MyBatis入门

来源:互联网 发布:朗朗数码的mac怎么样 编辑:程序博客网 时间:2024/06/04 20:02

MyBatis

Hibernate 缺点

  • 全表映射,更新少量信息是发送所有字段,性能不佳。
  • 无法根据不同条件组装不同SQL语句,也就是说不支持SQL优化。
  • 对多表关联和复杂的SQL支持不好,需要自己写SQL,然后将结果组装为POJO。
  • 不能有效的支持存储过程。
  • 虽然有HQL,但是性能较差。

MyBatis

半自动映射:需要手动配置POJO、SQL和映射关系。

映射文件主要部分

  1. SQL
    可以配置动态SQL。
  2. 映射规则
  3. POJO

Mybatis基本构成(核心组件)

  1. SqlSessionFactoryBuilder(构造器):根据配置信息或者代码生成SqlSessionFactory。
    生成SqlSessionFactory后,作用就完结了。
  2. SqlSessionFactory(工厂接口):通过工厂可以生成SqlSession。
    创建SqlSession,采用单例模式,一个数据库只有一个SqlSessionFactory,每创建一个SqlSession会话就会调用SqlSessionFacrtory,存在于MyBatis应用的整个生命周期中。
  3. SqlSession(会话):可以发送SQL去执行并返回结果,也可以获得Mapper的接口。
    SqlSession是一个会话,相当于一个JDBC中的Connection对象。生命周期是请求数据库处理事务的过程。
  4. SQL Mapper:由一个Java接口和XML文件(或者注解)构成,需要给出对应的SQL语句和映射规则。负责发送SQL去执行,并返回结果。
    Mapper是一个接口,没有任何实现类,作用就是发送SQL,然后返回结果,是一个存在于SqlSession事务方法之内的一个方法级别的东西,SqlSession销毁时,也将其销毁。

SqlSessionFactory

SqlSessionFactory是一个工厂接口,Mybatis提供了两个实现类,DefaultSqlSessionFactory和SqlSessionManager,后者目前没有使用。
构造器SqlSessionFactory需要一个Configuration(org.apache.ibatis.session.Configuration)对象作为参数,该对象存在于MyBatis整个生命周期中,可以反复读取和使用。
可以使用代码方式或者XML配置文件来创建SqlSessionFactory对象,推荐后者。

使用XML创建SqlSessionFactory
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties resource="jdbc.properties"/><typeAliases>    <typeAlias alias="role" type="com.learn.chapter2.po.Role"/></typeAliases><environments default="development">    <environment id="development">        <transactionManager type="JDBC">            <property name="autoCommit" value="false"/>        </transactionManager>        <dataSource type="POOLED">            <property name="driver" value="${driver}"/>            <property name="url" value="${url}"/>            <property name="username" value="${username}"/>            <property name="password" value="${password}"/>        </dataSource>    </environment></environments><mappers>    <mapper resource="com\learn\chapter2\mapper\roleMapper.xml"/></mappers></configuration>

创建SqlSession

SqlSession是一个接口,实现类有DefaultSqlSession和SqlManager。

SqlSession sqlSession = null;try{    //打开SqlSession会话    sqlSession = sqlSessionFactory.openSession();    //......    sqlSession.commit();}catch(Exception e){    System.err.println(e.getMessage());    sqlSession.rollback();}finally{    //类似JDBC中的Connection对象,使用完毕后要close    if(sqlSession!=null){        sqlSession.close();         }}

映射器

由Java接口和XML文件(或注解)组成。推荐使用XML配置文件,映射器是MyBatis的核心,也是最复杂的。

//接口类   package com.learn.chapter2.mapper;import com.learn.chapter2.po.Role;public interface RoleMapper {    public Role getRole(Long id);    public int deleteRole(Long id);    public int insertRole(Role role);}//XML文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.learn.chapter2.mapper.RoleMapper">    <select id="getRole" parameterType="long" resultType="role">        select id,role_name as roleName, note from t_role where id =#{id}    </select>    <insert id="insertRole" parameterType="role">        insert into t_role(role_name,note) values(#{roleName},#{note})    </insert>    <delete id="deleteRole" parameterType="long">        delete from t_role where id =#{id}    </delete></mapper>

我们需要在mybatis-config.xml中配置上述配置文件,MyBatis会根据配置文件生成映射器。

用SqlSession获取Mapper
RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);Role role = roleMapper.getRole(1L);System.out.println(role.getRoleName());
原创粉丝点击