搭建框架

创建 Maven 工程

1、打包方式:jar

<packaging>jar</packaging>

2、引入依赖

<dependencies>
    <!-- Mybatis核心 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.10</version>
    </dependency>

    <!-- junit5测试 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>

    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>
    
</dependencies>

 

创建 MyBatis 核心配置文件

1、习惯命名:mybatis-config.xml(建议,非强制要求)

2、整合 Spring 后,核心配置文件可以省略

3、作用:配置连接数据库的环境,MyBatis 全局配置信息

4、存放位置:src\main\resources

<?xml version="1.0" encoding="UTF-8" ?>
<!-- xml声明:版本号、编码 -->

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- dtd约束,DOCTYPE 表示 configuration 为根标签 -->

<!-- configuration 根标签 -->
<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://ip地址:端口号/数据库名称"/>
                <property name="username" value="用户名"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 引入映射文件,以目录路径形式,非包路径 -->
    <mappers>
        <mapper resource="映射文件路径"/>
    </mappers>
</configuration>

 

创建 POJO

1、创建 private 实体类的属性,对应表的字段

2、提供 get()、set() 方法

 

创建 Mapper 接口

1、MyBatis 中的 mapper 接口等价于 DAO

2、区别:mapper 只是接口,不需要提供实现类

3、命名:表所对应实体类的类名 + Mapper

4、作用:面向接口编程,调用接口方法,自动匹配、执行 SQL 语句

 

创建 MyBatis 映射文件

1、ORM:Object Relationship Mapping,对象关系映射

(1)对象:Java 实体类对象

(2)关系:关系型数据库

(3)映射:二者之间的对应关系

Java 数据库
属性 字段 / 列
对象 记录 / 行

2、映射文件

(1)命名规则:表所对应实体类的类名 + Mapper.xml

(2)一个映射文件对应一个实体类,对应一张表的操作

(3)作用:编写 SQL,访问、操作表中的数据

(4)存放位置:src\main\resources\mappers

3、MyBatis 面向接口操作数据,要保证两个一致

(1)mapper 接口的全类名,和映射文件的命名空间(namespace)保持一致

(2)mapper 接口的方法名,和映射文件中编写 SQL 的标签的 id 属性保持一致

<?xml version="1.0" encoding="UTF-8" ?>
<!-- dtd约束,DOCTYPE 表示 mapper 为根标签-->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper接口全类名">
    <!-- 此处填入方法,以便确定返回类型、形参列表 -->
    <insert id="mapper接口方法名">插入SQL语句</insert>
</mapper>

(3)<select></select> 查询 SQL 语句必须设置 resultType 或 resultMap,值为 POJO 全类名,否则 MyBatis 执行完成 SQL 语句后,不能把结果集转换为对应的 POJO

(4)resultType:设置默认的映射关系

(5)默认映射:用于结果集的字段 / 列,与 POJO 属性匹配,当设置 POJO 后,查询结果集中的字段 / 列,自动赋值到 POJO 中的属性,可以匹配,则赋值;不能匹配,则不赋值

(6)resultMap:设置自定义的映射关系

(7)自定义映射:用于结果集的字段 / 列,与 POJO 属性不匹配;一对多、多对一的关系

 

通过 junit 测试功能

public void test() throws IOException {
    /*
        读取MyBatis的核心配置文件
        以文件方式:以getResourceAsFile()
        以Properties方式:getResourceAsProperties()
        以字符流方式:getResourceAsReader()
        以字节流方式:getResourceAsStream()
    */
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    //获取SqlSessionFactoryBuilder对象
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    //通过核心配置文件,所对应的字节输入流,创建工厂类SqlSessionFactory,生产SqlSession对象
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
    /*
        获取sqlSession
        默认手动提交或回滚事务:SqlSession sqlSession = sqlSessionFactory.openSession();
        设置自动提交事务:SqlSession sqlSession = sqlSessionFactory.openSession(true);
    */
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //通过代理模式,创建Mapper接口的代理实现类对象
    Mapper mapper = sqlSession.getMapper(Mapper.class);
    //调用Mapper接口中的方法,根据Mapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
    int result = Mapper.insert();
    //因为<transactionManager type="JDBC"/>,所以需要手动提交事务
    sqlSession.commit();
    System.out.println("result:" + result);
}

1、SqlSession:代表 Java 程序和数据库之间的会话(HttpSession 是 Java 程序和浏览器之间的会话)

2、SqlSessionFactory:生产 SqlSession 的工厂

3、增、删、改返回值可以为 void,也可以为 int

4、查询的返回值必须为对应 POJO,当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常 TooManyResultsException;若查询的数据只有一条,可以使用实体类或集合作为返回值

5、优化

(1)获取 SqlSession 时,设置自动提交事务:SqlSession sqlSession = sqlSessionFactory.openSession(true);

(2)加入 log4j 日志功能

<!-- 加入log4j依赖 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<!--
    加入log4j的配置文件
    文件名:log4j.xml
    存放位置:src/main/resources
    日志级别:FATAL(致命)> ERROR(错误)> WARN(警告)> INFO(信息)> DEBUG(调试);从左至右,级别越低,内容越详细(包含本身和级别高的所有信息)
    http://jakarta.apache.org/log4j/ 提示错误,不影响log4j日志功能使用
-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>
posted @   半条咸鱼  阅读(90)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示