Mybatis快速入门,你问我答,一篇即可

发布时间:2022-06-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Mybatis快速入门,你问我答,一篇即可脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言Mybatis是一个ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句, 可以严格控制sql执行性能,灵活度高🚀 1.MyBatis是什么?Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,加载驱动、创建连接、创建statement等繁杂的过程,开发者开发时只需要关注如何编写SQL语句,可以严格控制sql执行性能,灵活度高。作为一个半ORM框架,MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。通过xML 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。由于MyBatis专注于SQL本身,灵活度高,所以比较适合对性能的要求很高,或者需求变化较多的项目,如互联网项目。

 

🚀 2. Mybaits的优缺点🚩🚩 优点:基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。能够与SPRing很好的集成;提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

🚩🚩 缺点:SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

🚀 3. Hibernate 和 MyBatis 的区别相同点:都是对jdbc的封装,都是持久层的框架,都用于DAO层的开发。不同点1、映射关系MyBatis 是一个半自动映射的框架,配置Java对象与sql语句执行结果的对应关系,多表关联关系配置简单。Hibernate 是一个全表映射的框架,配置Java对象与数据库表的对应关系,多表关联关系配置复杂。2、 SQL优化和移植性Hibernate 对SQL语句封装,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性,此外还提供 HQL(Hibernate Query Language)操作数据库,数据库无关性支持好,但会多消耗性能。如果项目需要支持多种数据库,代码开发量少,但SQL语句优化困难。 MyBatis 需要手动编写 SQL,支持动态 SQL、处理列表、动态生成表名、支持存储过程。开发工作量相对大些。直接使用SQL语句操作数据库,不支持数据库无关性,但sql语句优化容易。3、开发难易程度和学习成本Hibernate 是重量级框架,学习使用门槛高,适合于需求相对稳定,中小型的项目,比如:办公自动化系统MyBatis 是轻量级框架,学习使用门槛低,适合于需求变化频繁,大型的项目,比如:互联网电子商务系统🚩🚩 总结MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。

🚀 4. MyBatis是如何解决JDBC编程的?1、数据库链接创建、释放频繁造成系统资浪费从而影响系统性能,如果使用数据库链接池可解决此问题。解决:在SqlMapconfig.xml中配置数据链接池,使用连接池管理数据库链接。2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。解决:将Sql语句配置在XXXXmapPEr.xml文件中与java代码分离。3、 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。解决: Mybatis自动将java对象映射至sql语句。4、 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。解决:Mybatis自动将sql执行结果映射至java对象。

🚀 5. #{}和${}的区别?#{}是占位符,预编译处理;${}是拼接符,字符串替换,没有预编译处理。Mybatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用Preparedstatement的set方法来赋值。Mybatis在处理时 , 是原值传入,就 是 把 {}时,是原值传入,就是把时,是原值传入,就是把{}替换成变量的值,相当于JDBC中的Statement编译变量替换后,#{} 对应的变量自动加上单引号 ‘’;变量替换后,${} 对应的变量不会加上单引号 ‘’#{} 可以有效的止SQL注入,提高系统安全性;${} 不能防止SQL 注入#{} 的变量替换是在DBMS 中;${} 的变量替换是在 DBMS 外🚀 5. 在Mapper中如何传递多个参数?1、若Dao层函数有多个参数,那么其对应的xml中,#{0}代表接收的是Dao层中的第一个参数,#{1}代表Dao中的第二个参数,以此类推。2、使用@Param注解:在Dao层的参数中前加@Param注解,注解内的参数名为传递到Mapper中的参数名。3、多个参数封装成Map,以HashMap的形式传递到Mapper中。

🚀 6. Mybatis有哪些动态sql?Mybatis动态sql可以在xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值完成逻辑判断,并动态拼接sql的功能。Mybatis提供了9种动态sql标签:trim、where、set、foreach、if、choose、when、otherwise、bind

🚀 7. Mybatis的一级、二级缓存是?1、 一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存。2、 二级缓存与一级缓存机制相同,默认也是采用PerpetualCache,HashMap存储,不同在于其存储作用域为Mapper(namespace),并且可自定义存储源,如Ehcache。默认打不开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置。

🚀 8.MyBatis的Mapper接口调用时有哪些要求?1、Mapper接口方法名和mapper.xml中定义的每个sql的id相同;2、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType类型相同;3、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同;4、Mapper.xml文件中的namespace即是mapper接口的类路径。

🚀 9.第一个Mybatis程序思路:搭建环境–>导入Mybatis–>

🐴 9.1 搭建环境搭建数据库创建项目创建maven项目删除src目录导入依赖

<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>;mybatis</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.14.3</version> <scope>compile</scope> </dependency> <dependency> <groupId>MySQL</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency></dependencies>🐴 9.2 创建一个模块🚩🚩 编写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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- <mappers> <mapper resource="org/mybatis/example/blogMapper.xml"/> </mappers>--></configuration>🚩🚩 编写Mybatis工具类

package com.xia.utils;

import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;import java.io.InputStream;

public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory;

static { try { //使用Mybatis第一步,获取SqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } }

//有了SqlSessionFactory,就可以从中获得SqlSession的实例 //SqlSession 完全包含了面向数据库执行SQL 命令所需的所有方法 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); }}🐴 9.3 编写代码🚩🚩 编写实体类

package com.IT.jeames007;

public class User { private int id; private String name; private String pwd;

public int getId() { return id; }

public void setId(int id) { this.id = id; }

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public String getPwd() { return pwd; }

public void setPwd(String pwd) { this.pwd = pwd; }}

🚩🚩 Dao接口

package com.it.jeames007;import java.util.List;

public interface UserDao { List<User> getUserList();}🚩🚩 接口实现类由原来的UserDaoImpl转换为一个Mapper配置文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.xia.dao.UserDao"> <!--查询语句,id对应方法名,resultMap为返回结果--> <select id="getUserList" resultMap="com.xia.dao.User"> select * From mybatis.user; </select></mapper>🚩🚩 编写测试类

package com.it.jeames007;

import com.xia.utils.MybatisUtils;import org.apache.ibatis.session.SqlSession;import org.testng.annotations.Test;

import java.util.List;

public class UserDaoTest { @Test public void Test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } sqlSession.close(); }}

 

脚本宝典总结

以上是脚本宝典为你收集整理的Mybatis快速入门,你问我答,一篇即可全部内容,希望文章能够帮你解决Mybatis快速入门,你问我答,一篇即可所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。