范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

MyBatis系列教程一初识MyBatis

  1.1 ORM概览
  在了解ORM之前我们先了解什么是持久化,因为所有的ORM框架所做的事情无非就是将对象映射成数据库中的数据,以及将数据库中的数据映射成对象。 1.1.1 什么是持久化
  所谓持久化就是把数据(内存中的对象)保存到可永久存储的存储设备中(例如:硬盘),持久化的主要应用是将内存中的数据存储在关系型数据库中。当然也可以保存在磁盘文件中,XML数据文件,JSON文件中等的。 1.1.2 什么是ORM
  ORM(Object-Relational Mapping),对象关系映射,它的作用是在关系型数据库和对象之间做一个映射,这样,我们在具体的操作数据库时,就不需要和复杂的SQL语句打交道,像平时操作对象操作数据即可。
  在目前的企业应用系统设计中,MVC,即 Model(模型)- View(视图)- Control(控制)为主要的系统架构模式。MVC 中的 Model 包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如 JDBC的连接、SQL生成和Statement创建、还有ResultSet结果集的读取等)等。
  将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。MVC 模式实现了架构上将表现层(即View)和数据处理层(即Model)分离的解耦合,而持久化的设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。
  而 ORM 作为持久化设计中的最重要也最复杂的技术,也是目前业界热点技术。
  简单来说,按通常的系统设计,使用 JDBC 操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。
  一般基本都是如下几个步骤: 建立数据库连接,获得 Connection 对象。 根据用户的输入组装查询 SQL 语句。 根据 SQL 语句建立 Statement 对象 或者 PreparedStatement 对象。 用 Connection 对象执行 SQL语句,获得结果集 ResultSet 对象。 然后一条一条读取结果集 ResultSet 对象中的数据。 根据读取到的数据,按特定的业务逻辑进行计算。 根据计算得到的结果再组装更新 SQL 语句。 再使用 Connection 对象执行更新 SQL 语句,以更新数据库中的数据。 最后依次关闭各个 Statement 对象和 Connection 对象。
  由上可看出代码逻辑非常复杂,这还不包括某条语句执行失败的处理逻辑。其中的业务处理逻辑和数据存取逻辑完全混杂在一块。
  而一个完整的系统要包含成 千上万个这样重复的而又混杂的处理过程,假如要对其中某些业务逻辑或者一些相关联的业务流程做修改,要改动的代码量将不可想象。
  另一方面,假如要换数据库产品或者运行环境也可能是个不可能完成的任务。而用户的运行环境和要求却千差万别,我们不可能为每一个用户每一种运行环境设计一套一样的系统。
  所以就要将一样的处理代码即业务逻辑和可能不一样的处理即数据存取逻辑分离开来,另一方面,关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序 运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO.NET、JDBC、ODBC等等)均是以行集的结果集一条条进行处理的。
  所以为解决这一困难,就出现 ORM 这一个对象和数据之间映射技术。常用的ORM框架有Hibernate、Mybatis、Mybatis-plus等,接下来我们以Mybatis为例深入学习。 2.Mybatis概览
  MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  下面我们先了解一下Mybatis架构:
  Mybatis简略架构图mybatis-config.xml: Mybatis全局配置文件,用于配置数据库、数据库连接池、POJO别名、映射文件等信息 mapper.xml:该文件中用于编写处理数据的SQL语句。并且通过此文件可以将SQL语句与Java代码完全分离 SqlSessionFactory:用于创建Java和数据库会话的Session对象 Session:与数据库建立会话对象 Executor:真正执行Sql语句的对象 Statement:mapper文件对应的Statement,因为mapper文件是相互隔离的,可以理解为一个mapper文件就对应一个Statement对象。 2.1 Mybatis入门
  在本小节内,将使用Mybatis框架搭建开发环境,并使用Mybatis进行单表的增删改查,其中涉及到的一些概念会在后续章节中陆续讲解。 2.1.1 新建Mybaits项目
  在前面的课程中,已经学习了Maven的基础知识,使用Maven可以更好的管理和构建项目,因此使用Maven构建项目。项目结构如下:
  Mybatis项目图示
  首先准数据库: CREATE DATABASE MYBATIS_DEMO; USE MYBATIS_DEMO; CREATE TABLE STUDENT(     STUDENT_ID INT PRIMARY KEY AUTO_INCREMENT,     STUDENT_NAME VARCHAR(20),     STUDENT_AGE INT,     STUDENT_GENDER CHAR(2) ); INSERT INTO STUDENT (STUDENT_NAME, STUDENT_AGE, STUDENT_GENDER) VALUES ("张无忌",18,"男"); INSERT INTO STUDENT (STUDENT_NAME, STUDENT_AGE, STUDENT_GENDER) VALUES ("张翠山",43,"男"); INSERT INTO STUDENT (STUDENT_NAME, STUDENT_AGE, STUDENT_GENDER) VALUES ("殷素素",40,"男"); INSERT INTO STUDENT (STUDENT_NAME, STUDENT_AGE, STUDENT_GENDER) VALUES ("谢逊",50,"男");
  第一步:在pom.xml中导入依赖      org.mybatis     mybatis     3.5.6 
  第二步:在resource目录下新建mybatis-config.xml全局配置文件 <?xml version="1.0" encoding="UTF-8" ?>                                                                                                                                                                                                                
  第三步:创建SQL语句映射文件StudentMapper.xml          
  第四步:在java目录下,新建包cn.bytecollege.entity,并在包中新建实体类Student package cn.bytecollege.entity;  import java.util.Objects;  public class Student {     private Integer studentId;     private String studentName;     private Integer studentAge;     private String studentGender;      public Integer getStudentId() {         return studentId;     }      public void setStudentId(Integer studentId) {         this.studentId = studentId;     }      public String getStudentName() {         return studentName;     }      public void setStudentName(String studentName) {         this.studentName = studentName;     }      public Integer getStudentAge() {         return studentAge;     }      public void setStudentAge(Integer studentAge) {         this.studentAge = studentAge;     }      public String getStudentGender() {         return studentGender;     }      public void setStudentGender(String studentGender) {         this.studentGender = studentGender;     }     @Override     public String toString() {         return "Student{" +                 "studentId=" + studentId +                 ", studentName="" + studentName + """ +                 ", studentAge=" + studentAge +                 ", studentGender="" + studentGender + """ +                 "}";     } }
  第五步:在java目录下新建cn.bytecollege.mapper包,并在包中新建接口StudentMapper package cn.bytecollege.mapper; import cn.bytecollege.entity.Student; import java.util.List; public interface StudentMapper {     List findAll(); }
  第六步:新建测试类查询所有信息 package cn.bytecollege;  import cn.bytecollege.entity.Student; import cn.bytecollege.mapper.StudentMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; import java.util.List;  public class App  {     public static void main( String[] args ){         //读取Mybatis配置文件         InputStream is = App.class.getClassLoader().getResourceAsStream("mybatis-config.xml");         //创建SqlSessionFactory         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);         //获取SqlSession         SqlSession session = sqlSessionFactory.openSession(); //        List list = session.selectList("cn.bytecollege.mapper.StudentMapper.findAll");         StudentMapper mapper = session.getMapper(StudentMapper.class);         List list = mapper.findAll();         list.forEach(System.out::println);     } }
  运行上面的程序结果如下图:
  从上面的代码可以看出使用Mybatis的整个过程可以分为以下 步: 读取Mybatis全局配置文件 构建SqlSessionFactory对象 创建SqlSession对象 获取自定义Mapper 执行SQL语句 获取执行结果 2.2 Mybatis对象简介
  在上面步骤中出现了SqlSessionFactory、SqlSession等对象,下面就这些对象进行简单的介绍。 SqlSessionFactory:每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。需要注意SqlSessionFactory是一个工厂接口而不是现实类,它的任务是创建SqlSession。 SqlSession:SqlSession类似于一个JDBC的Connection对象。MyBatis提供了两种模式去创建SqlSessionFactory:一种是XML配置的方式,另一种是代码的方式。为了避免硬编码以及利于项目维护,通常推荐使用第一种方式,将配置和代码进行分离。 Mapper(映射器):映射器是由Java接口和XML文件(或注解)共同组成的,它的作用有:定义参数类型、描述缓存、描述SQL语句、定义查询结果和POJO的映射关系。

成都这些村寨街区入选2022年全国非遗与旅游融合发展优选项目名录今日小锦获悉,10月26日,中国非物质文化遗产保护协会公布2022年全国非遗与旅游融合发展优选项目名录。此次评选分为非遗旅游景区非遗旅游小镇非遗旅游街区非遗旅游村寨4个类型。其中,质量耀三湘丨矮寨奇观旅游公司以湘西之窗展现中国之治红网时刻新闻记者张鋆通讯员刘娇阳湘西报道吉首市矮寨奇观旅游开发有限责任公司(下称矮寨奇观旅游公司)位于湖南省吉首市矮寨镇德夯村,前身是德夯风景区。三十多年前,德夯村村民一穷二白,四湘西州直统战系统赴吉云村开展党的二十大精神微宣讲红网时刻新闻10月28日讯(通讯员黄明秋宋泽松)10月26日,湘西州直统战系统全体干部职工来到乡村振兴驻点村凤凰县禾库镇吉云村,分成3个小组进村入寨组织召开院坝会,与吉云村群众一起初中外语可选日语俄语等语种!湖南省义务教育课程实施办法发布为全面落实立德树人根本任务,进一步深化课程改革,根据教育部义务教育课程方案(2022年版),湖南省教育厅研究制定了湖南省义务教育课程实施办法(2022年版)(下文简称办法),于20外媒记者聚焦中国迈上新征程中国新发展蓝图为世界注入信心编者按蓝图已经绘就,号角已经吹响,世界的目光聚焦中国。即日起,南方都市报N视频推出大国蓝图世界瞩目国际社会热议中国迈上新征程系列报道,专访来自多个领域的国际友人,讲述他们对于中国将陕北道情D7(米脂杨家沟老城街区)坐县际长途汽车从佳县到米脂。汽车刚入米脂县城,迎面一幅巨大标语全县齐努力,让米脂婆姨成为全国知名品牌!这是米脂小米的广告。其实米脂婆姨早已成为全国知名品牌了,因为米脂婆姨的形象代言天目新闻记者体验国内首款氢能共享单车一次续航80公里视频加载中今年国庆假期期间,国内首款氢能共享单车在佛山投入试运营。10月27日,天目新闻记者来到仙湖氢谷,实际体验了一番。虽然说它的使用方式跟自行车一样,但是只要蹬两圈以后,它就会打造人才高地!高新区上新一家省级博士后创新基地近日,高新区新材料产业龙头企业天成航材获批设立陕西省博士后创新基地什么是博士后创新基地博士后创新基地是陕西省为深入实施人才强省战略积极推进产学研结合和技术创新的重要举措也是高层次人中央为什么点名发展吕梁?吕梁,山西省地级市。国家为什么要重点发展吕梁?吕梁市资源丰富,已探明40多种矿产资源,煤铁铝资源储量大品位高。吕梁还是全国著名的白酒红枣核桃小杂粮生产基地。吕梁真正重要的铁路是太中山西黎城全域旅游绘就百里太行新画廊促乡村振兴黎城县围绕红色绿色特色三条主线大力发展全域旅游。黄崖洞文化旅游区供图中新网太原10月28日电题山西黎城全域旅游绘就百里太行新画廊促乡村振兴作者刘小红张瑞英冯波位于太行山深处的山西黎CBA最新积分榜山西9782天津排名第5北京时间2022年10月27日,20222023赛季CBA常规赛第8轮继续进行,在第8轮第1比赛日中一共有5场比赛,目前5场比赛全部战罢,主要战报信息如下江苏肯帝亚91比90取胜辽
C919未完成2021年交付任务,国产化只有60,为何叫国产大客机?首先这种提问方法就有问题空客A380波音787丰田车都是法国美国日本纯国产的吗?罗马不是一天建成的,饭要一口口吃,路要一步步走。而且中国民航客机要与世界顶尖飞机竞争,肯定优先考虑成推荐买xrxs的,为什么不推荐买xsmax?1iPhoneXR是苹果公司(Apple)于北京时间2018年9月13日凌晨0100(美国加州时间9月12日上午1000)在圣何塞苹果园区史蒂夫乔布斯剧院发布的手机产品,iPhon甘肃农村酒席上的招牌菜,你吃过几种?甘肃农村酒席上有什么招牌菜还真不知道,全国各地到处都是兰州牛肉拉面馆,就喝过甘肃的牛肉拉面。作为土生土长的甘肃人来回答这个问题,请往下看1在开席之前先吃点瓜子花生饼干,喜糖也是必不农村信用社和农业银行的区别是什么?是不同的两家银行机构。农村信用社是集体性质的。在目前,各级农信社都是独立的法人,乡镇县级农信社都是独立经营的,信用社原来是属于农业银行的,后来分离出来了。主要特点是由农民自愿投资入农村老话六十不借债,七十不留夜,八十不出门什么意思?为何这样说?农村老话六十不借债,七十不留夜,八十不出门,为何这样说?有道理吗?文农夫也疯狂六十不借债这句话的字面意思是说,人到了60岁以后就不要借钱给别人了。为什么这样说呢?这是因为人生才短短黄金项链有哪些好看的款式啊?要把性感锁骨美展现出来你知道黄金项链如何选吗气温一路攀升,终于可以摘掉厚重的围巾,解放脖子啦!想要尽情展示优美的锁骨线条,来条黄金项链吧!时尚的同时还能保值,两全其美。今天我们就来你们买车后第一次出事故是多久自己的新车撞了后心里是什么滋味?第一辆车是帕萨特,当时脑抽了,直接开到一个很低的一楼下面,眼睁睁看着我的引擎盖被拉出一道口子,好像傻了一样第二辆车是宝马,开了不到一周,傍晚堵车有个女的直接从后面插上来搽了我的车就给孩子喂奶的时候,你会特意避开亲爹和公公吗?我生孩子是在生产队时期,给孩子喂奶,不论是在家里还是在野外,都尽量避开人。不像有的少妇,接过孩子,直接捋起衣襟把乳头送到孩子嘴里。在生产队干活时,一般都是由婆婆把孩子抱到田头。我从女孩子冬天穿丝袜,配短裙,真的不冷吗?冷,的确冷,但也顶不住被人夸赞美的那一瞬间要说不冷那是假的,但是和美比起来,她们还是很乐此不彼的!包括男人现在都在穿打底裤,足以证明美感胜于体感冷不冷只有她们自己的心里清楚,这样的怀孕八个月被路边的野狗咬了,心理很焦急,要不要引产?如果不引产该怎么安慰她?你告诉她,怀孕八个月已经做不了引产了,没有事,狗咬了不是都能得狂犬病的,得狂犬病的人特少,比如我家人年青的时候被狗咬出血了,现在60岁了什么事也没有,不要担心要和正常没事一样的生活你听过最会奉承人的话是什么?在日常生活中常常听到一些奉承之语。有的实事求是,恰入其分有的言不由衷,夸大其辞。略举数例如下一。夸人儿子人常说三岁看到老,你看这孩子,长得天庭饱满,地阔方圆,长大后一定会才高八斗,