Mybatis基本入门搭建
一:Mybatis框架概述
1:什么是Mybatis
官方定义:
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
- mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了对JDBC的操作,使开发者只需要关注 sql 语句本身,而不需要花费精力去注册驱动、创建Connection、Statement等对象,也不需要手动设置配置参数。
- mybatis 通过 xml 或注解的方式对要执行的各种 statement(声明) 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
- 采用 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版本号,有些朋友没有那个啥,可能会访问不了那个网站

2:开始搭建Mybatis案例
(1):配置文件开发代码编写

注:这个是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):实现类开发代码编写
这个实现类开发的方法极少有人写,因为用这种写法根没使用框架差不多,繁琐,最多在学习中了解这种写法
项目的架构和配置文件开发的框架差不多,只是在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基本入门搭建的更多相关文章
- MyBatis基础入门《一》环境搭建
MyBatis基础入门<一>环境搭建 参考资料链接:http://www.mybatis.org/mybatis-3/ 使用maven构建项目,STS开发工具,jdk1.8 项目结构: m ...
- mybatis学习:mybatis的环境搭建与入门
一.mybatis的概述: mybatis是一个持久层框架,用java编写 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接登繁杂过程 它使用了ORM思想 ...
- MyBatis基础入门《二》Select查询
MyBatis基础入门<二>Select查询 使用MySQL数据库,创建表: SET NAMES utf8mb4; ; -- ---------------------------- -- ...
- Mybatis基础入门学习
Mybatis基础入门学习 mybatis架构分析 搭建测试mybatis架构 )下载并导入mybatis3.2.7.jar(架构),mysql-connector-java-5.1.7-bin.ja ...
- SpringBoot+SpringMVC+MyBatis快速整合搭建
作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...
- Mybatis(一) 入门
对原生态jdbc程序中问题总结 创建mysql数据库 jdbc程序 使用jdbc查询mysql数据库中用户表的记录. 创建java工程,加入jar包 数据库驱动包 第一个是mysql驱动 第二个是or ...
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
随机推荐
- jbpm4 泳道
今天刚学习了jbpm4的泳道使用,方便以后查阅记录一下! 泳道定义: <swimlane name="myswim" assignee="userC"&g ...
- search(14)- elastic4s-统计范围:global, filter,post-filter bucket
聚合一般作用在query范围内.不带query的aggregation请求实际上是在match_all{}查询范围内进行统计的: GET /cartxns/_search { "aggs&q ...
- 08-Python之路---初识函数
Python之路---初识函数️ 程序员三大美德: 懒惰 因为一直致力于减少工作的总工作量. 缺乏耐性 因为一旦让你去做本该计算机完成的事,你将会怒不可遏. 傲慢 因为被荣誉感冲晕头的你会把程序写得让 ...
- Jenkins-插件开发-BUG-Messages类编译报错
注意:下载Jenkins插件源码后报错Messages这个类怎么导包都报编译错误的问题! 今天从GitHub下载了Jenkins的一些插件源码,准备自己研究研究写个插件.但是发现每个源码中都存在一个编 ...
- Json转化与ExtJS树(后台处理)
一.JSON对格式化数据的操作: 1.导入依赖包: import org.json.JSONArray; import org.json.JSONException; import org.json. ...
- windows package.json设置多个环境变量
{ "scripts": { "dev1": "serverName=xx1 prefixName=xx2 NODE_ENV=dev pm2 star ...
- 30分钟快速上手Docker,看这篇就对了!
一.历史演化 1.演化史 2.物理机时代 2.1.图解 一个物理机上安装操作系统,然后直接运行我们的软件.也就是说你电脑上直接跑了一个软件,并没有开虚拟机什么的,资源极其浪费. 2.2.缺点 部署慢 ...
- Spring Bean 定义
Bean 定义 被称作 bean 的对象是构成应用程序的支柱.也是由 Spring IoC 容器管理的. bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象. 这些 bea ...
- Redis学习笔记(十五)Sentinel(哨兵)(中)
上一篇 我们模拟了单机器下哨兵模式的搭建,那么接下来我们看下哨兵模式的实现与工作. 为什么又分成两篇呢?因为篇幅太长(偷懒),再一个这篇主要说的是Sentinel的初始化以及信息交换,下一篇着重说下状 ...
- 【python爬虫】scrapy入门5--xpath等后面接正则
比如我们要调试某网页:https://g.widora.cn/ shell不依赖工程环境 scrapy shell https://g.widora.cn/ 类似页面F12,可用对象都列出来了,一般常 ...