欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SSM框架学习之MyBatis

程序员文章站 2022-06-22 20:16:09
前言从今天开始,我们将开启SSM框架的学习,让我们先了解一下什么是MyBatis?1.简介持久层框架几乎避免了所以JDBC代码和手动设置参数以及获取结果集使用了ORM思想,实现了结果集的封装ORM:object Relational Mapping 对象关系映射把数据库表和实体类以及实体类的属性对应起来让我们可以操作实体类就实现操作数据库表2.Mybatis环境搭建在用idea创建Maven的时候,要在pom.xml中导入依赖:...

前言

从今天开始,我们将开启SSM框架的学习,让我们先了解一下什么是MyBatis?

1.简介

  • 持久层框架

  • 几乎避免了所以JDBC代码和手动设置参数以及获取结果集

    使用了ORM思想,实现了结果集的封装

  • ORM:object Relational Mapping 对象关系映射

把数据库表和实体类以及实体类的属性对应起来

让我们可以操作实体类就实现操作数据库表

2.Mybatis环境搭建
在用idea创建Maven的时候,要在pom.xml中导入依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>

依赖可以在maven的仓库或者Mybatis的官网(https://mybatis.org/mybatis-3/zh/getting-started.html)里面找到。

注意:因为是使用JDBC连接MySQL数据库,所以这里还要导入一个MySQL的依赖,和JDBC连接MySQL一样的。

创建MyBatis项目的步骤:

  1. 创建maven工程,并导入坐标(默认已经创建了数据库和表)
  2. 创建mybatis的主配置文件mybatis-config.xml
  3. 创建数据库配置文件db.properties
  4. 创建实体类和Dao的接口
  5. 创建映射配置文件,UserMapper.xml
  6. 测试

这里还加了一个Junit的单元测试依赖,方便功能测试

<dependencies>
    <!--        mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <!--        mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!--        Junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

在build中配置resources来防止我们资源导出失败问题

<!--    在build中配置resources来防止我们资源导出失败问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

按如下目录创建包:

SSM框架学习之MyBatis
注意:
dao层是存放接口
pojo层是存放实体类
utils层是存放一些加载properties文件的和配置的工具类
test测试中的目录结构最好和dao的目录结构一致

创建数据库:

create database db5;
use db5;
create table user
(
	`id` int primary key comment '编号',
	`username` varchar(20) comment '用户名',
 	`password` varchar(20) comment '密码'
)engine=innodb default charset=utf8
insert into user(id,username,password) values(1,'admin','1234')

SSM框架学习之MyBatis

一、在resource目录下创建配置文件

1.mybatis-config.xml

<?xml version="1.0" encoding="utf8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"/>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <typeAliases>
        <package name="com.demo.dao.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
<!--    绑定接口-->
    <mappers>
        <mapper class="com.demo.dao.UserMapper"/>
    </mappers>
</configuration>

注意:
1.这个是加载数据库配置文件db.properties

 <properties resource="db.properties"/>

2.这里面是标准的日志设置,和设置有关的放<settings></settings>

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

3.这个是包扫描下路径的别名(在后面UserMapper.xml中会用到)

<typeAliases>
        <package name="com.demo.dao.pojo"/>
</typeAliases>

顺序是这个,不要搞错了!!!

环境设置

<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

这里我们也可以看到,Mybatis是在JDBC以及连接池的基础上进行封装处理,还记得我们前面简介中提到的“几乎避免了所以JDBC代码和手动设置参数以及获取结果集”

最重要的是<mappers></mappers>

  <mappers>
        <mapper class="com.demo.dao.UserMapper"/>
 </mappers>

加载的Mapper就是这个路径

2.db.properties
这里就是对数据库的配置(数据库驱动、url、username、password)

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db5?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456

SSM框架学习之MyBatis

二、在idea刚刚创建的包下创建实体类和接口

1.pojo包下 创建user的实体类:

package com.demo.pojo;

/**
 * @author: seh
 * @date: 2020/10/25 9:04
 * @version: 1.0
 */

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}


2.在dao层创建接口:UserMapper
(可以创建UserMapper.xml,也可以使用注解的方式)

dao层主要是放一些功能的接口(CURD)

package com.demo.dao;

import com.demo.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author: seh
 * @date: 2020/10/25 9:06
 * @version: 1.0
 */
public interface UserMapper {

//    创建一个查询方法
    @Select("select * from user where id = #{id}")
    List<User> queryUserById(@Param("id") int id);
}

注意
@Select是用于查询
@Param(“id”)是参数名,和#{id}对应,基本数据类型中最好使用这个注解
返回值类型是一个List集合类型

3.创建MyBatisUtils的工具类

创建工具类的主要目的是通过调用工具类中的方法完成一些配置

package com.demo.utils;
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;

/**
 * @author: seh
 * @date: 2020/10/14 18:50
 * @version: 1.0
 */
/*
 * 工具类
 *
 * */
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {
//      1.获取SqlSessionFactory对象
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /*
    * 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    * SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
    * 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
    * */
    public static SqlSession getSqlSession() {

        return sqlSessionFactory.openSession(true);//自动提交事务
    }
}

这么配置的原因是,根据mybatis官网的配置要求,构建 SqlSessionFactory,SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder。

而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。 但也可以使用任意的输入流(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易。

最后得到如下的目录以及文件结构

SSM框架学习之MyBatis
环境搭建的注意事项:

  1. 在mybatis中它把持久层的操作接口名称和映射文件也叫Mapper
  2. 在idea中创建目录的时候,和包不一样,包是三级目录,目录是一级
  3. mybatis的映射文件位置必须和dao接口的包结构相同

三、创建测试类,进行测试

SSM框架学习之MyBatis

package com.demo.dao;

import com.demo.pojo.User;
import com.demo.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * @author: seh
 * @date: 2020/10/25 9:13
 * @version: 1.0
 */
public class TestCode {

    @Test
    public void TestQuery(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.queryUserById(1);
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
}

注意:
1.在使用完资源以后记得关闭:sqlSession.close();
2.getMapper方法是利用了反射的机制,对Mapper进行扫描

最后我们来看看日志打印的结果是什么
SSM框架学习之MyBatis

按照以上步骤,我们创建一个插入的方法

1.在UserMapper中申明一个方法:insertUser(Map map);

package com.demo.dao;
import com.demo.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;

/**
 * @author: seh
 * @date: 2020/10/25 9:06
 * @version: 1.0
 */
public interface UserMapper {

//    创建一个查询方法
    @Select("select * from user where id = #{id}")
    List<User> queryUserById(@Param("id") int id);

    //创建一个插入的方法
    @Insert("insert into user(id,username,password) values(#{id},#{username},#{password})")
    int insertUser(Map map);
}

这里参数使用的是Map类型,比较万能,推荐使用!

为什么方法返回的是int类型呢?

这就和JDBC有关了,回忆一下,在JDBC中我们的修改,删除和插入返回的值是不是都是int类型呢?

这里的返回值表示影响的行数

2.在测试类中创建一个测试方法

package com.demo.dao;
import com.demo.pojo.User;
import com.demo.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
/**
 * @author: seh
 * @date: 2020/10/25 9:13
 * @version: 1.0
 */
public class TestCode {

    @Test
    public void TestQuery(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.queryUserById(1);
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    @Test
    public void insertUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        HashMap map = new HashMap();
        map.put("id",2);
        map.put("username","user1");
        map.put("password","1234");
        mapper.insertUser(map);
        sqlSession.close();
    }
}

查看日志打印结果
SSM框架学习之MyBatis
查看数据库
SSM框架学习之MyBatis
我们确实已经插入成功了!!!

最后,我们再来创建一个查询全部用户的方法

1.在userMapper中,申明一个findAll()方法

    @Select("select * from user")
    List<User> findAll();

2.在TestCode测试类中,创建测试方法

@Test
    public void findAll(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = mapper.findAll();
        for (User user : list) {
            System.out.println(user);
        }
        sqlSession.close();
    }

3.查看日志打印的结果
SSM框架学习之MyBatis
本文描述了Mybatis的作用以及如何创建一个简单的MyBatis项目,在后续的文章中将介绍如何使用UserMapper.xml以及日志、缓存、MyBatis-Plus等内容,请持续关注!!!

获取本节内容的原码以及更多宝贵的编程资源,请关注:
SSM框架学习之MyBatis
求一键三连!!!QAQ

本文地址:https://blog.csdn.net/weixin_45088667/article/details/109269683

相关标签: SSM框架 mybatis