MyBatis(二):MyBatis入门(一)

一、MyBatis的基本构成
(一)MyBatis的核心组件:
1、SqlSessionFactoryBuilder(构造器):会根据配置信息或代码生成SqlSessionFactory(
接口工厂)
2、SqlSessionFactory:依靠工厂来生成SqlSession
3、SqlSession:可以发送SQL去执行并返回结果,也可以获取Mapper接口。
4、SQL Mapper: 是MyBatis新设计的组件,由一个Java接口和XML文件(或注解)构成的,
需要给出对应的SQL和映射规则,负责发送SQL去执行,并返回结果。

(二)构建SqlSessionFactory
每个Mybatis的应用都是以SqlSessionFactory的实例为中心的,SqlSessionFactory的实
例是通过SqlSessionFactorybuilder获得,但SqlSessionFactroy是一个工厂接口而不是显示
类,它的任务是创建SqlSession,SqlSession类似于JDBC的Connection对象,Mybatis提供
两种模式去创建SqlSessionFactory:一种是XML配置方式;另一种是代码方式。
尽量使用XML配置文件,一方面可以表面硬编码,一方面便于日后配置人员的修改,避
免重复编码。
Mybatis的配置信息在运行期间全部存储在Configuration对象中,其全限定名为
org.apache.ibatis.session.Configuration,这个对象将存在于这个MyBatis应用的生命周期
中,以便重复读取和使用,一次解析XML配置,多次使用,性能高,单例占用空间小。在
Mybatis中提供了两个SqlSessionFactory的实现类,DefaultSqlSessionFactory和SqlSessi
onMapper,SqlSessionManager目前还没有使用,仅使用了DefaultSqlSessionFactory。

1、使用XML方式构建
在这里配置一个简单的XML,它包含获取数据库连接实例的数据源(DataSource)、决
定事务范围和控制方式的事务管理器(TransactionManager)和映射器(SQL Mapper)。
--------------------------MyBatis-config.xml-----------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
类型别名只是Java类型的别名,它可以有效减少Xml配置文件中映射查询语句里
返回类型(resultType)为自定义实体类的完全限定名冗余
-->
<typeAliases>
<typeAlias alias="testClass" type="com.test.model.TestClass />
</typeAliases>
<!--
获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的
事务管理器(TransactionManager)
-->
<environments default="development">
<environment id="development">
<!-- 采用jdbc事务管理 -->
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="test" />
</dataSource>
</environment>
</environments>
<!-- 程序中所用到sql映射文件都在这里列出,这些映射sql都被Mybatis管理 -->
<mappers>
<mapper resource="com/test/xml/TestClassMapper.xml" />
</mappers>
</configuration>
-------------------------------------------------------------------------------------------
说明一下上面的配置:
(1)设置了一个笔名testClass,可以在Mybatis上下文中使用它。
(2)默认使用id是development环境配制包含两个方面一是采用JDBC的事务管理模
式,二是数据库连接信息。
devekopment环境配置,
(3)配置映射器
引入了TestClassMapper.xml文件,它的作用是提供SQL和SQL对POJO的映射规则
定义,包含映射器的相关信息,MyBatis将解析XML,来为我们生成映射器。

2、使用代码方式构建
除了使用XML配置方式外还可以使用Java编码来实现,并不推荐此方式,因为每次修改
环境时,不得不重新编译代码,不利于维护,此处不多做介绍。

(三)创建SqlSession
SqlSession是一个接口类,它是一个门面,真正干活的是Executor类,只需要告诉Sql
Session需要什么参数,内部运行过后会将结果返回,而我们并不用关心其是怎么工作的。
在MyBatis中SqlSession接口的实现类有两个,分别是DefaultSqlSession和SqlSession
manager,在使用MyBatis过程中,只需要关心SqlSession的用法就好,构建好SqlSession
Factory,然后生成MyBatis的门面接口SqlSession,其类似JDBC的Connection接口对象,
需要保证每次用完能正常关闭,finally语句最适合关闭资源,让链接资源还给数据库,如果
不及时关闭资源,数据库连接资源将会被耗尽,导致系统瘫痪。
SqlSession的用途主要有两种:
(1)获取映射器,让映射器通过命名空间和方法名找到对应的SQL,发送给数据库执行
后返回结果。
(2)直接通过命名信息去执行SQL返回结果,这是iBatis留下的方式,在SqlSession层
可以通过update、insert、select、delete等方法,带上SQL的id来操作在XML中配
置好的SQL,来完成工作;同时也支持事务,通过commit、rollback方法提交或回
滚。

(四)映射器
映射器是由Java接口和XML文件(或注解)共同组成的,作用如下:
1、定义参数类型。
2、描述缓存。
3、描述SQL语句。
4、定义查询结果和POJO的映射关系。
一个映射器有两种实现方式,一种是通过XML文件方式实现,例如上面的XML文件
中描述了一个XML文件,他是用来生成Mapper的,还可以通过代码方式实现,在
Configuration中注册Mapper接口并写入注解,这也是Mybatis的核心,并且最为复
杂,这两种实现方式个人强烈建议使用XML配置方式,原因有二:
1、Java注解有限,功能很少,Mapper内容较多,相对复杂,功能强大,使用XML
更灵活。
2、如果SQL复杂多变,条件很多,写在Java中可读性差,增加维护成本。
XML文件配置方式实现Mapper:
使用XMl文件配置是MyBatis实现Mapper的首选方式,它由一个Java接口和一个
XML文件构成。
(1)第一步,给出Java接口,如下代码:
----------------------TestClassMapper.java-----------------------------------
package com.test.mapper;
import com.test.po.TestClass;
public interface TestClassMapper{
public TestClass getTestClass(Long id);
}
--------------------------------------------------------------------------------
(2)第二步,给出一个映射XML文件,如下代码:
-----------------------TestClassMapper.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.test.mapper.TestClassMapper">
<select id="TestClassMapper" parameterType="long"
resultType="TestClass">
select id,name from test_class where id=#{id}
</select>
</mapper >
---------------------------------------------------------------------------------
上述XML文件中:
~该文件在配置文件MyBatis-config.xml中引入,所以MyBatis会读取该文件
生成映射器。
~文件中定义了一个命名空间为com.test.mapper.TestClassMapper的SQL
Mapper,此命名空间与定义的接口名称一致。
~用一个select元素定义一个查询SQL,id为getTestClass与接口方法一致,
parameterType表示传递给这条SQL的参数类型为java.lang.Long,resultType为结
果集返回类型,此处的testClass为MyBatis-config.xm中注册的别名。
            (3)创建符合Java Bean规范的POJO,代码如下:
----------------------------TestClass.java---------------------------------------
package com.test.po.TestClass;
public class TestClass{
private Long id;
private String name;

public Long getId(){
return id;
}

public void setId(Long id){
this.id = id;
}

public String getName(){
return name;
}

public void setName(String name){
this.name = name;
}
}
-------------------------------------------------------------------------------------
SQL中的#{id}为参数,而SQL列的别名和POJO的属性名称一致,MyBatis会把
查询结果自动映射到POJO属性上,这就是自动映射。可以用SqlSession来获取这
Mapper,代码如下:
--------------------使用SqlSession获取Mapper-----------------------------------
TestClassMapper testClassMapper =
sqlSession.getMapper(testClassMapper.class);
TestClass testClass = testClassMapper.getTestClass( 1L );/执行方法i
System.out.println(testClass.getName());、、打印名称
-------------------------------------------------------------------------------------
这样就完成了一次MyBatis查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值