一:Mybatis框架概述

1:什么是Mybatis

官方定义:

  MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  1. mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了对JDBC的操作,使开发者只需要关注 sql 语句本身,而不需要花费精力去注册驱动、创建Connection、Statement等对象,也不需要手动设置配置参数。
  2. mybatis 通过 xml 或注解的方式对要执行的各种 statement(声明) 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
  3. 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

注:ORM思想(Object Relational Mapping) 对象关系映射,简单说就是把数据库表和实体类的属性一一映射,让我们操作实体类就可以操作数据库表

2:Mybatis的引入

在我们没学过mybatis的时候,我相信大部分人都是手写JDBC,手动关连接、映射对象,这就导致开发者效率低下;可是如今mybatis的登场我们可以简化了对持久层(CRUD)的操作了。

  原生态的JDBC编写:

 实体类就是对应数据库的几个字段

 # 配置文件名称 db_config.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/demo_school
username=root
password=123 ******************************************************* /**
* @author ant
* @Class 获取连接数据库对象的工具类
*/
//获取Connection对象
public class JDBCUtils {
//聚合Connection对象
private static Connection con; //静态块来创建Connection对象
static {
try {
//通过类加载机制来读取配置文件
InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("db_config.properties");
//创建读取文件对象
Properties pro = new Properties();
//传入流(配置文件)
pro.load(in);
//获取四大配置
String driver = pro.getProperty("driver");
String url = pro.getProperty("url");
String username = pro.getProperty("username");
String password = pro.getProperty("password"); //注册驱动
Class.forName(driver);
//获取连接
con = DriverManager.getConnection(url, username, password); //抛出IO异常 读取文件位置
} catch (IOException e) {
e.printStackTrace();
//抛出空对象异常
} catch (ClassNotFoundException e) {
e.printStackTrace();
//抛出sql异常
} catch (SQLException e) {
e.printStackTrace();
}
} //返回数据库连接对象
public static Connection getCon() {
return con;
} //关闭连接对象
public static void close(Connection con) {
try {
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
} **************************************************** /**
* @author ant
* @Class Clinet类测试
*/
public class test { public static void main(String[] args) throws IOException { //调用工具类获取Connection对象
Connection con = JDBCUtils.getCon();
try {
//获取预处理 statement
PreparedStatement ps = con.prepareStatement("select * from teacher where tname=?");
//为预处理语句设置占位符数据
ps.setString(1, "张老师");
//查询语句
ResultSet resultSet = ps.executeQuery();
//循环
while (resultSet.next()) {
//获取每个字段数据
int tid = resultSet.getInt("tid");
String tname = resultSet.getString("tname");
String tsex = resultSet.getString("tsex");
int tage = resultSet.getInt("tage");
double tsalary = resultSet.getDouble("tsalary");
String taddress = resultSet.getString("taddress");
//赋予对象上
Teacher t = new Teacher(tid, tname, tsex, tage, tsalary, taddress);
//打印
System.out.println("打印数据了:");
System.out.println(t.toString());
} //关闭连接
resultSet.close();
JDBCUtils.close(con); } catch (SQLException e) {
e.printStackTrace();
}
}
} ****************************************************
打印数据了:
Teacher{tid=1, tname='张老师', tsex='男', tage=28, tsalary=10858.0, taddress='江苏南京'}

JDBC原生操作

资料导入:SQL建库建表语句来自本人腾讯文档

通过上面的JDBC原生编写会发现繁琐,而且还存在一些问题

  • 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
  • Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java代码。
  • 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
  • 对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。

二:Mybatis框架入门编写

1:准备工作

  Mybatis官网   maven中央仓库

这个下面是mybatis版本号,有些朋友没有那个啥,可能会访问不了那个网站

2:开始搭建Mybatis案例

(1):配置文件开发代码编写

首先得导入log4j.properties配置文件

 注:这个是maven坐标

 <dependencies>
<!--导入mybatis坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--导入mysql驱动 我选的是5.x.x 的版本 稳定点-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!--导入log4j日志坐标-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies> +++++++++++++++++++++++++++++++++++++++++
注:下面的是实体老师类 Teacher package cn.xw.domain;
/**
* @author ant
* @bean 这个是老师类
*/
public class Teacher {
private int tid; //老师id
private String tname; //老师姓名
private String tsex; //老师性别
private int tage; //老师年龄
private double tsalary; //老师薪资
private String taddress; //老师住址
//下面省去构造器/get/set/tostring 你们自己加一下
} +++++++++++++++++++++++++++++++++++++++++
注:操作TeacherDao接口类 /**
* @author ant
* @interface 数据操作的接口 老师的dao
*/
public interface TeacherDao { //查询全部老师信息
List<Teacher> findAll(); }
+++++++++++++++++++++++++++++++++++++++++ 注:下面这个是配置文件TeacherDao.xml <?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">
<!--TeacherDao类的配置文件 还有使用namespace指明要配置的类-->
<mapper namespace="cn.xw.dao.TeacherDao">
<!--每个方法就会对应一个查询 id是方法名 resultType是实体类-->
<select id="findAll" resultType="cn.xw.domain.Teacher">
select * from teacher;
</select>
</mapper> +++++++++++++++++++++++++++++++++++++++++ 注:主配置文件SqlMapConfig.xml <?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">
<!--mybatis的主配置文件-->
<configuration>
<!--配置环境 default="mysql" 说明找下面的一个id为mysql的配置 将来这个下面会有许多如oracle配置啦等等-->
<environments default="mysql">
<!--配置一个名为mysql的 数据库连接配置 -->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源连接池-->
<dataSource type="POOLED">
<!--四大配置 driver驱动 url数据库地址 username/password账号密码-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo_school"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!--映射的配置文件位置 映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="cn/xw/dao/TeacherDao.xml"></mapper>
</mappers>
</configuration> +++++++++++++++++++++++++++++++++++++++++ 注:测试类Client public class Client {
public static void main(String[] args) throws IOException {
//获取配置文件的流信息
InputStream config = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建一个SqlSessionFactoryBuilder,这个后期方便创建一个工厂对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//通过SqlSessionFactory来创建一个SqlSessionFactory工厂对象
SqlSessionFactory factory = builder.build(config);
//通过工厂方法来创建一个具体的sqlSession对象来操作数据库
SqlSession sqlSession = factory.openSession();
//通过动态代理的方式来获取具体的被代理类
TeacherDao mapper = sqlSession.getMapper(TeacherDao.class);
//获取数据循环打印
List<Teacher> teachers = mapper.findAll();
for (Teacher teacher : teachers) {
System.out.println(teacher.toString());
}
//关闭
config.close();
sqlSession.close();
}
}

mybatis使用配置文件的基本实现

文字描述搭建入门案例:
  ①:创建一个maven工程并导入相应的坐标
  ②:创建实体类和dao接口
  ③:创建mybatis的主配置文件SqlMapConfig.xml
  ④:创建dao接口的映射配置文件xxx.xml

(2):注解开发代码编写

  在写完配置文件开发后,会发现操作数据库变得容易,但是这么说吧,现在的查询就一个类一条sql语句的配置,如果将来开发中有特别多的类和各种各样的sql配置,你就会发现配置太繁琐了,所有我接下来就和大家介绍另一种写法:注解开发

  注解开发和配置文件开发挺相似的,大家接下来就跟着我的操作来完成,(前提你的配置文件开发的那些代码可以运行)

①:删除配置文件目录,cn.xw.dao.TeacherDao.xml是配置路径,把cn下的全部目录删除,如果保留来写注解开发会出错

②:更改主配置文件SqlMapConfig.xml 只需要更改<mappers>标签即可,其它不动

 <!--映射的配置文件位置 映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<!--class配置的是注解 表示配置src目录下的dao操作类-->
<mapper class="cn.xw.dao.TeacherDao"></mapper>
<!--这个是配置文件开发 配置文件路径 我们直接注释-->
<!--<mapper resource="cn/xw/dao/TeacherDao.xml"></mapper>-->
</mappers>

③:更改dao接口,我这里是TeacherDao接口

 /**
* @author ant
* @interface 数据操作的接口 老师的dao
*/
public interface TeacherDao {
//查询全部老师信息
//这里的注解后面会详细介绍 这里只是做个入门
@Select("select * from teacher;")
List<Teacher> findAll();
}

大功告成,其它的不用修改,运行就可以了

(3):实现类开发代码编写

这个实现类开发的方法极少有人写,因为用这种写法根没使用框架差不多,繁琐,最多在学习中了解这种写法

首先得导入log4j.properties配置文件

项目的架构和配置文件开发的框架差不多,只是在dao的下面多了一个实现类

 注:pom.xml文件

 <dependencies>
<!--导入mybatis坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--导入mysql驱动 我选的是5.x.x 的版本 稳定点-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!--导入log4j日志坐标-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies> **************************************************** 注:实体类 Teacher public class Teacher { private int tid; //老师id
private String tname; //老师姓名
private String tsex; //老师性别
private int tage; //老师年龄
private double tsalary; //老师薪资
private String taddress; //老师住址
//下面的构造器/getset/toString省略你们自己写上就行
} **************************************************** 注:TeacherDao接口 /**
* @author ant
* @interface 抽象老师接口
*/
public interface TeacherDao { //接口方法 查询全部老师
List<Teacher> findAll();
} **************************************************** 注:TeacherDaoImpl实现类 /**
* @author ant
* @class TeacherDao接口的实现类
*/
public class TeacherDaoImpl implements TeacherDao {
//聚合mybatis工厂对象
private SqlSessionFactory factory; //构造器传入对象
public TeacherDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
} //查询全部方法
public List<Teacher> findAll() {
//获取SqlSession
SqlSession sqlSession = factory.openSession();
//调用查询方法 带list后缀的说明数据有多个
List<Teacher> teachers = sqlSession.selectList("cn.xw.dao.TeacherDao.findAll");
//关闭对象
sqlSession.close();
//返回数据
return teachers;
}
} **************************************************** 注:配置文件 resource/cn/xw/dao/TeacherDao.xml <?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="cn.xw.dao.TeacherDao">
<select id="findAll" resultType="cn.xw.domain.Teacher">
select * from teacher;
</select>
</mapper> **************************************************** 注:主配置文件SqlMapConfig.xml 和配置文件开发配置的一样 <?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">
<!--mybatis的主配置文件-->
<configuration>
<!--配置环境 default="mysql" 说明找下面的一个id为mysql的配置 将来这个下面会有许多如oracle配置啦等等-->
<environments default="mysql">
<!--配置一个名为mysql的 数据库连接配置 -->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源连接池-->
<dataSource type="POOLED">
<!--四大配置 driver驱动 url数据库地址 username/password账号密码-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo_school"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments> <!--映射的配置文件位置 映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<!--这个是配置文件开发 配置文件路径-->
<mapper resource="cn/xw/dao/TeacherDao.xml"></mapper>
</mappers>
</configuration> ****************************************************
注:测试类客户端 public class Client { public static void main(String[] args) throws IOException { //获取配置文件的流信息
InputStream config = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建一个SqlSessionFactoryBuilder,这个后期方便创建一个工厂对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//通过SqlSessionFactory来创建一个SqlSessionFactory工厂对象
SqlSessionFactory factory = builder.build(config); //创建TeacherDao的实现类 传入SqlSessionFactory工厂对象
TeacherDao teacherDao = new TeacherDaoImpl(factory); //通过TeacherDao的实现类调用findAll方法查询全部,返回数据 打印
List<Teacher> teachers = teacherDao.findAll();
for (Teacher teacher : teachers) {
System.out.println(teacher.toString());
}
//关闭对象
config.close();
}
}

mybatis使用实现类来完成

(4):总结

通过上面的三种写法,我们对mybatis有了一个小小的了解 ,但是这个了解只是最基础的,其实mybatis的写法有配置文件开发、注解开发、实现类开发;这三种最常用的也就注解和配置文件2中,那个实体类开发只需要了解一下即可。如果想深入了解,这点还是远远不够的,而且一旦出现多表将无法完成一系列CRUD操作,所有还得继续学习。

这三种开发方式我将会在接下来的几篇里详细介绍,包括配置文件、多表操作、缓存.......

Mybatis基本入门搭建的更多相关文章

  1. MyBatis基础入门《一》环境搭建

    MyBatis基础入门<一>环境搭建 参考资料链接:http://www.mybatis.org/mybatis-3/ 使用maven构建项目,STS开发工具,jdk1.8 项目结构: m ...

  2. mybatis学习:mybatis的环境搭建与入门

    一.mybatis的概述: mybatis是一个持久层框架,用java编写 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接登繁杂过程 它使用了ORM思想 ...

  3. MyBatis基础入门《二》Select查询

    MyBatis基础入门<二>Select查询 使用MySQL数据库,创建表: SET NAMES utf8mb4; ; -- ---------------------------- -- ...

  4. Mybatis基础入门学习

    Mybatis基础入门学习 mybatis架构分析 搭建测试mybatis架构 )下载并导入mybatis3.2.7.jar(架构),mysql-connector-java-5.1.7-bin.ja ...

  5. SpringBoot+SpringMVC+MyBatis快速整合搭建

    作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...

  6. Mybatis(一) 入门

    对原生态jdbc程序中问题总结 创建mysql数据库 jdbc程序 使用jdbc查询mysql数据库中用户表的记录. 创建java工程,加入jar包 数据库驱动包 第一个是mysql驱动 第二个是or ...

  7. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  8. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  9. MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

随机推荐

  1. Java ThreadLocal解析

    简介 ThreadLocal 类似局部变量,解决了单个线程维护自己线程内的变量值(存.取.删),让线程之间的数据进行隔离.(InheritableThreadLocal 特例) 这里涉及三个类,Thr ...

  2. 【前端背景UI】鼠标磁性动态蜘蛛网背景源码

    <div style="float:right;" id="hub_iframe"></div> <script type=&qu ...

  3. 王玉兰201771010128《面象对象程序设计(Java)》第九周学习总结

    第一部分:理论基础部分总结: 一:(1)异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 常见的几种错误:A:用户输入错误:B:设备错误;硬件出错:C:物理限制:磁盘满了,可用存储空间 ...

  4. HDU-6393 Traffic Network in Numazu

    题意:给你一个n边n点的无向连通图,两个操作,操作一改变某个边的权值,操作二查询某两个点之间的路径长度. 题解:随便删掉环上一条边搞一棵树出来,因为两点间距离是两点各自到根的距离之和减去2*lca两点 ...

  5. POJ3255

    题目链接:http://poj.org/problem?id=3255 解题思路: 昨晚两点多睡不着翻起来刷<挑战>的题,结果遇到这道求次短路的题,一脸懵逼.想了半小时没什么思路就看他的解 ...

  6. 1417. 重新格式化字符串--来源:力扣(LeetCode)

    题目描述: 给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母. 请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同.也就是说,字母后面应该跟着数字,而数字后面应该跟着字母. 请 ...

  7. 【Python】利用python自动发送邮件

    前言 在训练网络的过程中,需要大量的时间,虽然可以预估网络训练完成时间,但蹲点看结果着实有点不太聪明的亚子. 因此,参照师兄之前发的python利用smtp自动发邮件的代码,我作了些调整,并参照网上的 ...

  8. java颜色对照表

  9. Java工作流引擎的测试容器-功能-使用方法-注意事项

    工作流引擎的测试容器-功能-使用方法-注意事项 关键字 Ccbpm, ccflow,jflow,工作流引擎,工作流引擎测试容器,表单引擎 功能说明 工作流的测试容器是为了解决手工模拟人工登录模式下测试 ...

  10. echarts的时间轴的提示内容写在轴下方

    echarts的时间轴的提示内容写在轴下方 在echarts中横坐标的拖动轴dataZone的提示内容在两端,并且没有相关配置让其显示在轴下方或者其他位置. 解决方式: 在图标下方添加dom并且监听拖 ...