入门
传统方式:
获取sqlSessionFactory对象
获取sqlSession对象
sqlSession直接调用自有的api,如sqlSession.select,insert,update
接口式编程:
获取sqlSessionFactory对象
获取sqlSession对象
获取接口的实现类对象
用接口实现类调用相应的方法
原生 : dao -----> daoImpl
mybatis: Mapper ---->xxxMapper.xml
SqlSession代表和数据库的一次会话,用完必须关闭,SqlSession和Connection一样都是线程非安全的,每次使用都应该重新获取。
Mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。(将接口和xml绑定)
mybatis的两个重要文件:
全局配置文件:mybatis-config.xml,用于配置数据库,事务等系统属性
sql映射文件:保存每一个sql语句的映射信息
XML文件中提示信息绑定,有时候XML文件提示没有,需要手动关联
在联网状态下可以直接点击红框中的dtd地址,下载相应的dtd文件,在Eclipse中设置相应的属性,如图所示,设置好之后应用,关闭相应的xml文件之后再重新打开。
mybatis-config.xml全局配置文件:
properties标签:引入外部properties配置文件内容
resource:引入类路径下的资源
url:引入网络路径或磁盘路径下的资源
settings:http://www.mybatis.org/mybatis-3/zh/configuration.html#settings
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
typeAliases:
typeHandlers:类型处理器
plugins:插件
environments:环境配置,type中的属性都是别名,对应的有相应的实现类,可以在mybatis中的Configuration配置类中找到相应的对应类
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</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>
默认使用的环境 ID(比如:default=“development”)。
每个 environment 元素定义的环境 ID(比如:id=“development”)。
事务管理器的配置(比如:type=“JDBC”,type可以为JDBC和MANAGED,一般都是用JDBC)。
数据源的配置(比如:type=“POOLED”,type可以为UNPOOLED,POOLED,JNDI ,一般使用POOLED)。
databaseIdProvider:数据库厂商标识
MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性,在Mapper.xml文件中使用databaseId 指定使用哪种数据库。
在Mybatis中实现多个数据库版本切换,首先需要在mybatis-config.xml文件中设置databaseIdProvider,以及数据库环境,如果和Spring结合则Spring会为其提供,为不同的数据库设置相应的别名,如果不设置则是默认的。然后在Mapper对应的xml文件中为不同的数据库协商相应的sql,并明确指定databaseId。当需要使用不同的数据库时,只需要在环境配置的时候启用相应的数据库配置,Mybatis会加载带了指定databaseId的SQl和不带databaseId的sql,但是会精确匹配,比如当前使用的是Mysql数据库,Mapper文件中写了三个sql,一个指定oracle,一个指定mysql,一个没有指定,那么会加载mysql和没有指定的,但会匹配上制定了Mysql的sql。
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
<select id="findLectureById" parameterType="int" resultMap="lectureMap" databaseId="mysql">
select id,lecture_name,note from t_lecture where id=#{id}
</select>
<select id="findLectureById" parameterType="int" resultMap="lectureMap" databaseId="oracle">
select id,lecture_name,note from t_lecture where id=#{id}
</select>
mappers:映射器
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
使用接口映射的形式必须将其sql映射文件xml放在与接口定义的位置相同的地方,并且xml的名称与接口的名称需要一样,除了文件后缀。除了上述配置外,还可以使用注解的方式绑定接口与sql的映射关系。注解使用就无需编写SQL映射的xml文件,使用来注册。如在接口中定义了相应的抽象方法,可以在方法上加上注解@Select(sql语句),@Insert(sql语句),推荐使用sql映射文件。