Mybatis框架实现对数据库中User表的按编号查询


前言

提示:本篇文章内容,实现按编号对User表中的数据进行查询,后续的增删改会在接下来的其他文章中体现。
以下为本文整体框架,读者可整体阅读,也可在目录中单独选择章节阅读
在这里插入图片描述

一、新建项目并通过Maven导入该项目相关数据包

(一)在IDEA中新建项目

点击project新建项目
在这里插入图片描述
按照下图所示进行操作
在这里插入图片描述
在这里插入图片描述
设置好后点击右下角Finish,即成功新建项目。
在这里插入图片描述
项目创建完毕后,在界面右下角,弹出提示,点击红框处,允许该项目Maven自动导入相关包。

(二)配置Maven的plu插件

1.pom.xml介绍

POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。
pom文件所在位置如下图所示
在这里插入图片描述
2.进行Maven插件plugin的配置
在这里插入图片描述

进行Maven插件plugin的配置代码如下:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source> <!--源代码使用的开发版本-->
                    <target>8</target> <!--需要生成的目标class文件的编译版本-->
                    <!--一般而言soure与target是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码
                    中需要没有使用低版本jdk中不支持的语法),会存在target不同于source的情况-->
                </configuration>
            </plugin>
        </plugins>
    </build>

(三)通过Maven导入该项目相关包

在这里插入图片描述

导入该项目相关数据包代码如下:

   <!--引入项目相关数据包-->
    <dependencies>
        <!--    引入MyBatis jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <!--Java 连接 MySQL-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <!--引入mysql-connector-java jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!--引入Java日志框架 slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.0</version>
        </dependency>
        <!--引入Java单元测试框架 JUnit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>
    <!--全选后代码后,Ctrl + Alt + L 格式化-->

下述代码为配置好后的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>Mybaits01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--maven插件plugin的配置-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source> <!--源代码使用的开发版本-->
                    <target>8</target> <!--需要生成的目标class文件的编译版本-->
                    <!--一般而言soure与target是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码
                    中需要没有使用低版本jdk中不支持的语法),会存在target不同于source的情况-->
                </configuration>
            </plugin>
        </plugins>
    </build>

    <!--引入项目相关数据包-->
    <dependencies>
        <!--    引入MyBatis jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <!--Java 连接 MySQL-->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <!--引入mysql-connector-java jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!--引入Java日志框架 slf4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.0</version>
        </dependency>
        <!--引入Java单元测试框架 JUnit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
    </dependencies>
    <!--全选后代码后,Ctrl + Alt + L 格式化-->
</project>

至此已经成功新建项目,并通过Maven到入了该项目的所有依赖。


二、数据库中建立User表并建立相对应的User类

(一)在数据库中建立user表

本文采用Mysql workbench(一款可视化数据库管理、设计软件)进行示范,其他数据库同理,注意本文示范操作的是Mysql8。如果是Mysql5,记得在下文中jdbc.url和jdbc.driver进行相应更改,后续相关章节会提到如何更改。
在这里插入图片描述
上图为所建立的user数据表,可以见到它有三列,列名分别为id,user_name,attack。这三个列名后续会与我们所建立的User类中的成员变量名一一对应。

(二)在项目中建立User类(该类名字与表名对应)

建立如下项目文件结构,并创建User类(与数据库中的User表对应)
在这里插入图片描述
User类中的内容如下图所示:
在这里插入图片描述

User类代码如下:

package com.qlg.domain;

public class User {

    private Integer id;
    private String userName;
    private Integer attack;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAttack() {
        return attack;
    }

    public void setAttack(Integer attack) {
        this.attack = attack;
    }

    //Alt + Insert 自动生成
    //规定输出格式
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", attack=" + attack +
                '}';
    }
}

至此我们已经成功创建了User类与数据库中的表形成了对应


三、Mybatis连接SQL

(一)配置Mybatis全局配置文件mybatis-config.xml

按照下图操作新建mybatis-config.xml文件
在这里插入图片描述
在这里插入图片描述
配置mybatis-config.xml文件,加载jdbc外部配置文件属性
在这里插入图片描述

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>

    <properties resource="jdbc.properties"/><!--告知属性来源-->
    <!--    加载jdbc外部配置文件属性-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/><!--加载jdbc驱动-->
                <property name="url" value="${jdbc.url}"/><!--指定连接数据库标识符号-->
                <property name="username" value="${jdbc.username}"/><!--读入数据库用户名-->
                <property name="password" value="${jdbc.password}"/><!--读入数据库密码-->
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="UserMapper.xml"/><!--所要映射的表-->
    </mappers>
</configuration>

(二)配置jdbc.properties文件提供名值对

新建jdbc.properties文件
在这里插入图片描述
在这里插入图片描述

jdbc.properties文件代码如下:

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/register_service?userSSL=true&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT
jdbc.username=root
jdbc.password=123456

(三)配置Mybatis全局配置文件的映射文件UserMapper.xml

同理新建mybatis-config.xml中所要映射的表UserMapper.xml
在这里插入图片描述
UserMapper.xml所建结果如下
在这里插入图片描述

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="userMapper">
    <!--    根据编号 查询用户-->
    <select id="queryById" parameterType = "INT" resultType="com.qlg.domain.User">
         select *,user_name as userName from user where id = #{id}
    </select>
</mapper>

至此我们成功配置完成了Mybatis全局配置文件mybatis-config.xml
并提供了相应变量值使其能够连接数据库
还配置了Mybatis配置文件中的映射UserMapper.xml


四、使用log4j日志框架(可选)

新建log4j.properties,配置Java日志框架
在这里插入图片描述
在这里插入图片描述
新建后结果如下
在这里插入图片描述

log4j.properties代码如下:

log4j.rootLogger=DEBUG,A1
log4j.logger.com.taotao = DEBUG
log4j.logger.org.mybatis = DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

至此,我们完成了该项目日志框架的配置


五、建立UserDao接口规范对User表的操作

下面我们来建立UserDao接口,规范我门对User表的操作。
此处我们先写入一个方法
UserDao结果如下图:
在这里插入图片描述

UserDao接口代码如下:

package com.qlg.dao;

import com.qlg.domain.User;

public interface UserDao {
    //根据编号查询用户
    //方法名:queryUserById()
    //方法需不需要传参:需要传参,传编号
    //方法返回值:类型User
    public User queryUserById(Integer id);
}

至此,我们建立了UserDao接口,只在其中写了一个方法,按编号查询user表中的数据。读者可以根据实际情况,自行增加方法,后续我们将建立该接口的实现类。


六、建立UserDao接口的实现类UserDaoImpl

UserDaoImpl结果如下图:
在这里插入图片描述

UserDaoImpl代码如下:

package com.qlg.dao.impl;

import com.qlg.dao.UserDao;
import com.qlg.domain.User;
import org.apache.ibatis.session.SqlSession;

public class UserDaoImpl implements UserDao {
    private SqlSession sqlSession;
    public UserDaoImpl(SqlSession sqlSession) {
        this.sqlSession = sqlSession;//在UserDaoImpl 实例化 传的SqlSession 赋值给了本类中的sqlSession
    }
    @Override
    public User queryUserById(Integer id) {
        return sqlSession.selectOne("userMapper.queryById",id);
    }
}

此处利用了UserMapper.xml,读者可以自行回忆我们之前所应进行的java语句操作,可以对比出两者的优劣处。我们都知道html等前端页面要比高级编程语言更加简易方便,此处可以理解为sqlSession提供的方法,使我们链接到了一个类似html文本格式的命令文件中。可以仔细比较一下,体会其中好处。


七、建立UserDaoImplTest类进行测试(实现按编号进行查询)

下面我们开始进行单元测试
首先新建测试类UserDaoImplTest
在这里插入图片描述
点击完成后,弹出如下对话框
在这里插入图片描述
按上图操作完毕后,选择右下角OK,记得勾选上Member方法。
在这里插入图片描述
补好后代码效果如下图
在这里插入图片描述

UserDaoImplTest代码如下:

package com.qlg.dao.impl;
import com.qlg.dao.UserDao;
import com.qlg.domain.User;
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 org.junit.Before;
import org.junit.Test;
import java.io.InputStream;

public class UserDaoImplTest {
    private UserDao userDao;
    @Before
    public void setUp() throws Exception {
        //指定全局文件的路径
//        String resource = "mybatis-config.xml";
//        获取输入流,关联全局配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //构建SqlSessionFactory
        SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
        //获取SqlSession
        SqlSession sqlSession = sf.openSession(true);
        userDao = new UserDaoImpl(sqlSession);
    }
    @Test
    public void queryUserById() {
        User user = userDao.queryUserById(1);
        System.out.println(user);
    }
}

上述代码完成后,按下图进行操作,查看运行结果。请添加图片描述

总结(附项目源码)

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

一、MyBatis框架的优点:

  1. 与JDBC相比,减少了50%以上的代码量。

  2. MyBatis是最简单的持久化框架,小巧并且简单易学。

  3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

  4. 提供XML标签,支持编写动态SQL语句。

  5. 提供映射标签,支持对象与数据库的ORM字段关系映射。

二、MyBatis框架的缺点:

  1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。

  2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

三、MyBatis框架适用场合:

MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。

对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。

下面为本文项目源码下载方式
链接:https://pan.baidu.com/s/1KyVd3il5_7VtT_Elf5M-6g
提取码:daoc
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值