概念:优秀持久层框架:实体类和SQL语句之间建立映射关系

与hibernate区别    :自动生成sql语句,并且建立实体类和数据表的映射。

MyBatis基本要素:核心对象   核心配置文件  SQL映射文件

特点:

基于SQL语法

,简单易学

能了解底层封装过程 SQL语句封装在配置文件中,

便于统一管理与维护,降低程序的耦合度

方便程序代码调试

什么是ORM? 对象关系映射

ORM(Object Relational Mapping) 编写程序的时候,

以面向对象的方式处理数据 保存数据的时候,却以关系型数据库的方式存储

ORM解决方案包含下面四个部分

在持久化对象上执行基本的增、删、改、查操作

对持久化对象提供一种查询语言或者API 对象关系映射工具

提供与事务对象交互、执行检查、延迟加载以及其他优化功能

搭建MyBatis 开发环境

1.创建java工程

1.编写MyBatis核心配置文件(mybatis-cofig.xml)

2.创建实体类—POJO

3.DAO层- SQL映射文件

4.创建测试类

如下图:

核心配置文件注意事项:

注意编写头部声明以及未联网状态下的配置

注意节点的编写顺序

代码如下:

  

<?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>
<properties resource="database.properties"><!-- 加载外部资源文件 a.指定外部文件 resource 优先级高 b.直接配置XML property -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/studentwu" />
<property name="username" value="root" />
<property name="password" value="root" />
</properties>
<!-- 全局的设置 -->
<settings><!-- NONE取消自动映射 PARTIAL 默认自动映射 设置为FULL 都能映射-->
<setting name="autoMappingBehavior" value="FULL"/>
</settings>
<typeAliases><!--设置别名 1.取别名 2.包路径 默认就是类名 常用的-->
<!-- <typeAlias type="com.bw.pojo.Student" alias="Student"/> -->
<package name="com.bw.pojo" />
</typeAliases>
<environments default="test1"><!-- 配置连接数据库的信息 -->
<environment id="test1">
<transactionManager type="JDBC" /><!-- 配置事务的管理 两种 1.JDBC 2.MANAGED -->
<dataSource type="POOLED"><!--配置数据源的信息 三种1.POOLED 2.UNPOOLED 3.JNDI -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${use}" />
<property name="password" value="${pass}" />
</dataSource>
</environment>
</environments>
<mappers><!-- 添加Sql的映射文件 四种方式 -->
<!-- A.使用resource 加载Mapper映射文件-->
<!-- <mapper resource="com/bw/mapper/StudentMapper.xml" /> -->
<!-- B.使用mapper接口的完全限定类名 要求接口和映射文件的名称要一致-->
<!-- <mapper class="com.bw.mapper.StudentMapper" /> -->
<!-- C.通过url指定-->
<!-- <mapper url="file:///D:\1807A2\6month\day01\src\com\bw\mapper\StudentMapper.xml" /> -->
<!-- D.通过包路径指定 加载这个包下面的所有映射文件-->
<package name="com.bw.mapper"/>
</mappers>
</configuration>

如图:

编写接口 和 SQL配置文件

测试类:

SqlSession sqlSession = null;
// 1.加载mybatis_config配置文件
try {
Reader rs = Resources.getResourceAsReader("mybatis_config.xml");
// 2.创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 3.创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(rs);
// 4.获取sqlSession对象
sqlSession = sqlSessionFactory.openSession();

// 5. sqlsession的两种使用方式:
//a.实例操作 参数:SQL映射文件里面要调用的ID
//Object count = sqlSession.selectOne("getCount");
//b.基于mapper接口的操作

StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
//int count = mapper.getCount();
//System.out.println(count);

//获取属性的集合
Student student2 = new Student();
student2.setSname("李珊");
List<Student> studentList = mapper.getStudentList(student2);
for (Student student : studentList) {
System.out.println(student.getSname());
}
Student s = mapper.getStudentById(44);
System.out.println(s.getSname());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
// 6.关闭资源
sqlSession.close();
}
}

简单介绍Mybatis的框架的优缺点?

一、MyBatis框架的优点:

1. 与JDBC相比,减少了50%以上的代码量

2. MyBatis是最简单的持久化框架,小巧并且简单易学。

3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

4. 提供XML标签,支持编写动态SQL语句

5. 提供映射标签,支持对象与数据库的ORM字段关系映射。

二、MyBatis框架的缺点:

1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。

2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

Mybatis的核心对象有哪些,对象之间的关系?

1、SqlSessionFactoryBuilding

这个类可以被实例化、使用和丢弃。一但创建了SqlSessionFactory后,这个类就不需要存在 了,因此sqlsessionfactorybuilder 实例的最佳作用域是方法范围(即作为方法的变量)

2、SqlSessionFactory

SqlSessionFactory,顾名思义就是获取SqlSession对象的工厂,功能类似于jdbc中加载数据库驱动。所以sqlsessionfactory对象一但被创建,应该在应用执行期间都存在,因此sqlsessionfactory的最佳作用域是应用范围,建议定义为静态变量。

3、sqlsession

sqlsession类似于jdbc的connection对象,每个线程都因该有自己的sqlsession 实例。sqlsesion的实例,sqlsession的实例不能共享,他是 线程不安全的,因此最佳作用域是请求或方法范围,sqlsession对象能够执行数据库的增删改查操作,因此在使用后应该关闭,并保存使用finally快来关闭。

Mybatis中#{}和${}的区别?

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

3. #方式能够很大程度防止sql注入。 

4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名.

6.一般能用#的就别用$.

MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

Mybatis当实体类的属性名和表中的字段名不一样,怎么办?

1、取别名 2、使用resultMap

Mybatis的模糊查询的实现方式(两种以上)?

1、在调用的方法中把参数使用%拼接好

2、在SQL映射文件中使用$符号

3、使用concat拼接参数

4、使用bind标签创建拼接参数变量

Mybatis Mapper代理的开发方式规范?

1.创建接口与映射文件同名,并在相同包下。

2.映射文件的namespace的值必须等于接口的全限定名。

3.<select><delete><insert><update>标签中的id值必须与接口中方法同名。

4.上述标签的parameterType属性值的类型与接口中方法的参数相同。

5.上述标签的resultType的属性值得类型与接口方法的返回值类型相同。

Mybatis中如何传递多个参数?

一、使用注解@Param 二、使用map集合封装多个参数 三、使用对象属性绑定多个参数

Mapper映射器的配置方式有哪些?

一、通过resource指定 二、通过url指定三、通过class指定 四、通过指定包路径

mybatis中实体类取别名的方式有哪些?

一、通过resource指定 二、通过包路径指定 三、通过实体类注解@Alises

Mybatis的映射文件中,都有哪些常用的标签?

insert、update、delete、selete、sql、resultMap

Mybatis中配置properties元素的两种方式及优先级?

1、通过外部指定的方式(database.properties),实现动态配置

2、直接配置为xml子节点,实现动态配置  外部指定的方式优先级高

Mybatis中配置事务管理的类别有几种?分别是什么?

两种 1、JDBC 2、MANAGED

Mybatis中数据源的配置类型有几种?分别是什么?

三种 1、POOLED 2、UNPOOLED 3、JNDI

Mybatis中autoMappingBehavior的匹配级别有几种,分别是什么??

三种 1、NONE 2、PARTIAL 默认 3、FULL

第一章 初识 MyBatis的更多相关文章

  1. Java 面向对象编程——第一章 初识Java

      第一章    初识Java 1.  什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...

  2. 第一章 初识shiro

    shiro学习教程来自开涛大神的博客:http://jinnianshilongnian.iteye.com/blog/2018936 第一章 初识shiro 简单了解shiro主要记住三张图即可. ...

  3. Cocos2d-x 3.0 红孩儿私家必修 - 第一章 初识Cocos2d-x 3.0project

    第一章    初识Cocos2d-x 3.0project Cocos2d-x 3.0出来了,听说与之前版本号相比修改较大 做为一个游戏开发人员.我们应该欢迎Cocos2d-x持续的更新和强大,Coc ...

  4. C语言编程入门之--第一章初识程序

    第一章 初识程序 导读:计算机程序无时不刻的影响着人类的生活,现代社会已经离不开程序,程序的作用如此巨大,那么程序到底是什么呢?本章主要讨论程序的概念,唤起读者对程序的兴趣,同时对C语言程序与其它语言 ...

  5. Java 第一章 初识Java

    第一章笔记 什么是计算机程序:算机为完成某些功能生产的一系列有序指令集合 Java技术包括: java SE:标准版 java EE:企业版 Java ME:移动版 开发Java程序步骤:1.编写 2 ...

  6. 第一章 初识数据库Mysql

    初识数据库Mysql(my)   在企业中 percona: 一.数据库基础知识 Mysql是一个开放源代码的数据库管理系统(DBMS),它是由Mysql AB公司开发.发布并支持的.Mysql是一个 ...

  7. Mybatis之旅第一篇-初识Mybatis

    一.JDBC的问题 为什么我们要使用Mybatis,是因为JDBC存在以下问题 1. 数据库连接创建.释放频繁造成系统资源浪费,从而影响系统性能.如果使用数据库连接池可解决此问题. 2. Sql语句在 ...

  8. 第一章 初识Mysql

    Mysql是一个开放源代码的数据库管理系统(DBMS),它是由MySQL AB 公司开发.发布并支持的. 登录 -- mysql #本地登录,默认用户root,空密码,用户为root@127.0.0. ...

  9. Windows Forms编程实战学习:第一章 初识Windows Forms

    初识Windows Forms 1,用C#编程 using System.Windows.Forms;   [assembly: System.Reflection.AssemblyVersion(& ...

随机推荐

  1. 三种方式实现观察者模式 及 Spring中的事件编程模型

    观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧, ...

  2. [翻译]Java排错指南 - 5 确定崩溃何地发生

    原文地址: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/crashes001.html 这几天公司其他组遇到 ...

  3. DotNetCore跨平台~在appsettings.json里自定义配置项

    回到目录 DotNetCore里一切都是依赖注入的,对于appsettings这个可扩展的配置对象也不例外,它位于项目根目录,一般在startup里去注册它,在类中通过构造方法注入来获取当前的对象,以 ...

  4. 前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

    一.移动端默认样式 ·IOS和Android下触摸元素时出现半透明灰色遮罩 a,input,button{ -webkit-tap-highlight-color: transparent; } ·I ...

  5. 10-Flink集群的高可用(搭建篇补充)

    戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...

  6. FastDFS分布式文件系统&Nginx负载均衡最小环境安装配置[超级详解]

    1.背景 FastDFS 是一款开源的.分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发.该开源项目的主页是 http://code.google. ...

  7. 微信公众号开发C#系列-6、消息管理-普通消息接受处理

    1.概述 通过前面章节的学习,我们已经对微信的开发有了基本的掌握与熟悉,基本可以上手做复杂的应用了.本篇我们将详细讲解微信消息管理中普通消息的接收与处理.当普通微信用户向公众账号发消息时,微信服务器将 ...

  8. SiftGPU在Ubuntu和Windows下的编译与使用

    Sift特征应该是使用最多的局部特征了,但是相比其他的一些特征描述符,计算sift特征描述符的时间较长.Changchang Wu使用GPU加速,实现了GPU版的sift特征提取SiftGPU. Si ...

  9. 1.3创建项目「深入浅出ASP.NET Core系列」

    控制台创建项目 dotnet new --help 使用控制台采集项目,务必要熟练使用命令,--help是命令帮助的指明灯,在你无法google的时候,可以离线状态最快的帮助到你. 根据模板名称,我们 ...

  10. FeignClient注解及参数

    一.FeignClient注解 FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上 1 2 3 4 5 @FeignC ...