zl程序教程

您现在的位置是:首页 >  后端

当前栏目

MyBatis概述详解编程语言

mybatis编程语言 详解 概述
2023-06-13 09:20:37 时间

什么是MyBatis?

我们可以从MyBatis官网上来查到MyBatis的简介(在这里分享一下我对于学一个框架的见解,我觉得第一步应该是去框架官网上看它的介绍的第一句话,来了解它到底是个什么东西,而不是上去直接百度),在这里翻译一下。

1、Mybatis是一个一流的持久化框架,它支持定制化SQL、存储过程和高级映射。(是什么)

2、MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。(优势)

3、MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(怎么做的)

第一句话就是概念,我们在介绍MyBatis的时候可以直接用。然后是第二句话,这是MyBatis相比较JDBC的明显优势所在,比如说我们想对数据库进行一个插入的操作,可以分别贴一下两种方法的代码

//JDBC方式进行插入
public static int insert(Test test) throws SQLException { Connection connection = null; PreparedStatement preparedStatement = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?useUnicode=true characterEncoding=utf-8 useSSL=false useJDBCCompliantTimezoneShift=true useLegacyDatetimeCode=false serverTimezone=UTC", "root", "123456"); connection.setAutoCommit(false); preparedStatement = connection.prepareStatement("INSERT INTO test VALUES (?,?,?)"); if (null != test.getId()) { preparedStatement.setInt(1, test.getId()); } else { preparedStatement.setNull(1, INTEGER); preparedStatement.setInt(2, test.getNums()); preparedStatement.setString(3, test.getName()); connection.commit(); return preparedStatement.executeUpdate(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (null != connection) { connection.close(); } catch (SQLException e) { e.printStackTrace(); return 0; }

//MyBatis方式进行插入 

public static int insert(SqlSession sqlSession, Test test) { 

 TestMapper testMapper = sqlSession.getMapper(TestMapper.class); 

 return testMapper.insert(test); 

 }

通过上面两段代码的展示,我觉得什么都不用说了,无论是复杂性和可读性,MyBatis的优势都太明显了。

MyBatis的使用

(1)xml文件

可以通过Generator来自动生成代码,但是代码里可能有一些乱七八糟的注释,配置Generator的方式的过程可以简单说一下,配置它主要是先在pom文件中配置plugin,然后通过GeneratorConfig.XML文件来进行,不过我不是很提倡这种,因为对于后续的维护和回滚有很大影响,不过也有解决办法,就是你创建两个项目,一个负责Generator,一个是你的主项目,可以拷贝Generator里生成的文件。

然后配置mapper.xml文件,在里面定义Bean、写SQL语句。

 (2) Annotation

主要就是通过注解来操作,[email protected]

我个人还是比较倾向于第一种,目前也只用过第一种。但是看了网上的相关博客之后,觉得这两种模式各有利弊,可以把他们俩的优劣势列出来


(1)跟接口分离,统一管理

(2)不会直接看到复杂的SQL语句,从而提高代码可读性

通常需要操作多个XML文件

 MyBatis-Config.xml文件解析

我们通过MyBatis-config.xml文件来控制MyBatis的使用,主要是控制properties和settings来进行的。

properties

首先是properties,我们通过它来设置我们的DataSource,也就是数据源,我们用的哪个数据库、数据库账号和密码等一些信息都在这设置

 dataSource type="UNPOOLED" 

 property name="driver" value="com.mysql.jdbc.Driver"/ 

 property name="url" value="jdbc:mysql://localhost:3306/mybatis"/ 

 property name="username" value="root"/ 

 property name="password" value="11111111"/ 
/dataSource

我们也可以通过传入属性到SqlSessionFactory里来进行控制,但是和在Mapper接口中写方法的两种方式(直接写和通过使用XML文件,两者可以并存,但只能是互补关系,不然会报错)不同的是,这样是可以覆盖的,因此MyBatis官方定义了他们的优先级:


在 properties 元素体内指定的属性首先被读取。 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。

 


settings

这个是设置MyBatis的一些默认行为,他应该怎样准备,怎样工作,怎样结束,涉及到许多scope,我就不在这一一罗列了,具体的可以参考MyBatis官网的XML配置 。

TypeHandlers

这也是一个比较重要的点,在写这篇文章的时候,我对于他的理解,就是它可以帮助我们在Javatype和JDBCtype之间作了一个桥梁,可以让我们的数据类型在写入的时候不会出错。MyBatis内部自己定义了许多的TypeHandlers,我们也可以自己定义。

Mappers

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了。但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。例如:


mapper resource="org/mybatis/builder/AuthorMapper.xml"/ mapper resource="org/mybatis/builder/BlogMapper.xml"/ mapper resource="org/mybatis/builder/PostMapper.xml"/ /mappers !-- 使用完全限定资源定位符(URL) -- mappers mapper url="file:///var/mappers/AuthorMapper.xml"/ mapper url="file:///var/mappers/BlogMapper.xml"/ mapper url="file:///var/mappers/PostMapper.xml"/ /mappers !-- 使用映射器接口实现类的完全限定类名 -- mappers mapper / mapper / mapper / /mappers !-- 将包内的映射器接口实现全部注册为映射器 -- mappers package name="org.mybatis.builder"/ /mappers

这些配置会告诉了 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了,也就是接下来我们要讨论的。

12411.html

cjavamysqlxml