1.MyBatis的入门
1.1MyBatis简介
MyBatis实际是由Ibatis发展而来的,Ibatis1.x和Ibatis2.x统称为:Ibatis。在Ibatis3.x版本Ibatis就成了MyBatis!MyBatis位于软件三层架构中的Dao层,主要是和数据库打交道。
MyBatis的官网:https://github.com/mybatis/mybatis-3
MyBatis下载:
1.2MyBatis的优势【面试】
1.MyBatis是一个框架,除了可以对数据表完成增删改查之外,还有缓存、字段映射等机制。
2.MyBatis支持动态SQL[根据不同参数,拼接成不同的SQL语句]
3.MyBatis支持Java代码和SQL语句分离。
4.MyBatis可以直接将表的关联关系映射为POJO对象的关联关系
5.MyBatis是一个半自动化的ORM框架
1.3MyBatis的第一个案例【参考官方文档】
1.导入jar:mybatis、mysql2.创建mybatis的全局配置文件,并配置它
<configuration>
<!-- 用来配置数据库连接信息 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/xiaomi" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 用来加载SQL映射文件 -->
<mappers>
<mapper resource="abc.xml" />
</mappers>
</configuration>
3.创建mybatis的SQL映射文件,并配置它
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="com.offcn.bean.Product">
select pid,pname,color,price,description from product where pid = #{pid}
</select>
</mapper>
4.写测试代码
4.1根据mybatis的全局配置文件生成SqlSessionFactory对象
4.2通过SqlSessionFactory对象的openSession方法得到SqlSession
4.3通过SqlSession对象给数据库发送SQL语句
4.4关闭SqlSession连接
public void testMyBatis() throws IOException {
//1.根据mybatis的全局配置文件生成SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
//2.通过SqlSessionFactory对象的openSession方法得到SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.通过sqlSession对象给数据库发送SQL语句
Object selectOne = sqlSession.selectOne("org.mybatis.example.BlogMapper.selectBlog", 10);
System.out.println(selectOne);
//4.关闭SqlSession对象
sqlSession.close();
}
2.MyBatis的全局配置文件
注意:MyBatis全局配置文件中的这些标签是有顺序的。
2.1Properties
作用:properties是用来加载properties配置文件的
案例:
<!-- properties是用来加载properties配置文件的
属性:resource:用来加载src目录下的properties配置文件的
url:用来加载本地磁盘或者网络url的某个properties配置文件 -->
<properties resource="db.properties">
<property name="username" value="root"/>
</properties>
<!-- 用来配置数据库连接信息 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
2.2Settings
<!-- setttings标签里面有多个setting标签,每一个setting标签都对应mybatis一个重要设置项 -->
<settings>
<!-- 开启数据表的以下划线分割的字段名转为pojo对象的驼峰式命名的属性名 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
2.3typeAliases:类型别名处理器
作用:为类起别名
<!-- typeAliases里面有多个typeAlias标签,每一个typeAlias标签都对应一个类的别名
typeAlias:
type属性:表示为哪个类起别名,别名默认是简类名,而且别名不区分大小写
alias属性:自己指定别名
-->
<typeAliases>
<typeAlias type="com.offcn.bean.Product" alias="a"/>
<!-- 给某个包下的类批量起别名,别名默认是简类名,不区分大小写,当然如果想为这个包下某个类单独指定别名,可以使用alias注解指定 -->
<package name="com.offcn.bean"/>
</typeAliases>
补充:MyBatis自带了一些类型别名
2.4typeHandlers
mybatis自带了类型处理器,负责将java中的类型转换为数据库的类型
2.5environments
<!--
environments标签内部可以有多个environment标签,每一个environment标签都对应一种环境
开发环境:
测试环境:
线上环境:
每一个environment标签内部又分了 transactionManager标签和 dataSource标签:
transactionManager标签:配置事务管理器
type: JDBC|MANAGED
JDBC: 支持事务
MANAGED:不支持事务
dataSource标签:
type: UNPOOLED|POOLED|JNDI
UNPOOLED:不支持数据库连接池
POOLED:支持数据库连接池
JNDI:过时了
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
2.6databaseIdProvider
作用:是为数据库厂商起别名。
Mybatis是支持多种数据库的,支持Oracle、mysql、SqlServer、Db2等近10种数据库。
分页:mysql和oracle分页语句是不一样的!
SQL映射文件:
<select id="selectBlog" resultType="com.offcn.bean.Product" databaseId="oracle">
select pid,p_name,color,price,description from product where pid = #{pid}
</select>
2.7mappers
作用:用来加载sql映射文件或者加载Mapper接口
<!-- 用来加载SQL映射文件
mappers标签内部可以有多个mapper标签,每一个mapper标签都可以加载一个sql映射文件或者一个mapper接口
mapper标签:
resource:默认是加载src目录下的sql映射文件,和接口没关系
url:默认是加载本地磁盘或者网络url上的映射文件
class:加载一个mapper接口,要求
1. 接口和sql映射文件必须在同一个包下
2.接口和sql映射文件名必须一致
3.sql映射文件的namespace值和mapper接口的全类名保持一致
4.sql映射文件中某个sql语句标签的id值和mapper接口的某个方法名保持一致
-->
<mappers>
<!-- 批量加载某个包下的接口 -->
<package name="com.offcn.dao"/>
<!-- <mapper class="com.offcn.dao.ProductMapper" /> -->
</mappers>
2.8补充:基于注解的增删改查
@Select("select pid,p_name,color,price,description from product where pid = #{pid}")
public Product getProdutcById(Integer pid);