首页 > 其他分享 >SSM框架之Mybatis基本概念及使用方法

SSM框架之Mybatis基本概念及使用方法

时间:2022-09-18 23:24:34浏览次数:89  
标签:xml mapper SSM mybatis session sql Mybatis 基本概念

SSM

SpingMVC + Spring + Mybatis

 

SpringMVC 充当Servlet 可以理解为SpringMVC是Spring的WEB支持

Mybatis 充当Dao层

Sping 充当一个润滑油的角色

 

MybatisPlus 国内的团队 baomidou 可以写sql 也可以不写sql 处理复杂需求介于Mybatis和Hibernate之间

Hibernate 充当Dao层 不需要写sql 自动生成并执行sql语句

 

Mybatis

作用

  • 是一款优秀的持久层框架 支持定制化的sql 存储过程以及高级映射

  • 之前我们学过的所有的JDBC代码和手动设置参数获取结果集 都不用写了

  • 使用简单的XML配置文件或者注解 来映射原生信息 更加的方便

 

持久化

持久化把数据存储在磁盘而不是内存

  1. 程序产生的数据首先都是在内存

  2. 内存不可靠 我们需要一些技术把数据永久存储在硬盘上

 

持久层

之前的Dao层 之前通过反射 通过泛型 通用的Dao 我们在操作不同的表或者逻辑的时候 我们之前会创建一个接口 在创建接口的实现类 实际上这个dao层 就叫持久层(让数据持久化的层)

 

优缺点

  • sql语句与代码分离 寄存于xml文件中(最牛X的特点)

    • 优点:便于维护管理 不用在java代码中找sql语句

    • 缺点:不能通过打断点的方式调试,通过日志来解决这个问题

  • 动态sql语句(最牛X的特点)

    • 优点:通过逻辑标签代替编写逻辑代码 生成不同的sql

    • 缺点:拼接一些比较复杂的sql语句时,没有直接拼接更直观

  • 查询结果和java对象自动映射

    • 优点:保证名称之间的对应关系 可以下划线和驼峰自动转换

    • 缺点:对开发人员的sql语句以来很强

 

XML配置文件

约束

保证我们的xml能够使用哪些标签 保证xml的有效性

 

主配置文件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 环境们  配置数据库连接相关  可以配置多个数据库连接 -->

   <environments default="development">
       <environment id="development">
           <!--事务管理 -->
           <transactionManager type="JDBC"></transactionManager>
           <!-- 数据源配置 -->
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver"/>
               <property name="url" value="jdbc:mysql://127.0.0.1/lyh_db03?useUnicode=true&amp;characterEncoding=utf-8/>
               <property name="username" value="root"/>
               <property name="password" value="123"/>
           </dataSource>
       </environment>
   </environments>
</configuration>

另外一个xml

第一次使用Mybatis 需要两个文件

  • 一个接口类mapper(就是咱们之前写的dao)java文件 不需要我们写实现类

  • 一个接口对应一个xml文件

  • 两个文件的名字最好相同 UserMapper.java -> UserMapper.xml

  • 框架会根据mapper和xml联合 通过代理模式创建实现类

  • 一般情况下 我们管接口对应的xml的文件叫映射文件

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace: 对应mapper接口的全类名 -->
<mapper namespace="com.jsoft.dao.UserMapper">


   <!-- 写sql语句 -->
   <!--
       id mapper接口中的方法名
       resultType 方法的返回值类型 如果时entity类型 需要全类名
       parameterType   方法的入参的类型 可以省略
       #{id} 代表方法的入参 类似于之前的? 占位符   Mybatis底层使用的是什么? PreparedStatement
    -->

   <select id="selectUserById" resultType="com.jsoft.entity.User" parameterType="">
      select id,username,password from user where id = #{id}
   </select>

</mapper>

映射文件最终要交给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>
<!-- 注册各个映射文件   -->
   <mappers>
       <mapper resource="mapper/UserMapper.xml"></mapper>
   </mappers>
   
</configuration>

 

测试类

可以将重复的语句 使用@Before @After 注释

@Before 在所有方法执行之前执行

@after 在所有方法执行之后执行

public class UserMapperTest {
   SqlSession session;
   UserMapper mapper
       
   @Before
   public void before(){
       InputStream inputStream = UserMapperTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
       SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
       SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
       // 获取session
       session = sqlSessionFactory.openSession();
       //获取对应的mapper
       mapper = session.getMapper(UserMapper.class);
  }

   @After
   public void after(){
       try {
           session.commit();
           session.close();
      }catch(Exception e){
           e.printStackTrace();
           session.rollback();
      }
  }

   @Test
   public void testSelectUserById(){
       // 调接口里的方法
       User user = mapper.selectUserById(1);
       System.out.println(user);
  }
}

 

Mybatis有两种方式可以提交事务

1.通过session调用commit方法

2.关闭session

 

 

在Mybatis的映射文件中 $和#的区别?

$ 底层使用的是Statement 拼串

·#· 底层使用的时PrepareStatement 预编译 #相当于占位符

 

如果想要做模糊查询 在我们java代码层面去解决%问题

 

标签:xml,mapper,SSM,mybatis,session,sql,Mybatis,基本概念
From: https://www.cnblogs.com/lyh15552012044/p/16706234.html

相关文章

  • MyBatis标签之Select resultType和resultMap
    摘要:介绍MyBatis中Select标签的两个属性resultType和resultMap及其区别。1MyBatis动态SQL之if语句2MyBatis动态sql之where标签|转3MyBatis动态SQL之set标签|转4M......
  • 使用 CSS 的 Glassmorphic 配置文件卡
    使用CSS的Glassmorphic配置文件卡在这篇博客中,我们使用css创建了一个glassmorphic配置文件卡。获取完整的源代码编码扭矩.com版权声明:本文为博主原创文章,遵循......
  • MyBatis配置文件开启驼峰命名
    mybatis-config.xml文件中配置开启<settings><!--配置:开启二级缓存--><!--<settingname="cacheEnabled"value="true"/>--><settingnam......
  • MyBatis(二六):缓存——缓存原理
    首先来思考一下,在开启了二级缓存的情况下,一个用户查询数据经历的过程是什么样的。我们看一下,下面这张图: 用户先去二级缓存中去寻找数据,如果找不到再去一级缓存寻找数......
  • 计算机毕业设计 SSM疫情社区管理系统 疫情防控管理系统 医疗专家咨询管理系统 志愿者
    ......
  • [JS]原型的基本概念
    目录原型系统原型基本概念示例关系改进创建对象的模式单纯使用原型模式创建对象综合构造函数和原型模式创建对象原型系统原型基本概念原型(prototype)是函数特有的属......
  • MyBatis(二五):缓存——二级缓存
    上一篇我们学习了一级缓存,这次我们来学习二级缓存。一、什么是二级缓存二级缓存也叫全局缓存,是namespace级别的缓存,每一个命名空间对应一个二级缓存。二、二级缓存的工......
  • MyBatis
    MyBatis持久层开发MyBatis配置文件<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://myb......
  • JavaSe-day02-基本概念
    Java基本语法本章内容有注释,关键字,字面量,变量!注释什么是注释注释是在程序指定位置添加的说明性信息,就是对代码的一种解释。注释的分类1.单行注释格式://注释信息......
  • 4.ssm整合:Spring层
    mybatis-config.xml点击查看代码<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN"......