一: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. python --字符串学习

    一 转义字符 借用一个特殊的方法表示一系列不方便写出的内容,比如回车键,换行符,退格键 借助反斜杠字符,一旦出现反斜杠,则反斜杠后面一个或者几个字符表示已经不是原来的意思了 在字符串中,一旦出现了斜杠 ...

  2. 数据库常见考题查询SQL

    1.列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 执行查询: select count(*), a.deptid from employee a groub by depti ...

  3. 在ORACLE中实现SELECT TOP N的方法----[转]

    1.在ORACLE中实现SELECT TOP N 由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询. ...

  4. javaScript(原型链)

    在了解javaScript的原型链之前,我们得先来看一下原型是什么. 在javaScript中,所有的函数都会有着一个特别属性:prototype(显示原型属性):当我们运行如下代码时: functi ...

  5. 王艳 201771010127《面向对象程序设计(java)》第九周学习总结

    实验九 异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 一 ...

  6. 四使用浮动div布局

    刚开始学习的小白,如有不足之处还请各位补充,感激涕零.在html中有两种方式布局<table>表格和<div>,个人剧的使用表格布局可以避免bug产生,并且表格布局相对来说要容 ...

  7. vue生命周期函数2

    转载:http://blog.csdn.net/qq_15766181/article/details/73549933 钩子就好像是把人的出生到死亡分成一个个阶段,你肯定是在出生阶段起名字,而不会在 ...

  8. mysql事务控制和锁定语句

    MySQL 支持对 MyISAM 和 MEMORY 存储引擎的表进行表级锁定,对 BDB 存储引擎的表进行页级锁定,对 InnoDB 存储引擎的表进行行级锁定.默认情况下,表锁和行锁都是自动获得的,不 ...

  9. Asp.Net Core入门之配置文件

    ASP.NET Core配置框架已内建支持 JSON.XML 和 INI 配置文件,内存配置(直接通过代码设置值),环境变量配置等方式配置参数. 本文主要和大家讲一下我们在项目中常用的以配置文件的方式 ...

  10. vue中生命周期

    1,说器生命周期,总觉得有熟悉,又陌生,直到看到一道面试题,问父子组件的生命周期的执行顺序,我擦,真没太注意啊,不知道. 2,网上搜了一下,说法是有点像洋葱圈的形式,由外到内,在到外,因为就像一个盒子 ...