mybatis是什么?
mybatis是持久层框架(不完全的ORM框架)。
mybatis入门门槛不高,学习成本低,可以让程序员把精力放到SQL语句上,对sql语句优化非常方便,适用于需求变化较多的项目,比如互联网项目。
为什么要学习mybatis?
1.在mybatis中数据库没有连接池,每次请求都会重新创建。 mybatis使用线程池
2.用传统的方式写的dao包方法中,sql语句是写死在代码中,preparedStatement 中的设置的参数也是写的死不利于程序后期维护。mybatis可以把这些内容都在xml文件中进行配置。
mybatis框架的执行过程
- 配置mybatis的配置文件(SqlMapConfig.xml)
- 通过配置文件,加载mybatis的运行环境,创建SqlSessionFactory会话工厂
- 通过SqlSessionFactory会话工厂来创建sqlsession
- 调用sqlsession的操作数据库方法
- 释放资源,关闭sqlsession
mybatis的核心配置文件(SqlMapConfig.xml)
SqlMapConfig.xml中由下列标签组成:
- properties 属性:可以加载properties配置文件的信息
- settings 设置:可以设置mybatis的全局属性
- typeAliases 类型命名
- typeHandlers 类型处理器
- objectFactory 对象工厂
- plugins 插件
- environments 环境
- environment 环境变量
- transactionManager 事务管理器
- dataSource 数据源
- databaseIdProvider 数据库厂商标识
- mappers 映射器
这些标签都包在configuration标签中
下面是SqlMapConfig.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>
<!-- 打印查询语句,配置日志文件 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!-- 给全路径起别名 -->
<typeAliases>
<typeAlias type="cn.mybatis.po.emp" alias="emp"/>
<typeAlias type="cn.mybatis.po.Departments" alias="Departments"/>
</typeAliases>
<!-- 配置数据库连接 -->
<environments default="sqlserver">
<environment id="sqlserver">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/emp" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="sqlmap/emp.xml"/>
<mapper resource="sqlmap/empMapper.xml"/>
<mapper resource="sqlmap/departmentsMapper.xml"/>
</mappers>
</configuration>
使用工厂模式创建sqlsession并且操作数据库
//获取SqlMapConfig.xml配置文件
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂,要传入mybitis的配置信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//得到sqlsession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//sqlsession对象可以通过Execute执行器来执行sql语句
//第一个参数statementid,第二个参数是指占位符的参数
emp emp = sqlSession.selectOne("cn.swjd.mapper.StudentMapper.findEmpById", id);
//最后释放资源
sqlSession.close();
empMepper.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">
//namespace:可能会有很多的mapper.xml文件,相当于mapper.xml文件的唯一标识,为了使用代理模式,和接口的全限定类名保持一致
<mapper namespace="com.mybatis.interfaces.empMapper">