提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
MyBatis 开发环境配置
1.MyBatis 概述
1.1 MyBatis特点
- 半自动ORM(Object Relation Mapping)框架,对比Hibernate全自动,MyBatis的sql语句还是要求自己写,效率不如Hibernate(也不一定)但是性能提高
- 用简单的xml或者注解来配置接口以及pojo与数据库记录的对应关系
- 支持定制化sql,存储过程以及高级映射
- 避免了JDBC的繁琐代码
1.2 Mybatis开发环境配置以及项目创建
MyBatis下载链接,下载zip包即可,里面包含pdf文档,其中一部分介绍了环境配置。
Mybatis 在ssm可以大致概括为JDBC的封装,是对数据库进行CRUD操作。这里主要采用的是Maven项目的方式,当然你可以单独导入jar包,但是Maven无论是管理还是下载都更为方便。
- Maven项目创建
新建Maven项目,Archetype选择quickstart,我初始创建出来的目录是这样的,缺少resource 资源文件,分别为其创立resource资源文件即可。方法为点击main->新建目录->命名resources->标记为resources资源文件。第四步如果是idea,可能会有提示。若没有或者错过,单击新创建的resources->右击选择将目录标记为->资源根目录。测试资源文件同理。若没有出现java目录,也可以同样的方法标记为源代码根目录和测试源代码根目录
- 环境配置
创建好了maven项目,就需要配置Mybatis所需要的环境依赖,主要是配置文件pom.xml
在dependencies标签中加入所需要的依赖,这里主要包括数据库核心,
以下仅供参考,具体的版本以及数据库驱动配置根据自己情况而定。
<dependencies>
<!-- mybatis 核心-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<!--junit 核心-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
<!-- mysql 核心-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!-- log4j 日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
到这里,一个MyBatis大致的开发环境已经创建好了,接下来就是MyBatis中的具体配置。
2.MyBatis搭建
2.1 MyBatis核心配置文件mybatis-config.xml
- 配置文件习惯命名为mybatis-config,xml
- 核心配置用于连接数据库
- 放在src/main/resources/目录下
其中具体配置一开始可以参照官方pdf文档中Getting Started中2.1.2末尾的xml配置,其中包括数据库环境的配置以及映射文件(sql语句所在)的配置。如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
其中,environments主要是设置数据库环境,根据实际环境填入driver,url,username,pwd。mappers中主要包含映射文件配置。具体的标签含义以及作用后续将会详细介绍。
2.2 创建pojo(Plain Old Java Object)
pojo主要用来包含Java类,Java与数据库的对应关系为
Java | 数据库 |
---|---|
类 | 表 |
属性(get方法后的为属性名) | 列 |
一个类的实例对象 | 对应表中的一条记录 |
eg. 创建了User(用户)类,如上所述,数据库中也有相应的表,属性与列对应。
2.3 创建mapper接口
mapper接口相当于dao,是对数据库中表的操作的集合。
这一接口有一特点,不需要有实现类,只需要有操作方法即可,方法实现的sql语句在mapper.xml中配置(后续会介绍)
命名规范:与DAO相同,例如对User类的操作,命名为UserMapper
public interface UserMapper {
/*** 添加用户信息 */
int insertUserExample();
}
2.4 创建mapper映射文件
上面讲到mapper接口没有实现类,那他是如何对实现对数据库的操作呢,关键就在于mapper映射文件
mapper映射文件中包含了对对应类(表) 的sql语句
1、映射文件的命名规则:
表所对应的实体类的类名+Mapper.xml
例如:表user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据
MyBatis映射文件存放的位置是src/main/resources/mappers目录下
2、 MyBatis中可以面向接口操作数据,要保证两个一致:
* mapper接口的全类名和映射文件的命名空间(namespace)保持一致
* mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致
<?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="com.atguigu.mybatis.mapper.UserMapper"> <!--int insertUserExample();-->
<insert id="insertUser"> insert into t_user values(null,'root_1','123456',18,'男','12345123@qq.com')
</insert>
</mapper>
2.5 测试insertUserExample
在测试前,需要将UserMapper加入全局配置文件mybatis-config.xml
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
<mappers>
测试代码如下
//解析核心配置文件->SqlSessionFactoryBuilder->SqlSessionFactory->sqlSession->UserMapper实现类(通过解析UserMapper.xml得到)->执行Mapper中的方法
//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交(autoCommit设置为true)
SqlSession sqlSession = sqlSessionFactory.openSession(true); //通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配 映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUserExample();
System.out.println("结果:"+result);