mybatis入门的环境搭建及快速完成CRUD(增删改查)

这篇具有很好参考价值的文章主要介绍了mybatis入门的环境搭建及快速完成CRUD(增删改查)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

                                                 

                                                                                      又是爱代码的一天 

一、MyBatis的介绍

( 1 ) 背景

MyBatis 的背景可以追溯到 2002 年,当时 Clinton Begin 开发了一个名为 iBATIS 的持久化框架。iBATIS 的目标是简化 JDBC 编程,提供一种更直观、易用的方式来处理数据库操作。

 

在传统的 JDBC 编程中,开发人员需要手动编写大量的重复代码,如连接数据库、创建 Statement、执行 SQL 语句、处理结果集等。这些繁琐的操作不仅增加了开发的工作量,还使代码难以维护和理解。iBATIS 通过提供一个简单易用的 API,封装了这些繁琐的操作,使得开发人员可以更专注于业务逻辑的实现。

iBATIS 的核心思想是将 SQL 语句与 Java 代码分离,使用 XML 或注解的方式来定义和管理 SQL。这样一来,SQL 语句可以更方便地修改和维护,而且可以与 Java 代码解耦,提高了代码的可读性和可维护性

随着时间的推移,iBATIS 被越来越多的开发人员所接受和使用。然而,iBATIS 的发展也面临一些挑战。比如,它的命名规范和配置方式相对复杂,不够直观;它对动态 SQL 的支持有限,不够灵活;它的插件机制不够完善,无法满足一些特定的需求。

为了解决这些问题,iBATIS 在 2010 年更名为 MyBatis,并进行了一系列的改进和扩展。MyBatis 在保留了 iBATIS 的优点的基础上,进一步增强了灵活性、可维护性和可扩展性。

MyBatis 提供了丰富的映射方式,可以将查询结果映射为 Java 对象、Map、基本类型等。它支持动态 SQL,可以根据条件动态拼接 SQL 语句,提高查询的灵活性和效率。同时,MyBatis 还提供了插件机制,开发人员可以根据实际需求编写插件,实现自己的业务逻辑。

除了 MyBatis 核心框架,还有一些扩展工具出现,进一步增强了 MyBatis 的功能和易用性。比如,MyBatis-Plus 提供了更多的 CRUD 操作和查询功能,简化了开发人员的工作;MyBatis Generator 可以根据数据库表结构自动生成代码;MyBatis Spring Boot Starter 则用于简化 MyBatis 在 Spring Boot 中的集成。

总之,MyBatis 的发展背景可以看作是对传统 JDBC 编程的一种改进和优化,它通过简化、灵活和可扩展的特性,使得开发人员可以更轻松地处理数据库操作,提高开发效率和代码质量

MyBatis 的发展背景主要有以下几个方面:

  1. 简化 JDBC 编程:在使用 JDBC 进行数据库操作时,需要手动编写大量的重复代码,如连接数据库、创建 Statement、执行 SQL 语句、处理结果集等。MyBatis 通过提供一个简单易用的 API,将这些繁琐的操作封装起来,使得开发人员可以更专注于业务逻辑的实现

  2. 提高 SQL 的可维护性:在传统的数据库开发中,SQL 语句通常散布在 Java 代码中,导致代码的可读性和可维护性较差。MyBatis 通过将 SQL 语句与 Java 代码分离,使用 XML 或注解的方式来定义和管理 SQL,使得 SQL 语句可以更方便地修改和维护

  3. 支持灵活的映射方式:MyBatis 提供了多种映射方式,可以将查询结果映射为 Java 对象、Map、基本类型等。开发人员可以根据实际需求选择不同的映射方式,灵活地处理不同的数据结构

  4. 支持动态 SQL:MyBatis 具有强大的动态 SQL 功能,可以根据条件动态拼接 SQL 语句。这使得开发人员可以根据不同的查询条件生成不同的 SQL,提高查询的灵活性和效率

  5. 可扩展性:MyBatis 提供了丰富的插件机制,可以通过自定义插件来扩展和定制框架的功能。开发人员可以根据实际需求编写插件,实现自己的业务逻辑

( 2 ) 是什么

  • MyBatis 是一个开源的持久化框架,用于简化 Java 应用程序与关系型数据库的交互。它提供了一种将 SQL 语句与 Java 代码解耦的方式,通过 XML 文件或注解来定义和管理 SQL,使得开发人员可以更方便地进行数据库操作。
  • MyBatis 的核心思想是将 SQL 语句与 Java 对象之间的映射关系定义在 XML 文件或注解中,通过执行 SQL 语句来操作数据库并将结果映射为 Java 对象。开发人员只需要编写简单的 SQL 语句和相应的映射配置,MyBatis 就可以自动完成数据库的访问和结果的映射,大大简化了数据库操作的编码工作。
  • MyBatis 提供了丰富的映射方式,可以将查询结果映射为 Java 对象、Map、基本类型等。它支持常见的 CRUD 操作(增删改查),同时还提供了动态 SQL 的支持,可以根据条件动态拼接 SQL 语句。此外,MyBatis 还提供了插件机制,可以通过编写插件来扩展和增强 MyBatis 的功能。

( 3 ) 作用

MyBatis 的主要作用是简化 Java 应用程序与关系型数据库的交互,提供了一种将 SQL 语句与 Java 代码解耦的方式,使得开发人员可以更方便地进行数据库操作。以下是 MyBatis 的主要作用:

  • 1. 数据库访问:MyBatis 提供了简洁的 API,封装了繁琐的 JDBC 操作,使得开发人员可以更专注于业务逻辑的实现。通过编写 SQL 语句和相应的映射配置,MyBatis 可以自动完成数据库的访问和结果的映射。
  • 2. SQL 映射:MyBatis 支持将查询结果映射为 Java 对象、Map、基本类型等。开发人员可以通过编写 XML 文件或注解来定义和管理 SQL 语句与 Java 对象之间的映射关系,使得数据库操作更加灵活和易于维护。
  • 3. 动态 SQL:MyBatis 支持动态 SQL,可以根据条件动态拼接 SQL 语句。开发人员可以通过条件判断、循环和迭代等方式灵活组合 SQL 片段,实现动态的查询和更新操作,提高查询的灵活性和效率。
  • 4. 事务管理:MyBatis 提供了事务管理的支持,可以通过配置来管理事务的提交、回滚和隔离级别。开发人员可以使用 MyBatis 提供的事务管理功能来确保数据库操作的一致性和完整性。
  • 5. 插件扩展:MyBatis 提供了插件机制,开发人员可以编写插件来扩展和增强 MyBatis 的功能。通过插件机制,可以在 SQL 执行前后进行拦截和增强,实现自定义的业务逻辑,例如日志记录、缓存处理等。

总之,MyBatis 主要用于简化数据库操作,提供了灵活的 SQL 映射和动态 SQL 支持,使得开发人员可以更轻松地进行数据库访问和操作。同时,MyBatis 还提供了事务管理和插件扩展等功能,满足不同的业务需求

二、MyBatis环境搭建

创建一个maven项目,名为:mybatis

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat 

 

   可以根据本人的项目结构进行创建包(比较规范),当然也可以根据自己的习惯进行修改 

 2.1 pom.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>

2.2 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

其中47.100.191.44是连接名称,mybatis_ssm是里面的数据库,username,password就是

连接的账号及密码。

2.3 web.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>

2.4 插件下载

想更好的了解这些插件可以: 点击此处

下载这些插件前都需要先选中File,之后再点击Settings,进入到以下界面:

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat

2.4.1 Free mybatis plugin

在输入框里面输入关键字即可,找到MyBatisX后点击install进行插件下载,如图:

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat

 

2.4.2 Mybatis generator

输入关键字,找到Mybatis generator点击install进行插件下载,如图:

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat 

2.4.3 mybatis tools

输入关键字,找到mybatis tools点击install进行插件下载,如图:

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat

 

2.4.4 maven helper

输入关键字,找到maven helper点击install进行插件下载,如图:

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat

这个插件的作用是查看项目里面引用的所有引用文件,由引用冲突还可以进行解决

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat

 

                     下载安装这些插件后,需要idea重启才能进行使用

 2.5 mybatis.cfg.xml

在resources文件中创建mybatis.cfg.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>
    <!-- 引入外部配置文件 -->
    <properties resource="jdbc.properties"/>

    <settings>
        <setting name="logImpl" value="LOG4J2"/>
    </settings>

    <!-- 别名 -->
    <typeAliases>
        <!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>-->
    </typeAliases>

    <!-- 配置mybatis运行环境 -->
    <environments default="development">
        <environment id="development">
            <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
            <transactionManager type="jdbc"/>

            <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- UNPOOLED 表示不支持数据源连接池 -->
            <!-- JNDI 表示支持外部数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver"
                          value="${jdbc.driver}"/>
                <property name="url"
                          value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/CloudJun/mapper/BookMapper.xml"/>
    </mappers>
</configuration>

三、MyBatis的CRUD

3.1 generatorConfig.xml

在resources文件中创建generatorConfig.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <!-- 引入配置文件 -->
    <properties resource="jdbc.properties"/>

    <!--指定数据库jdbc驱动jar包的位置-->
    <classPathEntry location="D:\\temp\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>

    <!-- 一个数据库一个context -->
    <context id="infoGuardian">
        <!-- 注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
            <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
        </commentGenerator>

        <!-- jdbc连接 -->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 01 指定javaBean生成的位置 -->
        <!-- targetPackage:指定生成的model生成所在的包名 -->
        <!-- targetProject:指定在该项目下所在的路径  -->
        <javaModelGenerator targetPackage="com.CloudJun.model"
                            targetProject="src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否对model添加构造函数 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
            <property name="trimStrings" value="false"/>
            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!-- 02 指定sql映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.CloudJun.mapper"
                         targetProject="src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 03 生成XxxMapper接口 -->
        <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
        <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
        <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
        <javaClientGenerator targetPackage="com.CloudJun.mapper"
                             targetProject="src/main/java" type="XMLMAPPER">
            <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 配置表信息 -->
        <!-- schema即为数据库名 -->
        <!-- tableName为对应的数据库表 -->
        <!-- domainObjectName是要生成的实体类 -->
        <!-- enable*ByExample是否生成 example类 -->
        <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
        <!--enableCountByExample="false" enableDeleteByExample="false"-->
        <!--enableSelectByExample="false" enableUpdateByExample="false">-->
        <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
        <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
        <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
        <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
        <!--</table>-->

        <table schema="" tableName="t_mvc_book" domainObjectName="Book"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false">
            <!-- 忽略列,不生成bean 字段 -->
            <!-- <ignoreColumn column="FRED" /> -->
            <!-- 指定列的java数据类型 -->
            <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> -->
        </table>

    </context>
</generatorConfiguration>

注意点: 

1 、

<!--指定数据库jdbc驱动jar包的位置--> <classPathEntry location="D:\\temp\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>

location的目录

这里的jar包目录是你本地下载maven引用文件的地址

在里面查找mysql-connector-java-5.1.44.jar的文件

2、

<!-- targetProject:指定在该项目下所在的路径 -->

<javaModelGenerator targetPackage="com.CloudJun.model" targetProject="src/main/java">

targetPackage中的字符串

这里要将指定生成的model在该项目中的指定包名,如果没有该包会自动创建

3、

<!-- 02 指定sql映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.CloudJun.mapper" targetProject="src/main/java"> <!-- 是否允许子包,即targetPackage.schemaName.tableName --> <property name="enableSubPackages" value="false"/> </sqlMapGenerator>

targetPackage的字符串

这里是你想将要生成的Sql映射文件放到哪个包下,如果没有该包会自动创建

4、

<!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 --> <javaClientGenerator targetPackage="com.CloudJun.mapper" targetProject="src/main/java" type="XMLMAPPER"> <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] --> <property name="enableSubPackages" value="false"/> </javaClientGenerator>

targetPackage中的字符串

这里是你想将要生成的独立的Mapper接口放到哪个包下,如果没有该包会自动创建

5、

<table schema="" tableName="t_mvc_book" domainObjectName="Book" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false"> <!-- 忽略列,不生成bean 字段 --> <!-- <ignoreColumn column="FRED" /> --> <!-- 指定列的java数据类型 --> <!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> --> </table>

tableName中的字符串

这里是填写要自动生成的实体类对哪个数据表进行创建实体(对象)

 domainObjectName 是要生成的实体名称

如果想创建多个只需复制这段在进行粘贴

修改其中的数据表名称及实体类名称即可

在这里配置完成之后就可以自动生成增删改查的代码了

打开右侧的Maven点击我们引用的插件进行双击后将自动生成

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat

   注意: 需要选中本次创建的项目进行查找该架包

3.2 BookService

创建BookService这个工具类:进行数据库访问以及SqlSession的赋值

package com.CloudJun.utils;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * @author CloudJun
 * @create  2023-08-19 20:36
 */
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());
    }
}

3.3 接口及实现类

BookBiz接口

package com.CloudJun.biz;

import com.CloudJun.model.Book;
/**
 * @author CloudJun
 * @create  2023-08-19 20:40
 */
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);
}

BookBizImpl实现类

package com.CloudJun.biz.impl;

import com.CloudJun.biz.BookBiz;
import com.CloudJun.mapper.BookMapper;
import com.CloudJun.model.Book;

/**
 * @author CloudJun
 * @create  2023-08-19 20:41
 */
public class BookBizImpl implements BookBiz {

    private BookMapper bookMapper;

    public BookMapper getBookMapper() {
        return bookMapper;
    }
    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    @Override
    public int deleteByPrimaryKey(Integer bid) {
        return bookMapper.deleteByPrimaryKey(bid);
    }

    @Override
    public int insert(Book record) {
        return bookMapper.insert(record);
    }

    @Override
    public int insertSelective(Book record) {
        return bookMapper.insertSelective(record);
    }

    @Override
    public Book selectByPrimaryKey(Integer bid) {
        return bookMapper.selectByPrimaryKey(bid);
    }

    @Override
    public int updateByPrimaryKeySelective(Book record) {
        return bookMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(Book record) {
        return bookMapper.updateByPrimaryKey(record);
    }
}

3.4 log4j2.xml

在resources文件中创建log4j2.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!-- status : 指定log4j本身的打印日志的级别.ALL< Trace < DEBUG < INFO < WARN < ERROR 
	< FATAL < OFF。 monitorInterval : 用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s. -->
<Configuration status="WARN" monitorInterval="30">
	<Properties>
		<!-- 配置日志文件输出目录 ${sys:user.home} -->
		<Property name="LOG_HOME">/root/workspace/lucenedemo/logs</Property>
		<property name="ERROR_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/error</property>
		<property name="WARN_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/warn</property>
		<property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n</property>
	</Properties>

	<Appenders>
		<!--这个输出控制台的配置 -->
		<Console name="Console" target="SYSTEM_OUT">
			<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="trace" onMatch="ACCEPT"
				onMismatch="DENY" />
			<!-- 输出日志的格式 -->
			<!-- %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间 %p : 日志输出格式 %c : logger的名称 
				%m : 日志内容,即 logger.info("message") %n : 换行符 %C : Java类名 %L : 日志输出所在行数 %M 
				: 日志输出所在方法名 hostName : 本地机器名 hostAddress : 本地ip地址 -->
			<PatternLayout pattern="${PATTERN}" />
		</Console>

		<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
		<!--append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
		<File name="log" fileName="logs/test.log" append="false">
			<PatternLayout
				pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
		</File>
		<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size, 则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
		<RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log"
			filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<ThresholdFilter level="info" onMatch="ACCEPT"
				onMismatch="DENY" />
			<PatternLayout
				pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
			<Policies>
				<!-- 基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour。 modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am. -->
				<!-- 关键点在于 filePattern后的日期格式,以及TimeBasedTriggeringPolicy的interval, 日期格式精确到哪一位,interval也精确到哪一个单位 -->
				<!-- log4j2的按天分日志文件 : info-%d{yyyy-MM-dd}-%i.log -->
				<TimeBasedTriggeringPolicy interval="1"
					modulate="true" />
				<!-- SizeBasedTriggeringPolicy:Policies子节点, 基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小. -->
				<!-- <SizeBasedTriggeringPolicy size="2 kB" /> -->
			</Policies>
		</RollingFile>

		<RollingFile name="RollingFileWarn" fileName="${WARN_LOG_FILE_NAME}/warn.log"
			filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
			<ThresholdFilter level="warn" onMatch="ACCEPT"
				onMismatch="DENY" />
			<PatternLayout
				pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
			<Policies>
				<TimeBasedTriggeringPolicy />
				<SizeBasedTriggeringPolicy size="2 kB" />
			</Policies>
			<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
			<DefaultRolloverStrategy max="20" />
		</RollingFile>

		<RollingFile name="RollingFileError" fileName="${ERROR_LOG_FILE_NAME}/error.log"
			filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log">
			<ThresholdFilter level="error" onMatch="ACCEPT"
				onMismatch="DENY" />
			<PatternLayout
				pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
			<Policies>
				<!-- log4j2的按分钟 分日志文件 : warn-%d{yyyy-MM-dd-HH-mm}-%i.log -->
				<TimeBasedTriggeringPolicy interval="1"
					modulate="true" />
				<!-- <SizeBasedTriggeringPolicy size="10 MB" /> -->
			</Policies>
		</RollingFile>

	</Appenders>

	<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
	<Loggers>
		<!--过滤掉spring和mybatis的一些无用的DEBUG信息 -->
		<logger name="org.springframework" level="INFO"></logger>
		<logger name="org.mybatis" level="INFO"></logger>

		<!-- 第三方日志系统 -->
		<logger name="org.springframework" level="ERROR" />
		<logger name="org.hibernate" level="ERROR" />
		<logger name="org.apache.struts2" level="ERROR" />
		<logger name="com.opensymphony.xwork2" level="ERROR" />
		<logger name="org.jboss" level="ERROR" />


		<!-- 配置日志的根节点 -->
		<root level="all">
			<appender-ref ref="Console" />
			<appender-ref ref="RollingFileInfo" />
			<appender-ref ref="RollingFileWarn" />
			<appender-ref ref="RollingFileError" />
		</root>

	</Loggers>

</Configuration>

3.5 测试类

创建一个Demo进行方法测试

package com.CloudJun.Demo;

import com.CloudJun.biz.BookBiz;
import com.CloudJun.biz.impl.BookBizImpl;
import com.CloudJun.mapper.BookMapper;
import com.CloudJun.model.Book;
import com.CloudJun.utils.SessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * @author CloudJun
 * @create  2023-08-19 20:36
 */
public class Demo {

    private SqlSession sqlSession;
    private BookBiz bookBiz;

    @Before
    public void Before(){
        System.out.println("方法执行前会调用(有些像前置通知的意思)");
        //数据库的连接及bookBiz的赋值
        sqlSession = SessionUtil.openSession();
        BookBizImpl bookBiz = new BookBizImpl();
        BookMapper mapper = sqlSession.getMapper(BookMapper.class);
        bookBiz.setBookMapper(mapper);
        this.bookBiz = bookBiz;
    }

    @After
    public void After(){
        System.out.println("方法执行后会调用(有些像后置通知的意思)");
        sqlSession.commit();//事务的提交
    }


    @Test
    public void text(){
        System.out.println("方法测试");
        Book book = bookBiz.selectByPrimaryKey(30);
        System.out.println(book);

    }

    @Test
    public void del(){
        bookBiz.deleteByPrimaryKey(28);
    }



}

执行其中的text查看方法,测试结果:

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat

执行其中的del删除方法,之后我们查看数据库,测试结果: 

mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat

 

给我们带来的收获

学习 MyBatis 后,你可以获得以下收获:

  • 1. 提高数据库操作效率:MyBatis 封装了繁琐的 JDBC 操作,提供了简洁的 API,使得数据库操作更加方便和高效。你可以通过 MyBatis 快速编写和执行 SQL 语句,减少了手动编写和管理 SQL 的工作量,提高了数据库操作的效率。
  • 2. 简化开发流程:MyBatis 的 SQL 映射方式将 SQL 语句与 Java 代码解耦,使得开发人员可以更专注于业务逻辑的实现。你可以通过编写 XML 文件或注解来管理 SQL 语句与 Java 对象之间的映射关系,简化了开发流程,提高了开发效率。
  • 3. 提高代码质量:MyBatis 的 SQL 映射方式和动态 SQL 支持使得数据库操作更加灵活和易于维护。你可以根据业务需求动态拼接 SQL 语句,减少了冗余代码的编写。同时,通过将 SQL 语句和 Java 代码解耦,你可以更好地组织和管理代码,提高了代码的可读性和可维护性。
  • 4. 增强功能扩展能力:MyBatis 提供了插件机制,你可以编写插件来扩展和增强 MyBatis 的功能。通过插件机制,你可以在 SQL 执行前后进行拦截和增强,实现自定义的业务逻辑。这使得你可以根据具体需求扩展 MyBatis 的功能,满足特定的业务需求。
  • 5. 掌握常用持久化框架:MyBatis 是目前广泛使用的 Java 持久化框架之一,学习 MyBatis 可以帮助你掌握常用的持久化框架。这对于从事 Java 后端开发的人员来说是一项重要的技能,能够提升你的就业竞争力。

 

总之,学习 MyBatis 可以带给你数据库操作效率的提升、开发流程的简化、代码质量的提高、功能扩展能力的增强,同时也能够掌握常用的持久化框架,为你的职业发展带来积极的影响

 mybatis入门的环境搭建及快速完成CRUD(增删改查),mybatis,java,开发语言,intellij-idea,maven,tomcat文章来源地址https://www.toymoban.com/news/detail-667460.html

到了这里,关于mybatis入门的环境搭建及快速完成CRUD(增删改查)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第一个mybatis程序,实现增删改查CRUD

    mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了googlecode,并且改名为MyBatis,2013年11月迁移到Github。 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可

    2024年02月02日
    浏览(40)
  • Mybatis方式完成CRUD操作

    Java开发在以前做数据库连接的时候通过JDBC来完成,非常麻烦。 现在引入了MyBatis这个框架,Mybatis是简化数据库操作的持久层框架。 使用Mybatis的好处: mybatis 可以将对数据表的操作(sql,方法)等等直接剥离,写到 xml 配置文件,实现和 java 代码的解耦 MyBatis 在 java 和 sql 之间提

    2024年02月05日
    浏览(49)
  • mybatis实现CRUD详解(使用mapper映射文件实现增删改查)

    创建maven项目:项目结构如图所示 准备数据库表: 准备pom.xml所需的依赖: 编写核心配置文件加载所需要的资源 编写config.xml文件 创建工厂连接数据处理工具SqlSessionUtil.java SqlSessionUtil.java 创建学生实体类对象Student.java 1、查询所有学生信息: 创建接口StudentDao.java:向其中添加

    2023年04月23日
    浏览(43)
  • Spring与Mybatis集成且Aop整合(放飞双手,迅速完成CRUD及分页)

    目录  一、概述 二、集成 ( 1 ) 为什么 ( 2 ) 优点 ( 3 ) 实例 三、整合 3.1 讲述 3.2 整合进行分页 带我们带来的收获 集成是指将不同的组件、系统或框架整合在一起,使它们能够协同工作,共同完成某个功能或提供某种服务。在软件开发中,集成通常指的是将多个独立的模块或

    2024年02月11日
    浏览(59)
  • MyBatis入门配置及CRUD实现

    目录 一、MyBatis简介 1. 什么是 MyBatis ?  2. MyBatis的特性 3. 什么是持久层框架? 二、MyBatis环境配置 2.1 创建maven工程 2.2 导入相关pom依赖 2.3 导入jdbc配置文件 2.4 Mybatis相关插件安装 3.5 Mybatis-cfg.xml 核心配置 2.6 引入Log4j2日志文件 2.7 generatorConfig.xml 配置代码生成器 三、MyBatis实现

    2024年02月09日
    浏览(48)
  • Mybatis-Plus详解(新建maven项目、查询所有信息、打印SQL日志、实现CRUD(增删改查)、分页、条件查询且分页,前后端分离式开发)

    MyBatis-Plus(opens new window) (简称MP) 是一个MyBatis(opens new window)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。想查看官网相关内容的化我这里提供了官网地址:https://baomidou.com/ 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般

    2024年02月04日
    浏览(71)
  • 从零开始快速搭建SpringBoot+Mybatis+小程序应用--微信小程序的入门和前后端的联调

    目录 项目介绍  vx小程序简介 VX开发工具介绍 列表页开发 list的编写   列表页前后端联调  信息编辑页开发 operation的编写 区域信息编辑页的联调 从0搭建后端的Springboot+mybatis框架 实现后端的业务功能 实现本地微信小程序的前端开发 前端与后端的调控 技术储备要求 1.基础的

    2024年02月10日
    浏览(68)
  • [Spring Boot 4]若依框架与快速搭建CRUD模板

    若依框架,当下快速构建项目的框架,非常好用,特别是代码生成部分,对增删改查起到了很好的帮助。 若依框架很值得学习,这个是Spring boot版的管理系统,用的技术不是太多同时对新手非常友好,基本上就是spring boot + bootstrap来进行搭建的。 后面还得分析分析这个若依框

    2024年02月09日
    浏览(42)
  • Mybatis从入门到CRUD到分页到日志到Lombok到动态SQL再到缓存

    1.导入maven依赖 2.配置核心文件 3.从 XML 中构建 SqlSessionFactory 编写mybatis工具类 dao接口 接口实现类由原来的UserDaolmpl转变为-一个Mapper配置文件. 测试 测试二 select insert update dalete 创建实体类 编写接口 编写对应sql语句 测试 万能map Map传递参数,直接在sq|中取出key即可! [parameterT

    2024年03月08日
    浏览(50)
  • golang—kafka架构原理快速入门以及自测环境搭建(docker单节点部署)

    Apache Kafka 是一个分布式的流处理平台。它具有以下特点: 支持消息的发布和订阅,类似于 RabbtMQ、ActiveMQ 等消息队列 支持数据实时处理 能保证消息的可靠性投递 支持消息的持久化存储,并通过多副本分布式的存储方案来保证消息的容错 高吞吐率,单 Broker 可以轻松处理数千

    2024年02月04日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包