Mybatis简介
Mybatis是基于JDBC的持久层框架,主要用于数据的持久化处理。
所谓持久化:就是把数据存放到数据库中。
ORM:Object-relational-mode,即对象关系映射模型框架。
目前市场上流行的ORM框架有:HIbernate,Mybatis……
为什么要使用Mybatis框架
因为原生的 JDBC 有着一些不可避免的缺陷:样式代码较多,开发效率较低。而Mybatis框架对 JDBC进行了封装,简化了开发流程,减少了样式代码,一定程度上提升了开发效率。
JDBC 缺陷:
1、在开发工程中把SQL语句卸载 JAVA代码中,不利于SQL语句的修改。
2、JDBC操作数据库,过程较为繁琐,步骤较多,需:
2.1、加载驱动。
2.2、创建连接数据库的对象Connection。
2.3、创建执行SQL语句的对象Statement或者Preparedstatement.
2.4、创建执行结果对象ResultSet。
2.5、编写数据库操作代码。
2.6、执行SQL语句对象,获取执行结果。
2.7、遍历处理结果。
2.8、释放资源,关闭以上创建的对象。
3,、更换数据源较为麻烦,如Mysql,Oracle,SQLserver。
4、频繁的创建和关闭数据库连接,影响系统性能。
Mybatis框架,恰恰能够较好的解决这些问题。
而Hibernate框架,是面向对象的数据处理框架。使用的是HQL语句,在项目运行中,再把HQL语句转换成SQL语句执行。处理复杂的SQL语句非常麻烦。
而Mybatis把SQL语句解放了出来,开发者可以直接编写SQL语句进行数据处理。
Mybatis框架:
是轻量级的,易于学习使用的框架,上手快,使用简单。
支持直接在xml文件中编写SQL语句,便于优化,维护。
提供对象关系映射标签,完成对象关系的映射。
支持动态的SQL语句编写。
怎么使用Mybatis框架:
1、创建一个java/web项目。
2、导入需要使用的jar包。
3、创建一个mybatis-config.xml:Mybatis的核心配置文件。
4、创建实体类对象和对象关系映射文件。
5、创建测试文件进行测试:
5.1、加载核心配置文件
1 | InputStream in = 类名.class.getResourceAsStream("/mybatis-config.xml"); |
5.2、创建SqlSessionfactory的构建器
1 | SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); |
5.3、创建SqlSessionFactory对象
1 | SqlSessionFactory factory = builder.build(in); |
5.4、创建SqlSession对象
1 | SqlSession session = factory.openSession(); |
5.5、调用session接口的查询方法
1 | session.selectOne("namesapce.id",传参值); // namesapce.id是XML映射文件的mapper标签namesapce名+SQL标签id |
Mybatis日志
slf4j:日志框架
log4j:日志框架的实现
1、添加日志的jar包
2、添加日志的配置文件log4j.properties
Junit单元测试
1、在项目中导入junit包。
2、创建一个类,定义一个测试方法,在方法上面加@Test注解。
3、点击方法名,右键run as junit test
4、Junit状态栏,读条变绿的情况下,测试通过,绿以外的情况是不通过。
@Test:该注解表示该方法是用于单元测试的方法。
@Before:在@Test注解之前运行对的方法。
@After:在@Test注解之后运行对的方法。
Mybatis快速安装配置
安装
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
Mybatis的几种构建方式
1、 使用Maven 构建项目
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
1 | <dependency> |
2、使用XML映射构建
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。
1 | String resource = "org/mybatis/example/mybatis-config.xml"; |
XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。后面会再探讨 XML 配置文件的详细内容,这里先给出一个简单的mybatis-config示例:
1 |
|
当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。 注意 XML 头部的声明,它用来验证 XML 文档的正确性。environment 元素体中包含了事务管理和连接池的配置。
- development:开发模式
- work:工作模式
mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。
3、使用Java代码创建你自己的配置建造器
如果你更愿意直接从 Java 代码而不是 XML 文件中创建配置,或者想要创建你自己的配置建造器,MyBatis 也提供了完整的配置类,提供了所有与 XML 文件等价的配置项。
1 | DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); |
从 SqlSessionFactory 中获取 SqlSession
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:
1 | try (SqlSession session = sqlSessionFactory.openSession()) { |
诚然,这种方式能够正常工作,对使用旧版本 MyBatis 的用户来说也比较熟悉。但现在有了一种更简洁的方式——使用和指定语句的参数和返回值相匹配的接口(比如 BlogMapper.class),现在你的代码不仅更清晰,更加类型安全,还不用担心可能出错的字符串字面值以及强制类型转换。
例如:
1 | try (SqlSession session = sqlSessionFactory.openSession()) { |
XML映射SQL语句
在上面提到的例子中,一个语句既可以通过 XML 定义,也可以通过注解定义。MyBatis 提供的所有特性都可以利用基于 XML 的映射语言来实现,这里给出一个基于 XML 映射语句的示例:
1 |
|
它在命名空间 “org.mybatis.example.BlogMapper” 中定义了一个名为 “selectBlog” 的映射语句,这样你就可以用全限定名 “org.mybatis.example.BlogMapper.selectBlog” 来调用映射语句了,就像上面例子中那样。
通过 Java 注解定义
对于像 BlogMapper 这样的映射器类来说,还有另一种方法来完成语句映射。 它们映射的语句可以不用 XML 来配置,而可以使用 Java 注解来配置。比如,上面的 XML 示例可以被替换成如下的配置:
1 | package org.mybatis.example; |
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。
Spring Boot整合Mybatis
导入依赖:mybatis-spring-boot-starter
1 | <dependency> |
com包下建立了项目,常建立的包有:
- entity 实体类,通常定义在model层里面,相当于MVC的M层,属于数据模型层,命名Xxx
- mapper 数据存储对象,相当于DAO层,mapper层直接与数据库打交道(执行SQL语句),接口提供给service层。
- dao 描写数据库的抽象类interface,用作编写数据库的接口,具体到对某个表得增删改查,命名XxxDao
- service 编写逻辑代码的具体实现方法,要做这一层的话,要先设计接口,再实现类。命名XxxService
- controller 控制器,用作http请求的的参数传递,负责请求转发,命名XxxController
其他:
util包,比较麻烦的逻辑代码,可以封装成工具类,存放在 util 包
mapper,存放sql的xml文件
统一头部:
1 | <?xml version="1.0" encoding="UTF-8" ?> |
- 使用application.yml 文件配置
统一内容:
1 | #配置mysql数据源 |
注:classpath 指向根目录的 resources静态资源目录。
SpringBoot整合Mybatis实例
在 entity 包新建与数据表对应的实体类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41package com.example.wxshopsmallapp.entity;
//实体类变量名必须和数据表的字段名一致
public class GoodsInfo {
private int goods_id;
private String goods_name;
private int goods_price;
private int goods_stoke;
public int getGoods_id() {
return goods_id;
}
public void setGoods_id(int goods_id) {
this.goods_id = goods_id;
}
public String getGoods_name() {
return goods_name;
}
public void setGoods_name(String goods_name) {
this.goods_name = goods_name;
}
public int getGoods_price() {
return goods_price;
}
public void setGoods_price(int goods_price) {
this.goods_price = goods_price;
}
public int getGoods_stoke() {
return goods_stoke;
}
public void setGoods_stoke(int goods_stoke) {
this.goods_stoke = goods_stoke;
}
}在 mapper 包新建访问数据表的 SQL 映射方法
1
2
3
4
5
6
7
8package com.example.wxshopsmallapp.mapper;
import com.example.wxshopsmallapp.entity.GoodsInfo;
//接口名要与Mybatis的.xml映射文件名一致
public interface GoodsInfoMapper {
public GoodsInfo selectAllRecord();
}在resources 目录新建mybatisSQL映射文件
1 |
|
- 在service包新建服务类处理业务逻辑
1 | package com.example.wxshopsmallapp.service; |
- 在control包新建控制类,将所请求数据返回浏览器
1 | package com.example.wxshopsmallapp.control; |
2020年4月25日 完结
以上内容,仅供参考,转载请注明出处。