什么是Mybatis
我们都知道mybatis是SSM三大框架中的一种,那么mybatis是用来干什么的呢。它是用来进行数据持久化保存的,没有学习到这个框架之前,我们通常用JDBC来进行数据的持久化保存,那么mybatis框架就把jdbc封装在底层,提供给用户免费使用。
为什么要使用框架
1.首先它是一个应用程序的半成品
2.它提供了可重用的公共结构
3.是按照一定规则组织的一组组件
其实,通俗易懂点,就是将多次重复出现的代码,进行封装,节省我们开发项目的时间,而且功能更加强大,对开发人员有很大的帮助。
mybatis的优势
1.它让开发人员不用再去考虑公共问题
2.将开发重心完全放在业务逻辑上
3.结构统一,易于学习和维护
4.新手去使用框架也可以写出好程序
世界上流行的框架
SSM:SpringMVC Spring Mybatis
SSH:Struts2 Spring Hibernate
还有SpringBoot SpringCloud等众多优秀的框架
持久化与瞬时状态
瞬时状态:这个可能不太好理解,当我们创建一个对象后,但是没有立即将它存入数据库中之前的这段状态就称为瞬时状态。
持久化状态:与瞬时状态相反,当我们去创建一个对象后 ,并且将它存入了磁盘的数据库中,这种保存状态被称为持久化状态。
事务(Transaction)
事务一般是指要做的事情,或者所做的事情,在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序单元。
默认情况下,Mysql的事务提交方式是自动提交,每一条sql语句就是一个事务,多条sql语句也是一个独立的事务。
我们可以通过下面的这一段代码来设置mybatis中数据库事务的自动提交。
**InputStream in = Resources.getResourcesAsStream(Mybatis配置文件.xml);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession session = factoy.openSession(true);**
延迟加载(LazyLoad)
默认情况下,mybatis会将数据库中一个表的所有映射关系全部加载出来,如果一张表的数据量太大,在读取的时候,就将所有关联表的数据全部加载出来,会造成内存使用量消耗过大,所以,在mybatis中提供了延迟加载,即什么时候用到关联表数据,什么时候再去发起查询并加载,避免了内存的浪费。
Mybatis的环境搭建
首先我们去建一个maven项目,在pom.xml文件中导入mybatis框架的依赖,导入之后,及时更新pom
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
XML文件的建立
在 resources资源包下建立mybatis的资源配置文件
<?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>
<properties resource="属性配置文件的路径" />
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliaes>
//将每一个对应的别名进行分别配置
<typeAlias type="类" alias="别名" />
//包扫描
<package name="实体类包名" />
</typeAliaes>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<!--<mapper resource="com/csi/dao/UserMapper.xml"/>
<mapper resource="com/csi/dao/ProviderMapper.xml"/>-->
<!--<mapper resource="com/csi/domain/RoleMapper.xml"/>-->
<package name="com/csi/dao"/>
</mappers>
</configuration>
属性配置文件,指的是你去连接数据库的属性配置文件,例如下面这样
url=jdbc:mysql://localhost:3306/sbill?&useSSL=false&serverTimezone=UTC
driver=com.mysql.cj.jdbc.Driver
username=root
password=root
typeAiaes中去设置单个实体类或者整个包下面的实体类的别名,例如下面这样
如果是设置单个实体类,type属性为这个实体类的全限定类名,alias为你要给它起的别名
如果是设置某一个包下面的所有实体类的别名,那么使用package节点,name属性的属性值为这个包的全限定包名,这样,这个包下所有的实体类的别名就是你原来类名的首字母小写,其余不变的一个别名
例如这个包下的User类,在配置完后它的别名就为user了。
<typeAliases>
<typeAlias type="com.csi.domain.User" alias="user"/>
<typeAlias type="com.csi.domain.Provider" alias="provider" />
<package name="com.csi.domain" />
</typeAliases>
environments节点标签,里面可以配置多个enviroment节点标签,这就体现了mybatis的多平台性,举个简单的例子,当你在这个配置文件中配置了mysql的环境,也配置了oracle的环境,那么只需要在根节点environments的default属性里面写上对应的environment节点里面的id的属性值,就可以了。当然我们也可以动态的去调用其中的某一个environment节点,通过下面的这样的方式,参数dev即为你environment节点标签的id属性的属性值。
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is,"dev") ;
transactionManager节点,表示事务管理器,type属性的属性值为JDBC,它默认使用的是JDBC调用,当然也可以配置其他的使用方式
dataSource节点,表示数据源,type属性的属性值为POOLED,它的子节点property,则是对 数据库资源文件内容的解析并给属性赋值。在赋值的时候使用${}