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可以 ...
随机推荐
- Spring全家桶之spring boot(四)
spring boot拦截器.过滤器.servlet和健康检查机制 spring boot拦截器 spring boot配置拦截器与原来大致相同,只是需要在拦截器的配置类上添加@Configurat ...
- Linux之cat的使用介绍
cat选项分析 ...
- Unity2.5D Sprite层级显示遮挡问题处理
代码源自游戏<A Place for the Unwilling> 开发<A Place for the Unwilling>游戏第一部要解决的问题就是让精灵可以围绕其它精灵前 ...
- 数据结构----链表Link
链表简介与数据结构 单向链表也叫单链表,是表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 单向链 ...
- jquery 根据 option 的 text 定位选中 option
$('#test option[text="b"]').attr("selected",true); 上面的方法在 jquery 低于 1.4.2 的版本(含) ...
- 王玉兰201771010128《面向对象程序设计(java)》第一周学习总结
第一部分:课程准备部分 填写课程学习 平台注册账号: 平台名称 注册账号 博客园:www.cnblogs.com 夜空傅说 程序设计评测:https://pintia.cn/ 2326669056@q ...
- Hyperledger Fabric——balance transfer(三)创建和加入Channel
详细解析blance transfer示例的创建通道(Channel)和加入节点到通道的过程. 创建Channel 1.首先看app.js的路由函数 var createChannel = requi ...
- hdu6005找带权最小环
题意:给你点和边,让你找最小环的权值,其权值是所有边权的和,没环输出-1. 解法:枚举每一条边,找到其端点,做最短路.. #include<cstdio> #include<cstr ...
- 【常用工具】vagrant的box哪里下?镜像在哪儿找?教你在vagrant官网下载各种最新.box资源
进入vagrant官网 : https://www.vagrantup.com/ 点击findbox[寻找box],进入有很多box的列表 : https://app.vagrantup.com/bo ...
- Java——字符串排序
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test { ...