写点什么

【JavaWeb】 Mybatis-02-Mybatis 的快速入门

作者:游坦之
  • 2022-11-27
    山东
  • 本文字数:3083 字

    阅读完需:约 10 分钟

写在前言

mybatis 里面的配置文件是如何联系的

这是我第二次学习 mybatis 的理解,我理解的和如下图,config 包含了数据库的配置,以及 mappers,通过 mappers 可以找到各类 Mapper,这样就把配置文件,联系了起来。


Mybatis 连接数据库与 JDBC 连接数据库

JDBC 的工作原理


  • DriverManager 工具类,用于管理驱动,可以获取数据库的链接

  • Connection 表示 Java 与数据库建立的连接对象(接口)

  • PreparedStatement 发送 SQL 语句的工具

  • ResultSet 结果集,用于获取查询语句的结果

Mybaties 连接数据库的原理

1、新建一个 Maven 项目

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路(classpath)中即可。或者是利用 Maven 导入依赖(坐标),我们选择后者,所以要新建一个 Maven 项目。


2、配置 pom.xml

要使用 Mybatis,需要导入 Mybatis 的依赖。


<dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>x.x.x</version></dependency>
复制代码


为了简便开发,我们还引入了 Lombok,具体代码如下


<?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>com.you</groupId> <artifactId>Mybatis-demo-01</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!--导入Mybatis的依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!--引入Lombok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency> <!--引入mysql的依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> </dependencies>
</project>
复制代码


如果左侧的 Maven 中没有显示依赖,就点击刷新按钮,刷新一下!



然后就可以看到依赖被导入进来


3、Xml 配置文件

XML 配置文件中包含了对 MyBatis 系统的核心加粗样式设置,包括获取数据库连接实例数据源(DataSource)以及决定事务作用域控制方式事务管理器(TransactionManager)。

1)写一个 mybatis-config.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"><configuration>    <environments default="development">        <environment id="development">            <transactionManager type="JDBC"/>            <dataSource type="POOLED">                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://localhost:3306/dp83?useSSL=false&amp;serverTimezone=UTC"/>                <property name="username" value="root"/>                <property name="password" value="200201203332"/>            </dataSource>        </environment>    </environments>    <mappers>        <mapper resource="DeptMapper.xml"/>    </mappers></configuration>
复制代码



当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。 注意 XML 头部的声明,它用来验证 XML 文档的正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。

2)编写一个 Mapper.xml 配置文件

由上可知,Mapper.xml 是用来映射 sql 语句的文件



<?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="test">    <select id="queryAll" resultType="com.you.pojo.Dept">        select * from dept;     </select></mapper>
复制代码

命名空间

在之前版本的 MyBatis 中,命名空间(Namespaces)的作用并不大,是可选的。 但现在,随着命名空间越发重要,你必须指定命名空间。


命名空间的作用有两个:一个是利用更长的全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定。就算你觉得暂时用不到接口绑定,你也应该遵循这里的规定,以防哪天你改变了主意。 长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。


命名空间也可以解决 id 重复的问题,比如 UserMapper 和 DeptMapper 都有一个查询全部语句的 sql 名叫 queryAll,通过命名空间我就可以对相同的 id 进行区别。

什么是全限定名

  • 全限定名(比如 “com.mypackage.MyMapper.selectAllThings)将被直接用于查找及使用。

  • 短名称(比如 “selectAllThings”)如果全局唯一也可以作为一个单独的引用。 如果不唯一,有两个或两个以上的相同名称(比如“com.foo.selectAllThings” 和“com.bar.selectAllThings”),那么使用时就会产生“短名称不唯一”的错误,这种情况下就必须使用全限定名。


也就是说在接口绑定的时候,我既可以用全限定名,也可以使用短名称,但如果短名称不唯一的话,那么我只能使用全限定名,所以为了不出错,你也可以选择全部使用全限定名。

3)编写实体类

由于 Mapper.xml 的返回类型用到了实体类,所以需要写一个实体类 Dept。新建一个实体类 Dept



package com.you.pojo;
import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import lombok.ToString;
@Data@ToString@NoArgsConstructor@AllArgsConstructorpublic class Dept { private Integer deptno; private String deptname; private String dp_source;
}
复制代码

4、编写启动类

编写一个启动类 MybatisRun



package com.you;
import com.you.pojo.Dept;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;import java.io.InputStream;import java.util.List;
public class MybatisRun { public static void main(String[] args) { String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStream(resource); } catch (IOException ioException) { ioException.printStackTrace(); } SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(); /* 执行sql语句 */ List<Dept> list = sqlSession.selectList("test.queryAll"); for (Dept dept : list) { System.out.println(dept); } }}
复制代码


用户头像

游坦之

关注

还未添加个人签名 2022-10-14 加入

还未添加个人简介

评论

发布
暂无评论
【JavaWeb】 Mybatis-02-Mybatis的快速入门_mybatis_游坦之_InfoQ写作社区