目录
1.Mybatis的背景
Mybatis是一款优秀的持久层框架,它是由Apache软件基金会提供的一个开源项目,它在Hibernate、TopLink等ORM框架的基础上,将Sql语句与代码解耦,以及动态Sql的使用,使得开发者可以灵活地控制Sql语句的生成和执行过程。
在Java开发领域,Sql语句的编写一直是比较麻烦和容易出错的一个环节,传统的JDBC方式需要开发者手动拼写Sql语句,并且在执行时需要手动设置参数和处理结果集。而ORM框架则是将Java对象和数据库表进行映射,在进行增、删、改、查等操作时,只需要对Java对象进行操作,ORM框架会将操作转化为对数据库的Sql语句进行操作。但是,ORM框架常常会存在一定的性能问题,特别是对于超大型数据量和高并发的系统,ORM框架的性能会更加明显地劣于手工编写的Sql语句。
Mybatis框架结合了ORM框架和手工Sql语句编写的优点,它通过Sql映射文件与Java接口的方法进行绑定,实现了Java对象与数据库表的映射,同时也允许开发者手动控制Sql语句的生成和执行过程,这样就可以更好地控制程序的性能。另外,Mybatis框架提供了一些成熟的缓存机制,能够有效地减少数据库访问的次数,提升系统的性能。Mybatis框架还有很多其他的高级特性,如动态Sql、参数映射、插件等功能,可以进一步提升开发效率和程序性能。
2.Mybatis的的作用
Mybatis的主要作用是简化数据库访问代码的编写,提供灵活性和高度可定制性的数据持久化解决方案。具体来说,Mybatis的作用包括以下几个方面:
数据库访问:Mybatis可以帮助开发人员处理与数据库的交互,包括执行SQL语句、查询数据、插入、更新和删除等操作。它提供了丰富的API和配置方式,使得开发人员能够轻松地进行数据库访问。
SQL映射:Mybatis将SQL语句与Java代码进行分离,通过XML或注解的方式进行配置,使得开发人员可以更加专注于业务逻辑的实现。它支持动态SQL,可以根据不同的条件生成不同的SQL语句,提供了强大的灵活性。
参数映射:Mybatis支持将Java对象与SQL语句的参数进行映射,可以通过命名参数或位置参数的方式传递参数。它还提供了丰富的参数处理方式,包括自动类型转换、参数校验和参数处理器等。
结果集映射:Mybatis支持将查询结果映射为Java对象,可以通过配置文件或注解来定义映射关系。它提供了灵活的映射方式,可以将查询结果映射为单个对象、列表、嵌套对象等形式,方便数据的处理和操作。
缓存机制:Mybatis具有缓存机制,可以缓存查询结果,提高数据库访问的性能。它支持一级缓存和二级缓存,可以根据需求进行配置和使用。
总而言之,Mybatis作为一款轻量级的Java持久层框架,可以帮助开发人员简化数据库访问的代码编写,提供灵活性和高度可定制性的数据持久化解决方案。它在许多项目中得到广泛应用,成为Java开发人员进行数据库访问的首选框架之一。
3.Mybatis概述
Mybatis是一个基于Java语言的持久层框架,它通过XML描述符或注解将对象与关系型数据库中的表进行映射,使得在Java应用程序中操作数据库变得方便和高效。Mybatis具有以下优点:
灵活性高:Mybatis通过Sql映射文件与Java接口的方法进行绑定,允许开发者手动控制Sql语句的生成和执行过程,极大地提高了灵活性。
易于学习和使用:Mybatis核心配置简单明了,且集成规范,易于上手。
性能出色:Mybatis不会对Sql进行特意优化,而是将这一任务交给了开发者,因此开发者可以根据自己的需求对Sql进行优化,从而提高性能。
易于集成:Mybatis可以与Spring等大多数主流框架无缝集成。
总之,Mybatis是一款开源的、轻量级的、高效的Java持久化框架,非常适合开发中、小型项目。
4.Mybatis的定义
Mybatis是一款基于Java语言的持久层框架,它通过SQL映射文件或注解将Java对象与数据库表进行映射,方便进行数据的持久化操作。Mybatis的核心思想是将SQL语句与Java代码进行解耦,使得开发者能够更好地控制SQL语句的生成和执行过程,进而提高系统的灵活性、可维护性和性能。
当我们考虑使用 MyBatis,就好像我们在处理数据库时的一种智能方法。想象一下,你是一个数据库管理员,有一堆数据库表格和数据,而你的任务是通过编写查询语句来检索、插入、更新和删除数据。但是,你不想使用复杂的工具,而是更喜欢直接使用 SQL 语句来处理数据。
MyBatis 就像是你的助手,它让你可以轻松地执行数据库操作,而无需关心太多底层细节。你可以将数据库表格和 Java 类之间的关系告诉 MyBatis,然后告诉它你想要执行的操作,比如查询特定数据,或者将新数据插入到表格中。
与传统的方法不同,MyBatis 允许你在 XML 配置文件中编写 SQL 查询,也可以通过注解在 Java 代码中指定。这就像是你编写一份清单,告诉 MyBatis 你想要做什么,然后它会帮你将这些请求转化为真正的 SQL 查询。这样,你可以轻松地在 Java 代码中调用这些查询,就像在数据库中进行搜索一样简单。
而且,MyBatis 还有其他聪明的功能。它支持缓存,这意味着当你多次查询相同的数据时,它会从内存中快速获取,而不是每次都去数据库查询。它还支持懒加载,这意味着当你需要某些关联数据时,它才会从数据库中加载,而不是一次性加载所有内容。
总之,使用 MyBatis 就像是在处理数据库时有一个智能的助手,它帮助你编写、执行和管理数据库操作,同时让你保持对 SQL 查询和数据流的直接控制。这样,你可以更专注于业务逻辑,而不必过多担心数据库访问的复杂性。
5.Mybatis的特点
Mybatis有以下特点:
灵活性:Mybatis可以通过SQL映射文件或注解实现SQL的编写,开发者可以根据实际需求自由定义SQL语句,不受框架限制。
可维护性:Mybatis可以将SQL语句和Java代码进行解耦,使得SQL语句的修改和维护更加方便。
易于学习和使用:相对于其他ORM框架,Mybatis的学习曲线较为平缓,文档齐全,易于上手。
高性能: Mybatis使用了缓存机制,可以有效地提高系统的性能和响应速度。
支持多种数据库:Mybatis支持多种关系型数据库,包括MySQL、Oracle、SQL Server等,使用方便灵活。
当谈到 MyBatis 这个东西时,就好像在讨论一位非常擅长连接你和数据库的"翻译家"。想象一下,你有一个庞大的图书馆,里面放满了书籍,而你需要找到特定的书籍或者把新的书籍放进去。但是,你不擅长找到正确的书架,或者不知道如何将新书整理好。
MyBatis 就像是那位翻译家,它能够帮助你实现与图书馆的沟通,就像你在使用英语与其他人对话一样。你告诉这位翻译家你需要哪本书,或者你想要添加什么新书,然后它会帮你找到正确的书架,整理好新书,确保你的请求得到满足。
与其他复杂的工具不同,MyBatis 让整个过程变得非常直观。你可以告诉它,哪本书对应着哪个数据库表,然后告诉它你需要哪种操作,比如读取书籍或者添加新书。你可以在一个叫做 XML 配置文件的地方写下你的要求,或者在你的代码中用特殊的记号标明。
而且,MyBatis 还有一些额外的优点。它支持缓存,就好像你把你最常用的书放在你的书桌上,这样可以更快地拿到它们,而不是每次都去书架上翻找。还有懒加载功能,当你只需要特定的书籍时,它会帮你把那本书从书架上取下来,而不是一次性把所有书都取出来。
总之,MyBatis 就像是一个与图书馆之间建立联系的智能翻译家。它能够帮你轻松实现与数据库的交流,而不需要过多担心复杂的操作。这样,你可以更专注于你的工作,而不必花费过多时间在与数据库的互动上。
6.ORM框架是什么
ORM(Object-Relational Mapping)框架是一种将对象模型和关系数据库之间进行映射的技术。它的主要作用是将数据库中的数据映射为对象,使得开发人员可以通过面向对象的方式来操作数据库,而不需要直接编写SQL语句。
ORM框架通过提供一系列的API和工具,将数据库表和对象之间的映射关系进行定义和管理。开发人员可以通过配置或注解的方式,将对象与数据库表进行关联,定义字段之间的映射关系,以及定义对象之间的关联关系。
ORM框架的主要优点包括:
- 简化数据库操作:ORM框架隐藏了底层数据库的细节,开发人员可以通过面向对象的方式来进行数据库操作,无需编写复杂的SQL语句。
- 提高开发效率:ORM框架提供了一系列的CRUD(增删改查)操作的API和工具,可以大大简化数据库操作的代码量,提高开发效率。
- 跨数据库支持:ORM框架一般支持多种数据库,开发人员可以在不同的数据库之间进行切换,而无需修改大量的代码。
- 对象关系映射:ORM框架将数据库表和对象之间的映射关系进行管理,使得开发人员可以通过对象的方式来操作数据库,方便数据的处理和操作。
- 提高性能:ORM框架通过对SQL语句的预编译和缓存机制,提高数据库访问的性能,支持批量操作和延迟加载等特性,进一步优化了数据库访问的效率。
常见的ORM框架包括Hibernate、Mybatis、Spring Data JPA等。开发人员可以根据项目需求和团队的实际情况选择合适的ORM框架来进行数据库访问和操作
7.Mybatis与其他ORM框架的区别
当比较MyBatis与其他ORM(对象关系映射)框架时,以下是一些主要区别:
-
SQL 控制程度:
- MyBatis: MyBatis允许开发人员编写原生SQL查询,并将其映射到对象。这使得可以更精确地控制数据库操作,但需要手动处理SQL语句。
- 其他ORM框架: 其他ORM框架(如Hibernate)通常通过提供高级抽象来隐藏SQL,从而减少了手动编写SQL的工作,但可能在性能和复杂性方面具有一些限制。
-
灵活性:
- MyBatis: MyBatis在处理复杂查询和自定义映射方面非常灵活。开发人员可以根据需要进行细粒度的控制和优化。
- 其他ORM框架: 其他ORM框架可能在灵活性方面受到一些限制,因为它们试图提供更高级的抽象来处理数据库操作。
-
对象关系映射:
- MyBatis: MyBatis使用XML或注解来定义对象与数据库表之间的映射关系,允许开发人员精确地配置如何将数据库查询结果映射到对象属性。
- 其他ORM框架: 其他ORM框架通常使用类和注解来定义对象和数据库表之间的映射关系,通过约定优于配置的方式来减少映射配置的工作。
-
性能优化:
- MyBatis: 由于开发人员可以编写原生SQL,因此他们可以更好地优化查询性能,但需要更多的数据库知识。
- 其他ORM框架: 其他ORM框架可能在某些情况下执行性能优化,但可能不如手动优化的精确。
-
学习曲线:
- MyBatis: 对于熟悉SQL的开发人员来说,上手相对较容易。但对于不熟悉SQL的人来说,可能需要一些时间来理解。
- 其他ORM框架: 其他ORM框架可能提供更高级的抽象,适合那些不太了解SQL的开发人员。
综上所述,选择MyBatis还是其他ORM框架取决于项目的需求、团队的技能和对数据库操作的控制程度。
当比较 MyBatis 和其他 ORM 框架时,就像在比较两种不同的方式来处理图书馆中的书籍。这两种方式分别是“智能图书管理员”(ORM 框架)和“书架指南”(MyBatis)。
MyBatis(书架指南):
在图书馆中,你有一个书架指南,上面标明了每本书在哪个位置。这本质上就是你在 MyBatis 中定义的 SQL 映射。
当你想要一本特定的书时,你会查阅书架指南,找到书籍的位置,然后自己去取。
MyBatis 让你在 XML 文件中定义 SQL 查询或在代码中使用注解,然后根据这些定义的内容,它会帮助你执行数据库操作。
你有更多的控制权,可以更准确地定义查询,管理数据库操作的细节。
其他 ORM 框架(智能图书管理员):
在图书馆中,你有一位智能图书管理员,你只需告诉他你需要哪本书,他会帮你找到并递给你。
这个图书管理员代表了 ORM 框架,它会在后台自动构建和执行 SQL 查询,然后把结果封装成对象返回给你。
ORM 框架通过对象和数据库表的映射,自动处理数据库操作,不需要你手动编写 SQL 查询。
这使得操作更加方便,你只需要关心对象和业务逻辑,而不必过多关注底层的数据库细节。
总的来说,MyBatis 和其他 ORM 框架的区别在于控制程度。MyBatis 像是一个让你手动操作图书馆的书架指南,让你有更多的控制权和灵活性,但需要一些额外的配置和代码编写。另一方面,其他 ORM 框架就像是一个智能的图书管理员,自动帮你处理数据库操作,省去了很多繁琐的工作,但可能会限制一些复杂查询和优化操作的自定义。选择哪种方式取决于你对控制和自动化的需求。
8.mybatis优缺点
MyBatis优点:
灵活性高:MyBatis允许你编写原生的SQL查询,这意味着你可以完全控制查询的细节,可以根据需求编写复杂的查询语句。
适应性强:MyBatis适用于各种数据库系统,因为它的底层并不限制于特定的数据库。这使得你可以轻松地切换数据库系统而不必更改太多代码。
轻量级:相比于其他ORM框架,MyBatis的运行时开销相对较小。它不会在运行时引入过多的性能开销,适合对性能要求较高的场景。
映射灵活:MyBatis提供了多种映射方式,包括基于XML和基于注解的方式,你可以根据项目的需求选择最合适的方式。
易于调优:由于你可以编写原生SQL查询,因此可以更容易地进行数据库查询性能的调优,针对特定的数据库操作优化。
支持定制:MyBatis提供了插件机制,允许你在不修改核心代码的情况下扩展其功能,比如添加自定义的日志记录、缓存等功能。
MyBatis缺点:
SQL维护复杂:虽然原生SQL查询提供了灵活性,但也意味着你需要自己负责维护SQL语句,包括SQL的编写、优化和调试,这可能会增加一些开发工作量。
数据库依赖性:虽然MyBatis可以适应多种数据库,但在切换数据库时,仍然需要注意一些数据库特定的差异和语法问题。
学习曲线:相对于一些自动化的ORM框架,MyBatis可能有一定的学习曲线,特别是对于初次接触原生SQL的开发者。
XML配置复杂:尽管XML配置提供了很大的灵活性,但有时候需要编写大量的XML配置文件,可能会让配置变得复杂。
代码冗余:使用MyBatis时,你可能需要在Mapper接口和映射文件中定义相同的SQL语句,这可能会导致代码的冗余。
总的来说,MyBatis是一个灵活、轻量级的ORM框架,适用于那些需要更多控制和定制性的项目。它允许你编写原生的SQL查询,但也需要你自己负责SQL的维护和优化。如果你更关注自动化和减少重复性代码,其他ORM框架可能更适合你。选择使用MyBatis还是其他ORM框架,取决于项目需求和团队的技术偏好。
9.MyBatis的核心组件
-
SqlSessionFactory(会话工厂):SqlSessionFactory 是 MyBatis 的核心接口之一。它的作用是创建 SqlSession 实例,SqlSession 实际上是与数据库交互的主要入口。SqlSessionFactory 负责读取 MyBatis 配置文件并构建配置信息,然后根据配置信息创建 SqlSession。
-
SqlSession(会话):SqlSession 代表了一次与数据库的会话,它是 MyBatis 的核心组件之一。SqlSession 提供了对数据库的操作方法,包括查询、插入、更新和删除等。每个会话通常对应一个数据库连接,它负责管理事务的开始和结束。
-
Mapper接口(数据映射器接口):Mapper 接口是定义数据访问操作的接口。它通常包含了与数据库相关的SQL查询语句的声明,以及这些操作的参数和返回值类型。Mapper 接口与XML文件(MyBatis的映射文件)一起使用,将方法与SQL语句进行映射。
SqlSessionFactory的作用和配置方式
SqlSessionFactory 的作用是创建 SqlSession 对象,它需要配置文件来初始化。配置文件通常包括以下几个关键部分:
-
数据源配置:指定数据库连接的信息,包括数据库类型、地址、用户名、密码等。
-
映射文件配置:定义了 Mapper 接口与 SQL 查询语句之间的映射关系。这些映射通常包括 SQL 查询语句的位置、输入参数和输出结果的映射。
-
全局配置:包括事务管理器的配置、缓存配置、插件配置等。
以下是一个简单的 MyBatis 配置文件的示例:
xml
<configuration>
<!-- 数据源配置 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</dataSource>
<!-- 映射文件配置 -->
<mappers>
<mapper resource="com/example/MyMapper.xml"/>
</mappers>
</configuration>
SqlSession的生命周期和常用方法
SqlSession 的生命周期通常是短暂的,它的创建和销毁应该在一个方法内完成,以确保及时释放数据库资源。SqlSession 的常用方法包括:
-
selectOne(String statement, Object parameter)
:执行查询并返回单个结果。 -
selectList(String statement, Object parameter)
:执行查询并返回结果列表。 -
insert(String statement, Object parameter)
:执行插入操作。 -
update(String statement, Object parameter)
:执行更新操作。 -
delete(String statement, Object parameter)
:执行删除操作。 -
commit()
:提交事务。 -
rollback()
:回滚事务。 -
close()
:关闭 SqlSession。
Mapper接口的作用和编写方式
Mapper 接口的作用是定义数据访问操作的接口,以及这些操作与 SQL 查询语句的映射关系。Mapper 接口通常不需要手动实现,MyBatis 会在运行时动态生成实现类。
编写 Mapper 接口的方式是创建一个 Java 接口,方法名与映射文件中定义的 SQL 查询语句的 ID 相对应,方法的参数和返回值类型与查询的输入参数和输出结果类型相匹配。例如:
java
public interface UserMapper {
User selectUserById(int id);
List<User> selectAllUsers();
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
在映射文件中,可以使用 <mapper>
元素来与 Mapper 接口关联,并定义查询语句的映射关系:
xml
<mapper namespace="com.example.UserMapper">
<select id="selectUserById" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
<!-- 其他查询语句的映射 -->
</mapper>
通过这种方式,Mapper 接口的方法与 SQL 查询语句建立了映射关系,可以方便地进行数据库操作。 MyBatis 会在运行时生成 Mapper 接口的实现类,具体的数据库操作会在这个实现类中被执行。
10.MyBatis环境搭建
10.1创建Maven项目
打开IDEA创建一个Maven项目命名为mybatis,之后的操作会在Maven项目在演示
10.2pom.xml修改
之后修改pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mybatis Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- ********************** junit单元测试依赖 ********************** -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- <scope>test</scope>-->
</dependency>
<!-- ********************** Java Servlet API ********************** -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<!-- ********************** Mybatis依赖 ********************** -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- ********************** Mysql JDBC驱动 ********************** -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!-- ********************** 日志配置 ********************** -->
<!--记得修改mybatis.cfg.xml添加如下内容-->
<!--<setting name="logImpl" value="LOG4J2"/>-->
<!--核心log4j2jar包-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.9.1</version>
</dependency>
<!--web工程需要包含log4j-web,非web工程不需要-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.9.1</version>
</dependency>
</dependencies>
<build>
<finalName>mybatis</finalName>
<resources>
<!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>jdbc.properties</include>
<include>*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies>
<!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
</dependencies>
<configuration>
<overwrite>true</overwrite>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</build>
</project>
10.3 jdbc.properties
jdbc.properties配置文件:用于输入数据库的用户密码(注意:该配置文件的首字母不能大写)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://47.100.191.44:3308/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=test01
jdbc.password=test01
10.4web.xml
找到maven项目中webapp下WEB-INF的web.xml配置JSP文件修改为:3.1
<!-- 修改web.xml由2.3至3.0 -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
</web-app>
11.MyBatis的CRUD
11.1编写业务逻辑层
接口类
package com.liao.biz;
import com.liao.model.Book;
public interface BookBiz {
int deleteByPrimaryKey(Integer bid);
int insert(Book record);
int insertSelective(Book record);
Book selectByPrimaryKey(Integer bid);
int updateByPrimaryKeySelective(Book record);
int updateByPrimaryKey(Book record);
}
实现接口
package com.liao.biz.impl;
import com.liao.biz.BookBiz;
import com.liao.mapper.BookMapper;
import com.liao.model.Book;
public class BookBizImpl implements BookBiz {
private BookMapper bookBiz;
public BookMapper getBookBiz() {
return bookBiz;
}
public void setBookBiz(BookMapper bookBiz) {
this.bookBiz = bookBiz;
}
@Override
public int deleteByPrimaryKey(Integer bid) {
return bookBiz.deleteByPrimaryKey(bid);
}
@Override
public int insert(Book record) {
return bookBiz.insert(record);
}
@Override
public int insertSelective(Book record) {
return bookBiz.insertSelective(record);
}
@Override
public Book selectByPrimaryKey(Integer bid) {
return bookBiz.selectByPrimaryKey(bid);
}
@Override
public int updateByPrimaryKeySelective(Book record) {
return bookBiz.updateByPrimaryKeySelective(record);
}
@Override
public int updateByPrimaryKey(Book record) {
return bookBiz.updateByPrimaryKey(record);
}
}
11.2SqlSession工厂类
package com.liao.utils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SessionUtil {
private static SqlSessionFactory sessionFactory;
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
static {
sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));
}
public static SqlSession openSession() {
SqlSession session = threadLocal.get();
if (null == session) {
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public static void main(String[] args) {
SqlSession session = openSession();
System.out.println(session.getConnection());
session.close();
// System.out.println(session.getConnection());
}
}
11.3.测试类
package com.liao.demo;
import com.liao.biz.BookBiz;
import com.liao.biz.impl.BookBizImpl;
import com.liao.mapper.BookMapper;
import com.liao.model.Book;
import com.liao.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class Demo {
private SqlSession sqlSession;
private BookBiz bookBiz;
@Before
public void a(){
System.out.println("执行测试方法之前会执行的初始化代码块");
sqlSession= SessionUtil.openSession();
BookBizImpl bookBiz = new BookBizImpl();
BookMapper mapper = sqlSession.getMapper(BookMapper.class);
bookBiz.setBookBiz(mapper);
this.bookBiz=bookBiz;
}
@After
public void b(){
System.out.println("执行测试方法之后会执行");
}
@Test
public void test1(){
Book book = bookBiz.selectByPrimaryKey(35);
System.out.println(book);
}
@Test
public void test2(){
int i = bookBiz.deleteByPrimaryKey(35);
if (i>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}
}
简单测试查询和删除,其他的就不测试了