Mybatis基础
基础概念
1、框架:是一个提供给开发人员使用的半成品软件,加上我们自己的代码就可以达到很好的效果,大大提高开发效率。2、ORM(Object Relation Mapping):对象关系映射,将表以及表中的数据映射成类和对象。 一张表--->一个类 表中的字段--->对象的属性 一行表数据--->一个具体的对象3、mybatis框架:
是一个持久层框架,封装了原始的jdbc操作。
mybatis支持xml和注解两种方式配置sql。
mybatis支持ORM思想封装执行sql的结果。
什么是持久层?持久是相对于瞬时来说的, 持久层,可以理解成数据 保存在 数据库或者 硬盘一类可以保存很长时间的设备里面,不像放在内存中那样断电就消失了,也就是把数据存在持久化设备上 ,你想一下 内存中的数据 断电就没有了,硬盘的数据 是否会像内存中的数据一样断电消失么?
为什么要使用持久化框架?企业应用中数据很重要(各种订单数据、客户数据、库存数据之类的),比应用程序本身更重要, 所以需要把数据持久化。持久化可以通过很多方式,写文件和数据库都可以。只是现在企业一般都会选择把数据持久化到数据库中,因为可以很方便的查询统计分析,但数据库的数据最终还是会写到磁盘上的。Java 程序员为了操作数据库, 最开始是使用JDBC 来进行的,但是这种方式开发效率低 ,要写一堆重复代码,加上关系数据库和对象本身存在所谓的阻抗不匹配情况,所以 为了提高开发效率,有人发明了 ORM 即 对象关系映射框架(Hibernate是其中的佼佼者),对于 Java 程序员来说,就可以通过操纵对象来操纵数据库了。
使用环境准备
1、准备工作(环境搭建:创建module、创建数据库和表、导入jar包、创建实体类)2、创建并编写mybatis映射配置文件3、创建并编写mybatis核心配置文件4、创建测试类,使用mybatis提供的API操作数据
测试类🚩
1 加载核心配置文件2 获取SqlSessionFactory工厂对象3 通过SqlSessionFactory工厂对象获取SqlSession核心对象4 执行操作获取结果5 打印结果6 释放资源
@Test
public void myBatis_findAll() throws IOException {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MybatisConfig.xml");
//创建SqlSessionFactory对象
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
//获取SqlSession对象
SqlSession sqlSession = ssf.openSession();
//执行SQL操作,根据需求选择具体的SQL执行方法,得到结果
List<Student> students = sqlSession.selectList("StudentMapper.findAll");
//打印输出
for (Student student : students) {
System.out.println(student);
}
//释放资源
sqlSession.close();
}
小结概括🚩
1、创建并编写映射配置文件:StudentMapper.xml 主要配置要执行的sql语句,名称空间+id唯一确定一条sql语句。2、创建并编写核心配置文件:MybatisConfig.xml 主要配置连接数据库的相关参数和加载映射配置文件3、测试类 读取资源(Resources)-->创建建设者(SqlSessionFactoryBuilder)造工厂(SqlSessionFactory)-->工厂生产核心对象(SqlSession)-->执行CRUD操作-->处理结果-->释放资源
mybatis四个API
resource类:加载核心配置文件 ---> 前提地基
SqlSessionFactoryBuilder类:用来创建SqlSessionFactory工厂对象 ---> 工厂的建设者
SqlSessionFactory类:用来获取SqlSession核心对象 ---> 生产工厂
SqlSession类:执行CRUD操作、事务管理,接口代理 ---> 核心的生产操作工
映射配置文件🚩
作用:主要用来配置要执行的增删改查对应的SQL语句
<!--namespace=""必须要写-->
<mapper namespace="StudentMapper">
<!--查询,id是该文件中sql的唯一标识,parameterType是参数类型,resultType结果要封装的类型-->
<select id="" parameterType="" resultType="">
select * from ...
</select>
<!--添加-->
<insert id="" parameterType="">
insert into ...
</insert>
<!--修改-->
<update id="" parameterType="">
update 表名 set ...
</update>
<!--删除-->
<delete id="" parameterType="">
delete from 表名 where id=#{id}
</delete>
</mapper>
核心配置文件🚩
作用(核心):
1、引入配置连接池参数的属性文件
2、其他配置(日志读取方式的对象 ---> 一般配置log4j)
3、给映射配置文件中SQL执行语句里的参数类起别名
4、配置数据库环境(事务管理 ---> 默认JDBC,连接池 ---> 默认pooled)
5、引入映射配置文件
<!--configuration 核心根标签-->
<configuration>
<!--引入数据库连接的配置文件-->
<properties resource="jdbc.properties"/>
<!--配置LOG4J-->
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
<!--配置别名-->
<typeAliases>
<!--给单个类配置别名 alias="student"表示别名,不写的话类名就是别名,不区分大小写,比较少用-->
<!--<typeAlias type="com.itheima.domain.Student" />-->
<!--给一个包中的类配置别名,类名就是别名,不区分大小写,常用-->
<package name="com.itheima.domain"/>
</typeAliases>
<!--environments配置数据库环境,环境可以有多个。default属性指定使用的是哪个-->
<environments default="mysql">
<!--environment配置数据库环境 id属性唯一标识-->
<environment id="mysql">
<!-- transactionManager事务管理。type属性,采用JDBC默认的事务-->
<transactionManager type="JDBC"></transactionManager>
<!-- dataSource数据源信息。type属性 默认使用连接池-->
<dataSource type="POOLED">
<!-- property获取数据库连接的配置信息 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- mappers引入映射配置文件 -->
<mappers>
<!-- mapper 引入指定的映射配置文件 resource属性指定映射配置文件的名称 -->
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
测试类中重复操作抽取工具类
public class Mybatis_Utils {
private static SqlSessionFactory ssf;
static {
try {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MybatisConfig.xml");
//创建SqlSessionFactory对象
ssf = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
//对外提供获取SqlSession对象的方法
public static SqlSession getSqlSession(){
return getSqlSession(true);
}
public static SqlSession getSqlSession(boolean autocommit){
return ssf.openSession(autocommit);
}
//对外提供释放资源的方法
public static void close(SqlSession sqlSession){
if (sqlSession!=null){
//释放资源
sqlSession.close();
}
}
public static void commit_close(SqlSession sqlSession){
if (sqlSession!=null){
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
}
}




