【MyBatis】MyBatis入门

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 configuration
PUBLIC "-//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());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值