首页 > 其他分享 >MyBatis入门使用

MyBatis入门使用

时间:2023-09-30 19:14:30浏览次数:28  
标签:入门 创建 UserMapper sqlSession user 使用 MyBatis log4j

概要

基于Java的持久层框架

MyBatis特征

1. 它是一个半自动的ORM框架。

2. 轻便、灵活;功能强大、使用简单、扩展性极强。

3. 支持定制化 SQL、存储过程以及高级映射。

4. 避免了几乎所有的 JDBC 代码和手工操作。

5. 可使用XML或注解将接口和 POJO映射成数据库中的记录。

ORM模型

  简单地说,ORM模型就是数据库的表与简单Java对象(Plain Ordinary Java Object,简称 POJO)的对象关系映射模型(Object Relational Mapping,简称ORM)。在该模型中,“对象”指的是Java的实体类对象,“关系”指的是关系型数据库(例如MySQL等),“映射”指的是两者之间的对应关系。在该“映射”中,Java类与数据库中的表相对应,类的对象与表中的一条记录相对应,对象的属性与表的字段相对应。

            ORM工作原理

使用MyBatis

基础环境检查

  请检查并确保开发设备已经正确安装了JDK、IDEA、Maven、MySQL数据库并能够正常使用。

创建项目

  首先创建新项目用于存放之后的每个Module,具体步骤:打开开发工具IDEA,在工具栏中依次选择“File”→“New”→“Project”选项,在弹出的“New Project”对话框中选择“Empty Project”创建新的空项目。

配置Maven

为了便于项目中各Module的统一管理与配置,我们需要在项目中对Maven进行配置。请在IDEA工具栏中依次选择“File”→“Settings”→“Build, Execution, Deployment”→“Build Tools”→“Maven”选项,打开Maven配置界面并设置Maven的home路径、配置文件路径以及本地仓库位置。如图:

 入门案例

  准备好开发环境后,通过一个完整案例详细介绍其基本使用方法。在该案例中,对每一步操作都进行详尽描述并交代其注意事项,借此为后续开发打下坚实基础。为了便于初学者进行编码实践,在此给出项目开发完成后的总体结构。

 

 开发准备

首先,我们准备案例所需的数据库及数据表。请在MySQL中创建名为mybatisdb的数据库,并在其中创建用户表user。

 id:自增长的用户主键。

 username:用户姓名。

 password:用户密码。

 gender:用户性别。

创建数据库及表的相关SQL语句如下:

 

-- 创建数据库mybatisdb
DROP DATABASE IF EXISTS mybatisdb;
CREATE DATABASE mybatisdb;
use mybatisdb;
-- 创建用户表user
CREATE TABLE user(
  id INT primary key auto_increment,
  username VARCHAR(50),
  password VARCHAR(50),
  gender VARCHAR(10)
);
-- 向用户表user中插入数据
INSERT INTO user(username,password,gender) VALUES("lucy","123456","female");
INSERT INTO user(username,password,gender) VALUES("momo","234567","female");
INSERT INTO user(username,password,gender) VALUES("xixi","345678","female");
INSERT INTO user(username,password,gender) VALUES("pepe","456123","female");

创建Module

在IDEA的工具栏中依次选择“File”→“New”→“Module”→“Maven”选项,以Maven方式创建新Module。

 设置打包方式

在Module的pom.xml文件中,使用packaging标签设置打包方式为jar,相关代码如下:

<groupId>com.cn</groupId>

<artifactId>MyBatis_HelloWorld</artifactId>

<version>1.0-SNAPSHOT</version>

<!-- 设置打包方式 -->

<packaging>jar</packaging>

添加依赖

在Module的pom.xml文件中,使用dependency标签添加Module所需依赖,例如, MyBatis依赖、JUnit依赖、MySQL依赖、log4j依赖,相关代码如下:
<?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.cn</groupId>
    <artifactId>MyBatis_HelloWorld</artifactId>
    <version>1.0-SNAPSHOT</version>
<!-- 设置打包方式 -->
    <packaging>jar</packaging>

    <dependencies>
        <!-- MyBatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>

        <!-- JUnit依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- MySQL依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>

<!-- log4j依赖 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
</dependencies>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

添加日志配置文件

在Module的resources包下创建log4j的日志配置文件log4j.properties,以便观察MyBatis的输出日志信息,相关代码如下:

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

创建实体类

public class User {

    private Integer id;
    private String username;
    private String password;
    private String gender;
}

//省略构造函数、各属性的set和get方法、toString方法

创建接口文件

在src/main/java目录下创建com.cn.mapper包,通常情况下该包用于存放接口文件。在该包中创建接口文件UserMapper.java。

public interface UserMapper {
    User selectUserById(String id);
}

创建映射文件

在src/main/resources目录下以com/cn/mapper的方式创建专门存放映射文件的包。一般而言,接口文件和映射文件是成对出现的,两者的文件名一样但后缀不同。例如接口文件UserMapper.java对应的映射文件为UserMapper.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">

<mapper namespace="com.cn.mapper.UserMapper">
    <select id="selectUserById" parameterType="String" resultType="com.cn.pojo.User">
        select * from user where id = #{id}
    </select>
</mapper>

<mapper/>标签的namespace属性表示该mapper的命名空间,其取值为xxxMapper.java接口的全类名。所以,此处namespace属性的值为com.cn.mapper.UserMapper。通过此配置,把xxxMapper.xml映射文件与xxxMapper.java接口文件进行了绑定。

 编写全局配置文件

在src/main/resources目录下创建MyBatis的核心配置文件mybatis-config.xml,该文件主要用于配置连接数据库的信息以及MyBatis的全局配置信息。

<?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.jdbc.Driver"/>
                <!-- 配置数据库地址 -->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
                <!-- 连接数据库所需的用户名 -->
                <property name="username" value="root"/>
                <!-- 连接数据库所需的密码 -->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 配置mapper -->
    <mappers>
        <!-- 设置mapper的完整路径 -->
        <mapper resource="com/cn/mapper/UserMapper.xml"/>
    </mappers>

</configuration>

测试

在src/test/java/com/cn/MyBatisTest中对数据库查询操作进行单元测试

public class MyBatisTest {

    @Test
    public void testSelectUserById() {
        SqlSession sqlSession = null;
        try {
            // 读取MyBatis核心配置文件mybatis-config.xml
            String fileName = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(fileName);
            // 创建SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            // 通过SqlSessionFactoryBuilder解析配置文件获取sqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
            // 通过SqlSessionFactory对象创建SqlSession对象
            sqlSession = sqlSessionFactory.openSession(true);
            // 通过sqlSession获取UserMapper.java接口的代理实现类的对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 调用UserMapper中的方法执行查询
            String userID = "1";
            User user = userMapper.selectUserById(userID);
            // 打印查询结果
            System.out.println(user);
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            // 关闭SqlSession
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

控制台输出:

DEBUG [main] - ==>  Preparing: select * from user where id = ?

DEBUG [main] - ==> Parameters: 1(String)

DEBUG [main] - <==      Total: 1

User [id=1, username=lucy, password=123456, gender=female]

 分析:

通过Resources读取MyBatis的配置文件mybatis-config.xml。

通过sqlSessionFactoryBuilder对象生成sqlSessionFactory对象。

通过sqlSessionFactory对象的openSession()方法创建sqlSession对象,该对象用于操作数据库或者获取Mapper。调用openSession()方法时可传入boolean类型的参数(它表示是否自动提交事务),通常情况下传入true即可。

通过sqlSession的getMapper()方法获取Mapper。在此过程中,getMapper()会通过动态代理动态生成UserMapper.java接口的代理实现类。

利用Mapper进行查询操作。

执行完查询操作后关闭sqlSession。






 

标签:入门,创建,UserMapper,sqlSession,user,使用,MyBatis,log4j
From: https://www.cnblogs.com/ywzh/p/17738018.html

相关文章

  • 202309301820_《Spring boot项目,继承mybatis-generator遇到的问题及解决》
     当配置到最后,双击右侧maventab,准备生成时,报红:1.“Loadingclass`com.mysql.jdbc.Driver'.Thisisdeprecated.Thenewdriverclassis`com.mysql.cj.jdbc.Driver'.ThedriverisautomaticallyregisteredviatheSPIandmanualloadingofthedriverclassisgen......
  • MAUI Blazor学习9-VS Code开发调试MAUI入门
     MAUIBlazor学习9-VSCode开发调试MAUI入门 MAUIBlazor系列目录MAUIBlazor学习1-移动客户端Shell布局-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习2-创建移动客户端Razor页面-SunnyTrudeau-博客园(cnblogs.com)MAUIBlazor学习3-绘制ECharts图表-Su......
  • python提取论文图片波形数据:pyautogui键盘移动鼠标,跨模块全局变量使用,cv2局部放大窗口
    最近写了一个python提取论文图片波形数据的脚本,代码如下。涉及新知识点:pyautogui键盘移动鼠标,跨模块全局变量使用,cv2局部放大窗口,matplotlib图片在pyQT5lable显示,坐标变换,多线程同时使用。搜索相关关键字去对应代码区看注释就可以了。gui窗口:1#-*-coding:utf-8-*-2......
  • golang 使用 gorm 查询数据 demo
    内容来自对chatgpt的咨询题目假设你有一张学生数据库表,需要通过golang的gorm查询某个id的学生实体查询demo在这段代码中,"student"变量是一个Student类型的结构体,用于存储查询结果。我们通过调用gorm.DB的Where方法和First方法,将第一个符合条件的结果存储到了"student"......
  • curl使用教程
    上传文件https://www.cnblogs.com/wangbingbing/p/16596851.html普通POST文件curl-F'[email protected]'http://127.0.0.1/hfs-upload/带密码认证的POSTcurl-uuser:[email protected]://127.0.0.1/hfs-upload/下载文件选项选项作用-O直......
  • 使用正则表达式判断日期字符串格式是否合法遇到的问题(解决)
    引言我们在使用SpringMVC从前端接受传递过来的日期数据时,默认传递过来的数据是String类型,如果我们从前端传递过来的数据格式是yyyy/MM/dd,SpringMVC有内置类型转化器会将String类型自动转化成Date类型。但如果我们从前端传递过来的数据格式是yyyy-MM-dd,SpringMVC的内置转化器就不......
  • 2023年最新版Apollo保姆级使用手册(超级详尽版本)
    目录Apollo操作说明前言Apollo环境部署一、环境构建二、官方地址三、数据库脚本使用四、配置Apollo文件五、启动Apollo六、访问ApolloApollo产品使用一、修改部门二、应用操作三、用户操作四、系统权限管理1、创建应用权限配置2、创建应用权限配置3、与旧版比对五、系统参数1、Por......
  • Ubuntu22.04 使用pyppeteer启动浏览器无响应
    问题使用示例代码启动浏览器无响应。解决添加启动参数options={'args':['--no-sandbox']}......
  • Haskell 入门 - 零碎版
    Haskell20104.DeclarationsandBindings4.1OverviewofTypesandClasses4.1.2SyntaxofTypesTypevariablesTypeconstructorstypeconstantswithkind∗typeswithkind∗→∗built-intypeconstructorstrivialtype,as()with*functiontype,as......
  • Java:Springboot和React中枚举值(数据字典)的使用
    目录1、开发中的需求2、实现效果3、后端代码4、前端代码5、接口数据6、完整代码7、参考文章1、开发中的需求开发和使用过程中,通常会涉及四个角色:数据库管理员、后端开发人员、前端开发人员、浏览者数据库使用int类型的数值进行存储(eg:0、1、2)Java代码使用enum枚举类型的对象进行......