| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java框架 MyBatis相关介绍、环境搭建和基础使用 -> 正文阅读 |
|
[Java知识库]Java框架 MyBatis相关介绍、环境搭建和基础使用 |
一、什么是框架?框架( Framework )是构成一类特定软件可复用设计的一组相互协作的类。框架规定了你的应用的体系结构。它定义了整体结构,类和对象的分割,各部分的主要责任,类和对象怎么协作,以及控制流程。框架预定义了这些设计参数,以便于应用设计者或实现者能集中精力于应用本身的特定细节。 软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事务处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。 框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。 软件为什么要分层? 为了实现“高内聚、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源…总之好处很多啦。 二、什么是ORM?ORM:(Object/Relation Mapping): 对象/关系映射 ORM的实现思想: 将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。 三、回顾JDBC连接数据库步骤: 1.注册驱动,获取连接 2.创建Statement对象 3.execute()方法执行SQL 4.把结果集转换成POJO对象 5.关闭资源 Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/tianliang"; String username = "root"; String password = "root"; Connection conn = DriverManager.getConnection(url, username, password); String sql = " select * from t_user where; "; PreparedStatement pst = conn.prepareStatement(sql); ResultSet rs = pst.executeQuery(); while(rs.next()) { int id = rs.getInt(1); String uname = rs.getString(2); String pw = rs.getString(3); String nickname = rs.getString(4); System.out.println(id+" "+uname+" "+pw+" "+nickname); } rs.close(); pst.close(); conn.close(); 思考:当项目复杂时,直接使用原生的API会带来什么问题? ①、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 ②、Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java代码。 ③、使用 preparedStatement 占位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能 少,修改 sql 还要修改代码,系统不易维护。 ④、对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便,没有实现实体类到数据库记录的映射。 ⑤、没有提供缓存功能。 四、Mybatis相关介绍MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis 是一款优秀的持久层框架,它支持 SQL、存储过程以及高级映射。 如 JDBC中 我们需要有繁琐的流程,和设置参数,并且获取结果集的时候也需要循环遍历,并且手动封装到实体类对象中 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 MyBatis 可以使用 简单的 XML 或注解来配置和映射 接口和 Java 的 实体类 MyBatis 有两种用法,一个是注解,一个是XML,各有千秋 注解 : 使用注解的话,方便一些,不需要有XML配置文件,可能看上去会好看一些,但是需要代码和SQL在一起 XML : 把SQL语句放到XML文件中,java代码中会感觉干净一些,并且,使用XML形式 写一些复杂的SQL语句会比较方便,也能统一管理,有其他同事接手工作的时候,或者其他同事优化数据库查询的时候,位置好找,修改便捷,不容易出错 所以一般常用的就是XML,可以做到sql分离 有时候也是混用,简单的就用注解,复杂的就用XML Mybatis特性: 1、使用连接池对链接进行管理 2、SQL和代码分离,几种管理 3、参数映射和动态SQL 4、结果集映射 5、缓存管理 6、重复SQL的提取 <sql> 7、插件机制 使用场景 : 操作持久化层(Dao),和JDBC一样,操作数据库的 当我们要写动态页面(jsp)和用户进行交互的时候,就需要操作数据库, 而MyBatis就是负责操作数据库的 ?五、Mybatis与Hibernate的区别MyBatis : 1 入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。 2 可以进行更为细致的SQL优化,可以减少查询字段。 3 ?缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。 4 ?二级缓存机制不佳 整体 : 小巧、方便、高效、简单、直接(SQL操作)、半自动 Hibernate : 1 功能强大,数据库无关性好,对象关系(O/R)映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。 2 有更好的二级缓存机制,可以使用第三方缓存 3 缺点就是学习门槛不低,要精通门槛更高,而且怎么设计对象关系(O/R)映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行 形象举例 : ?mybatis:机械工具,使用方便,拿来就用,但工作还是要自己来作,不过工具是活的,怎么使用,由我决定。 ?hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工作都可以拜托给他了,但仅限于它能做的事 六、Mybatis环境搭建及API使用中文官网 : mybatis – MyBatis 3 | 入门 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 6.1.创建要操作的数据表create?table?t_user( id int(11) primary?key?auto_increment, username varchar(100), password varchar(100), nickname varchar(100), `type` int?(2) ); create?table?t_address( id int(11) primary?key?auto_increment, addr varchar(255), phone varchar(100), postcode varchar(100), user_id int(11), ); insert?into?t_user(username,password,nickname,type) values('admin','123','超级管理员',1); insert?into?t_address(addr,phone,postcode,user_id) values?('123','123','123',1); 6.2.创建一个java项目?6.3导入需要的jar包? 6.4.创建User和Address实体类
6.5.在src下创建数据源信息文件 jdbc.properties
?6.6.在src下创建控制打印日志的 log4j.properties
6.7.在src下创建mybatis配置文件 mybatis-config.xml?
6.8.创建UserMapper.xml SQL映射文件
? 6.9.加入Junit单元测试? ? ? 6.10.Junit的使用
? 6.11.测试Mybatis
?七、Mapper的三种形式第一种 : sqlSession执行对应语句第一种 : sqlSession执行对应语句,就是我们上面测试的入门案例 只需要创建对应的Mapper xml,然后在mybatis-config.xml中映射即可 第二种 : 使用注解(基本不用)1.需要创建接口 2.创建与接口名对应的mapper.xml文件 3.在mybatis-config.xml中映射创建的接口 4.测试方式同上 session.insert("User.add",user); ? 调用
? 第三种 : 利用接口代理(常用)第三种:接口代理 1 需要mapper.xml 2 接口中不需要添加对应的注解 3 mybatis-config.xml中添加映射配置 4.调用与第一种一样的方式 ? ? 调用
八、Util工具类的封装? ? 以上代码中,红框部分我们每次都需要重复编写,mybatis-config.xml在整个生命周期只需要加载一次就行,而SqlSessionFactory也只需要创建一个,所以 我们把这些封装成方法
总结 : 使用工具类,能够降低我们dao的代码量,并且也能更好的优化代码,比如关闭资源,和创建资源(能够保证某些资源在生命周期中只会被创建一次) 工具类,使用方便,复用价值高 关于使用Mybatis时SqlSession的报错:Excutor was closed的解决办法。 由于sqlsession是非线程安全的,因此在做sqlSession工具类的时候请将SqlSession置于方法体中,不要使用与全局变量中。 九、CRUD实操上面我们已经对MyBatis的环境搭建和工具类优化以及三种使用方式有所了解 上面我们只是以添加为例来进行的测试,下面我们就来编写一下增删改查 Namespace先用User了,这里我们使用SqlSession中原生的方法是那些 UserMapper.xml
UserDao实现类 添加
删除
更新
查询
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:24:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |