Mybatis基础总结

Mybatis是基于ORM(对象关系映射,即Java对象和数据库关系映射)模型,它是一种半自动映射的框架,除了提供Java对象和映射关系外还需要提供SQL。全表映射的Hibernate不需要提供SQL,但是也失去了Mybatis的很多灵活性。

配置Mybatis很简单,只需要去github上的Mybatis官网下载Mybatis,里面包括Mybatis的源码和jar包,只需要将jar包导入项目即可使用了,还要注意将对应数据库驱动的jar包也倒入项目,否则Mybatis也无法连接数据库。

 

Mybatis的基本构件:

SqlSessionFactoryBuilder:它根据配置文件或代码,使用它的build方法来生成SqlSessionFactory。使用完就废弃掉了。

SqlSessionFactory:依靠工厂方法来生成SqlSession会话,所有的SqlSession都是一个Factory生成的,所以对它采用单例模式。

SqlSession:通常是来执行一个SQL,或者获取Mapper接口,在不使用缓存的情况下每个sql对应一个Session,使用完毕后关闭。

SQL Mapper:由一个mapper接口和XML文件构成,需要给出SQL和映射规则,当SQL字段和java bean字段一致时会自动映射。

基本的文件目录

 

  • 1.mybatis-config.xml配置文件,SqlSessionFactoryBuilder通过读取配置文件输入流生成SqlSessionFactory,对Mybatis有重要影响。
  • 2.POJO为java bean
  • 3.SqlSessionFactoryUtil类实现了生成SqlSessionFactory单例的方法和打开一个SqlSession会话的方法。
  • 4.Mapper接口和XML配置文件构成的SQL Mapper,提供SQL和映射关系。通常将sql语句的结果赋给java bean。
  • 5.test类中用SqlSessionFactoryUtil对象打开SqlSession会话,然后用SqlSession获取Mapper,调用Mapper的方法执行sql语句并返回结果。

 

配置文件

Mybatis中比较重要的一部分:配置文件

<configuration>
    <!--配置元素,通常使用properties文件配置-->
    <propertises resource="jdbc.properties" />
    <!--设置Mybatis参数,如缓存开关,延迟加载开关等-->
    <settings>
        <setting name="cacheEnabled" value="true" />
        <setting name="lazyLoadingEnabled" value="true" />
    </settings>
    <!--配置别名,基本的类为系统自带别名如_int为int的别名,通常给全限定名过长的类一个别名-->
    <typeAliases>
        <typeAlias alias="student" type="com.study.POJO.Student"/>
    </typeAliases>
    <!--类处理器,在javaType和jdbcType间进行切换,同样有系统自带的typeHandler-->
    <typeHandlers>
        <typeHandler jdbcType="VARCHAR" javaType="String" handler="MyTypeHandler" />
    </typeHandlers>
    <objectFactory />
    <plugin />

    <!--配置环境,主要是数据源(dataSource)和数据库事务的配置(transactionManager)-->
    <environments default="develop">
        <environment id="develop">
            <transactionManager type="JDBC">
                <property name="autoCommit" value="false"/>
            </transactionManager>
            <dataSource type="POOLED">
                <!--引用properties文件的配置-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--数据库厂商标识-->
    <databaseIdProvider/>
    <mappers>
        <!--引入映射器有三种方式-->  
        <mapper resource="com/study/mapper/StudentMapper.xml" />
        <package name="com.study.mapper" />
        <mapper resource="com.study.mapper.StudentMapper" />
    </mappers>
</configuration>

映射器

Mybatis中最重要的就是映射器了,包括一个Mapper接口申明数据库操作的一些方法,然后就是含有具体SQL的XML文件。

映射器包含select,insert,update,delete,parameterMap,resultMap,sql,cache,等元素。可以将映射器中四个包含SQL的元素分为三部分,传递的参数映射+结果的映射+SQL语句。

自动映射:

当数据库和javaBean的字段一致时Mybatis会自动映射二者,即使不一致也可以使用:

role_name(数据库列名) as rolename来将二者映射起来

参数映射:

<resultMap id="studentMap" type="com.study.POJO.Student">
    <id property="id" column="id"></id>
    <result property="name" column="name"></result>
    <collection property="lessons" column="id" select="com.study.mapper.LessonMapper.getBySid"></collection>
</resultMap>
<select id="getById" parameterType="_int" resultMap="studentMap">
    SELECT id, name FROM student WHERE id = #{id}
</select>

传递的参数parameterType为mabatis-config.xml配置文件中的typeAliases的别名,使用时在SQL语句中用#{ }表示传入的参数。这是在一个参数传递的情况。当有多个参数传递时:

1.使用Map传递参数

parameterType="map"

接口中的方法改为 Student getStudent( Map<String, String> params);

2.使用注解的方法传递

接口中的方法改为 Student getStudent( @Param("id") int id, @Param("name") String name);

SQL语句中以@Param("")中的别名表示参数#{id},#{name}

3.用参数构建一个javaBean再将这个javaBean作为一个参数传入

 

结果映射:

resultType="student"

有时候结果集非常复杂可以使用resultMap="studentMap",studentMap为resultMap元素中注册的id。resultMap里还有以下元素:

<resultMap>

    <!--构造方法-->
    <constructor >
        <idArg column="id" javaType="_int"/>
        <arg column="name" javaType="string"/>
    </constructor >

    <!--主键-->
    <id />

    <!--列名映射-->
    <result />

    <!--一对一-->
    <association />

    <!--一对多-->
    <collection />

    <!--鉴别器,类似于switch-->
    <discriminator >
        <case />
    <discriminator >

</resultMap >

其实结果映射也可以使用map和创建POJO获取多个参数的结果集

SQL语句网上资料较多,可以使用if test,choose when otherwise,where,set,foreach等标签实现动态SQL。

 

获取Session

编写一个工具类获取session:

public class SqlSessionFactoryUtil {
    private SqlSessionFactory factory;

    public void init() throws IOException {
        String resource = "database/mybatis/mybatis-config.xml";
        // 配置文件输入流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 通过输入流构建SessionFactory
        factory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    public SqlSession getSession() {
        // 打开一个Session
        return factory.openSession();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值