Mybatis简介
基本内容
- MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
- Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
Mybatis基本配置
导包
mybatis-3.2.7.jar
mysql-connector-java-8.0.16.jar
1. 配置Mybatis-config.xml
<?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>
< environments default=“development”> //default:是选中默认的数据源,选择environment 标签下的id
< environment id=“development”>
< transactionManager type=“JDBC”/>
< dataSource type=“POOLED”>
//数据源POOLED
//以下操作类似于JDBC的配置环境
< 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=“org/mybatis/example/BlogMapper.xml”/>
</ mappers>
</ configuration>
2. 配置mapper.xml文件
SqlSession 和 Mapper 的作用,而 SQL 语句映射 是个相当大的话题,可能会占去文档的大部分篇幅。不过为了让你能够了解个大概,这里 会给出几个例子。 在上面提到的两个例子中,一个语句应该是通过 XML 定义,而另外一个则是通过注解定 义。先看 XML 定义这个,事实上 MyBatis 提供的全部特性可以利用基于 XML 的映射语 言来实现,这使得 MyBatis 在过去的数年间得以流行。如果你以前用过 MyBatis,这个 概念应该会比较熟悉。不过 XML 映射文件已经有了很多的改进,随着文档的进行会愈发 清晰。这里给出一个基于 XML 映射语句的示例,它应该可以满足上述示例中 SqlSession 的调用。
< !DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN” “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>
< mapper namespace=“org.mybatis.example.BlogMapper”>
sql语句
< select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</ select>
</ mapper>
3. 配置mapper接口
public interface Eployeemapper {
List< Eployee> select();
}
4.创建测试类Test
@Test
public void test() throws IOException {
String resourcese= "mybatis-config.xml";
InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = sqlSessionFactory.openSession();
IEployee mapper=openSession.getMapper(IEployee.class); //参数是接口
Employee e=mapper.selectone(9);
System.out.println(e);
}
mybatis和Hibernate的区别
- Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。
- Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。
- Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。
- 总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最。
5. mybatis-config.xml配置内容顺序
SqlMapConfig.xml中配置的内容和顺序如下:
- properties(属性)
- settings(全局配置参数)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境集合属性对象)
- environment(环境子属性对象)
- transactionManager(事务管理)
- dataSource(数据源)
- mappers(映射器)
6.typeAliases(类型别名)
解决mapper.xml中类型名引用过长的问题
同时注意顺序,该标签必须放在properties标签下面
< typeAlias type="com.ali.bean.User" alias="user"/>
< !-- 批量别名定义,扫描整个包下的类,别名为类名,自动映射(大小写不敏感) -->
< package name="com.ali.bean" />
</ typeAliases>
多表联查
通过resultMap的id来匹配
< resultMap id="order" type="pojo.Orders">
< id property="id" column="id"/>
< result property="userId" column="user_id"/>
< result property="number" column="number"/>
< result property="createtime" column="createtime"/>
< association property="user" javaType="pojo.User">
< result property="id" column="user_id"/>
< result property="username" column="username"/>
< /association>
< /resultMap>
< select id="selectOrders" resultMap="order">
select o.id,
o.user_id,
o.number,
o.createtime,
u. username
from orders o
left join user u
on o.user_id = u.id
< /select>