MyBatis简述

概念

MyBatis是一款优秀的半自动化ORM框架(DAO层框架),前身是IBatis,支持动态sql、存储过程及高级映射。半自动化是指:MyBatis在查询关联对象或关联集合对象时,主要手动编写sql来完成,所以称之为半自动化。ORM:通过业务实体对象和关系数据库中的字段做映射,将java程序中的对象自动持久化到数据库中,是一种数据持久化方案。

作用

主要通过封装JDBC的方法实现简化数据库与java之间的连接,几乎避免了所有JDBC代码和手动设置参数以及获取结果集,相比JDBC减少了50%的代码量。

优点

代码量减少;最简单的持久化框架,小巧并简单易学;sql代码彻底从程序中分离,可重用;提供xml标签,支持编写动态sql;提供映射标签,支持对象与数据库的ORM字段映射。

缺点

sql语句编写工作量大,对开发人员有一定要求;数据库移植性差,因为不同的数据库编写的sql语句有差异,更换不同的数据库时sql语句也要做相应更改。

MyBatis框架环境搭建步骤

1、导入MyBatis所需的包

  • mysql-connector-java-5.1.0-bin.jar
  • mybatis-3.2.2.jar
  • log4j-1.2.17.jar (非必须)

2、编写数据库连接配置文件database.properties

    driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/smbmsusername=rootpassword=1998

3、编写MyBatis系统核心配置文件mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"mybatis-3-config.dtd" >
<configuration><properties resource="database.properties"/><settings><setting name="logImpl" value="LOG4J"/></settings><typeAliases>   <package name="cn.smbms.pojo"/></typeAliases><!--通过default属性指定一个默认运行环境ID  --><environments default="development"><environment id="development"><!-- 事务管理器两种 JDBC/MANAGED--><transactionManager type="JDBC"/><!-- 数据源类型三种UNPOOLED | POOLED | JNDI --><!--  POOLED 使用的是连接池的原理--><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!-- 将mapper文件加入到配置文件中 --><mappers><!--  第一种方式:使用类资源路径获取资源--><mapper resource="cn/smbms/dao/user/UserMapper.xml"></mapper> <mapper resource="cn/smbms/dao/provider/ProviderMapper.xml"></mapper> <!-- 第二种方式:使用url获取资源 --><!-- <mapper url="file:///D:/UserMapper.xml"></mapper> --></mappers>
</configuration>

4、创建获取SqlSession工具类MyBatisUtil.java

package cn.smbms.utils;import java.io.IOException;
import java.io.InputStream;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MyBatisUtil {private static SqlSessionFactory factory;static{try {//1.获取mybatis-config.xml输入流InputStream  is = Resources.getResourceAsStream("mybatis-config.xml");//2.创建sqlSessionFactory对象 ,完成对配置文件的读取factory=new SqlSessionFactoryBuilder().build(is);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 创建sqlSession对象* @return*/public static SqlSession createSqlSession(){return factory.openSession(false);}/*** 关闭sqlSession* @param sqlSession*/public static void closeSqlSession(SqlSession sqlSession){if(null!=sqlSession){sqlSession.close();}}}

5、创建POJO实体类 User.java

package cn.smbms.pojo;import java.util.Date;/*** 用户实体类* @author 14062**/
public class User {private int id;  //主键idprivate String userCode;  //用户编码private String userName;  //用户姓名  private String userPassword;    //用户密码private int gender;   //性别private Date birthday;  //出生日期private String phone; //手机号码private String address;   //地址private int userRole;   //用户角色private int createdBy;    //创建者private Date createdDate;  //创建时间private int modifyBy; //修改者private Date modifyDate;   //修改时间//省略get/set方法
}

6、创建sql映射文件 UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd"><mapper namespace="cn.smbms.dao.user.UserMapper"><select id="count" resultType="int">select count(1) as count from smbms_user</select><!--查询用户列表  --><select id="getUserList" resultType="user">select * from smbms_user</select>
</mapper>

7、创建mapper映射接口 UserMapper.java

package cn.smbms.dao.user;
import java.util.List;
import cn.smbms.pojo.User;public interface UserMapper {//获取所有用户public List<User> getUserList();//获取用户记录数public int count();
}

8、编写测试类 Test.java

package cn.smbms.dao.user;import java.io.*;
import java.util.*;
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 org.apache.log4j.Logger;
import org.junit.Test;
import cn.smbms.pojo.User;
import cn.smbms.utils.MyBatisUtil;public class UserMapperTest {private Logger logger=Logger.getLogger(UserMapperTest.class);/*** 查询用户记录数*/@Testpublic void test() {int count=0;SqlSession sqlSession=null;try {//3.创建sqlSessionsqlSession=MyBatisUtil.createSqlSession();//4.调用mapper文件对数据进行操作,必须将mapper文件一如mybatis-config.xmlcount=sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");logger.debug("UserMapperTest count--->"+count);    } catch (Exception e) {e.printStackTrace();}finally{MyBatisUtil.closeSqlSession(sqlSession);}   }/*** 查询用户列表*/@Testpublic void testGetUserList() {SqlSession sqlSession=null;List<User> ulist=null;try {//3.创建sqlSessionsqlSession=MyBatisUtil.createSqlSession();//4.调用mapper文件对数据进行操作,必须将mapper文件一如mybatis-config.xml//第一种方式:使用selectList()/*ulist=sqlSession.selectList("cn.smbms.dao.user.UserMapper.getUserList");*///第二种方式 使用getMapper()接口映射  接口中的方法名要与sql映射文件UserMapper中的mapper ID一一对象//该接口称为:接口映射器ulist=sqlSession.getMapper(UserMapper.class).getUserList();} catch (Exception e) {e.printStackTrace();}finally{MyBatisUtil.closeSqlSession(sqlSession);}for (User user : ulist) {logger.debug("userName:"+user.getUserName());}}
}

9、运行结果

什么是数据持久化

狭义的理解:“持久化”仅仅指把域对象永久保存到数据库中;广义的理解,“持久化”包括和数据库相关的各种操作。● 保存:把域对象永久保存到数据库。● 更新:更新数据库中域对象的状态。● 删除:从数据库中删除一个域对象。● 加载:根据特定的OID,把一个域对象从数据库加载到内存。● 查询:根据特定的查询条件,把符合查询条件的一个或多个域对象从数据库加载内在存中。2.为什么要持久化?持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的API。● 通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度;● 代码重用性高,能够完成大部分数据库操作;● 松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。(OID[object identifier ]:对象标识,为了区分对象为每个对象分配的唯一一个编码)(域对象:可以在不同的Servlet之间传递数据的对象) (该文非原创 侵删)

ORM(Objetct Relationl Mapping)对象关系映射

ORM是一种为了解决面向对象 与关系数据库 存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象 和数据库之间映射的元数据 ,将java程序 中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。详细了解见链接(ORM原理) ORM原理 理解ORM和数据持久化

MyBatis的核心接口和类及生命周期

SqlSessionFactoryBuilder(构造器)

作用:根据配置信息或代码来生成SqlSessionFactory

实现原理:负责构建SqlSessionFactory,该类提供了多个build()方法重载,而真正重载build()方法只有三种,分别是InputStream(字节流)、Reader(字符流)、Configuration(类),字节流和字符流都是通过xml配置文件的形式创建SqlSessionFactory,而Configuration采用的是java代码方式创建,常用的是读取配置文件的形式

生命周期:用过即丢,其生命周期只存在于方法体内

SqlSessionFactory(工厂接口)

作用:是每个MyBatis应用的核心,可创建多个SqlSession实例,代码如下

SqlSession sqlSession=sqlSessionFactory.openSession(boolean autoCommit);
注:autoCommit参数表示是否开启事务控制,默认为true表示关闭事务控制开启自动提交

作用域:Application全局作用域

生命周期:与应用的生命周期相同

特点:单例(设计模式):存在于整个应用运行时,并且只存在一个对象实例

SqlSession(sql会话)

作用:(1)获取映射器,让映射器通过命名空间和方法名称找到对应的sql,发送给数据库执行后返回结果; (2)通过update、insert、select、delete等方法,带上SQL的id来操作在XML中配置好的SQL,从而完成工作,与此同时它也支持事务,通过commit、rollback方法提交或者回滚务。

特点:一个SqlSession对应一次数据库会话,会话结束必须关闭
可以执行多次sql语句,但是一旦关闭就需要重新创建SqlSession线程级,不可共享会话(非线程安全)

作用域:相当request(一次请求)或方法体内的作用域

{}与${}的区别

1、 #{}表示一个占位符,可以实现preparedStatement向占位符中设置值,可以有效防止sql注入,#{}可以接受基本数据类型值或pojo属性值,如果parametreType传输的是基本数据类型值,那么{}中可以放value或其他名称
2、 ${}表示拼接sql串,通过${}可以将parameterType传入的内容不进行jdbc类型转换,可以接受基本数据类型值或pojo属性值,如果parametreType传输的是基本数据类型值,那么{}中只能放alue,其他情况必须与pojo属性名相同

MyBatis-01 初始+环境搭建相关推荐

  1. Mybatis入门:1(Mybatis框架的环境搭建)

    Mybatis框架的环境搭建 一.创建maven工程并导入坐标 导入坐标: <dependencies><dependency><groupId>org.mybat ...

  2. MyBatis 简介、 环境搭建、数据库连接池、查询方式

    七.MyBatis 简介 Mybatis 开源免费框架.原名叫 iBatis,2010 在 google code,2013 年迁移到 github 作用: 数据访问层框架. 2.1 底层是对 JDB ...

  3. stm32f4 hal 4位数码管_STM32裸机开发基础篇01开发环境搭建(HAL库)

    前言 众所周知,在32位单片机中,STM32占有重要市场份额,其社区活动频繁,网上相关资料也比较多,无论是学习入门,还是工作使用,都无疑是极好的选择,本节开始,我们将学习如何使用STM32,首先,我们 ...

  4. SpringBoot2.0基础案例(01):环境搭建和RestFul风格接口

    一.SpringBoot 框架的特点 SpringBoot2.0 特点 1)SpringBoot继承了Spring优秀的基因,上手难度小 2)简化配置,提供各种默认配置来简化项目配置 3)内嵌式容器简 ...

  5. mybatis源码环境搭建

    前言 mybatis在众多的数据持久化框架中应该说是目前使用最多的,其优秀的设计和底层封装,值得很多开发人员进行学习,下面让我们先来构建一下mybatis的源码阅读环境吧 准备 1.github下载m ...

  6. Python初始环境搭建和Pycharm的安装

    首先我们来安装python 1.首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进入之后如下图,选择图中红色圈中区域进行下载. 2. ...

  7. C#与mongoDB初始环境搭建

    mongoDB官网https://www.mongodb.com/ mongoDB默认安装路径(Windows x64平台) C:\Program Files\MongoDB\Server\3.4\b ...

  8. Dart学习笔记01:环境搭建与开发环境配置

    文章目录 一.Dart概述 二.下载Dart for Windows 三.安装Dart for Windows 四.命令行方式安装Dart (一)安装Chocolatey 1.启动PowerShell ...

  9. uniapp初始环境搭建,出于猎奇,也出于热爱编程

    1 安卓环境 官方文档有些看不懂,这里还是自己写一下,毕竟我已经不想在回来带angular了,还是使用vue3吧,年纪打了,没用的知识学多了也是浪费时间.出于猎奇,也出于热爱编程. 1.1 生成签名证 ...

最新文章

  1. matlab消去前一个图,各位matlab高手,如何从2个3元方程中消去一个变量,然后做3维图形~...
  2. nginx 安装禅道
  3. st-link和jlink调试stm32接线注意事项
  4. iOS学习 plist读取和写入文件
  5. Java Post 数据请求和接收
  6. Java类加载机制总结
  7. android oom工具,Android OOM-Heap,MAT工具检测内存泄露
  8. java-实战java高并发程序设计-ch2java并行程序基础
  9. C程序设计--排序(冒泡、选择、插入)--插入
  10. 智能优化算法:分类、特点和未来
  11. Web3.0时代:你在网上创造的一切,真的可以全部归你?
  12. python中write是什么意思_Python中操作文件之write()方法的使用教程
  13. Asset Pricing:Asset Pricing Formula
  14. RobotFramework set global/suite/test variable
  15. E. Exits in Excess
  16. QT openGL环境光照
  17. JavaScript中let和var区别详解
  18. FFMpeg打开文件报错:Invalida data found when processing input
  19. 元界快讯|首个物联网元宇宙平台“物联森友会”即将上线
  20. Docker 常用命令 - 镜像与容器

热门文章

  1. k8s garbage collector源码分析(1)-启动分析
  2. socket关闭close和shutdown的区别
  3. 阿里云https配置nginx后外网无法访问 已解决
  4. CodeCombat代码全记录(Python学习利器)--边地森林(第二章)代码6
  5. win10的快捷键GPU
  6. 大数据美妆大赏_芭莎美妆大奖2016最强大数据美妆榜单要你好看!
  7. 联想笔记本安装ubuntu18.04遇到的那些问题
  8. 人工智能创造艺术作品:创意对抗网络(CAN)
  9. 网上商城系统MySql数据库设计项目实战
  10. SpringBoot入门到精通-三步整合knife4j