前言:
关于对Dao(数据访问层)内的增删改查功能里繁琐的内容进行封装,以便简化日后的操作——导入对应的依赖即可。同时初步认识并配置我们的Mybatis环境。
在之前的学习当中,实体类需要定义get、set方法,构造方法和toString;尽管在工具的帮助下省略了部分操作,但这不是我们想要的。
因此,我们需要封装,导入依赖来实现如下结果:
可以看到我们将方法全部以导入依赖的方式处理,这样大大的增加了代码的可维护性和可读性。
一、导入依赖
我们新建一个项目,并对该项目的pom.xml文件进行配置:
这里将JUnit 版本更改为高一点的4.13.2版本,同时加入与数据库的连接;
接着进入mybatis的官网找到最新的版本进行配置。
完成上述三个配置后,我们Mybatis的XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。后面会再探讨 XML 配置文件的详细内容,这里先给出一个简单的示例:
注意,这里要导入我们的配置文件:
<properties resource="config.properties"/>
如果没有对应的配置文件则需要新建一个。后面对应的赋值要改为我们相应的文件内容:
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
二、数据持久化操作
我们先来看一下mapper层的作用:
对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,主要实现一些增删改查操作,在mybatis中方法主要与与xxx.xml内相互一一映射
如果不清楚各种包(层)是做什么作用的,可以参考以下内容:
https://blog.csdn.net/Restarting2019/article/details/122296373
https://blog.csdn.net/u011095110/article/details/86088976
接下来我们为实体类Dept建立一个功能接口及对应的实现类和.xml文件,用以实现我们需要的增删改查功能。
DeptMapper.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">
<!-- namespaces属性将xml文件和接口关联 -->
<mapper namespace="com.hrms.mapper.DeptMapper">
<select id="queryAll" resultType="com.hrms.entity.Dept">
select * from dept
</select>
</mapper>
接着我们可以对配置文件进行优化:
在mybatis-config.xml文件中:
<typeAliases>
<package name="包的路径名"/>
<!-- 或者 <typeAlias type="包的路径名" alias="Dept"/>-->
</typeAliases>
接着可以配置日志信息:
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
那么在DeptMapper.xml文件当中就可以对返回值进行优化:
直接改为Dept即可
这里需要注意的是,如果发现执行结果出现id为0,name为null的情况,可能是与数据库表当中的列命名不符,需要更改select 列id名 as id,列name名 as deptName,remark form dept(不需要分号)
三、测试
一切准备妥当之后,我们测试一下:
public class App
{
public static void main( String[] args ) throws IOException {
//加载核心配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactory
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//得到SqlSession
SqlSession sqlSession=sessionFactory.openSession();
//得到mapper实现类
DeptMapper mapper=sqlSession.getMapper(DeptMapper.class);
List<Dept> list =mapper.queryAll();
for (Dept dept : list) {
System.out.println(dept);
}
}
}
请注意,本文仅展示了初步的操作,没有揭露后续的增删改查的封装操作。同时,需要明白框架本身的定义是一个半成品,是辅助和简化操作的工具。