暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mybatis基础

dunk的日志 2020-09-19
149

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();
      }
  }
}



文章转载自dunk的日志,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论