Mybatis 3和Spring 5 核心技术整合详细步骤

目录

一、小白快速认识Mybatis

二、MyBatis优势概括

三、Mybatis 3和Spring 5 整合

1、创建实体类

2、创建SQL映射接口

3、配置Mapper映射

4、创建JDBC资源文件

5、配置Spring

6、Mybatis配置

7、创建运行类

四、总结

五、88元可以买华为云1核2G服务器啦


一、小白快速认识Mybatis

上次《原创 Spring 5 核心技术AOP基础项目实践详细记录》中学习了Spring基础知识,也是核心技术。这次需要先学习一下Mybatis框架,也是SSM框架中的重要组成部分。

MyBatis是一个操作数据库的“ORM”框架,ORM全称为面向关系映射(Object Relational Mapping)。对象指的是Java中的对象,关系也就是数据库中的数据表,MyBatis就是把数据表中的数据和Java中的对象进行映射,形成双向转换。

在后面的实践中你可以发现ORM的实际意义:1个类对应1个数据表;1个类的对象对应表中的1行;1个类的对象中的属性对应1个表中的1列。所以,以前直接使用JDBC对象操作数据库的方法不再使用,有了MyBatis框架之后,以面向对象的方式对Java中实体类进行操作,由ORM框架转化对数据库的增删查改。

那ORM框架到底是如何实现的呢?

它的内部核心技术原理为JDBC和反射机制,然后再由MyBatis进行封装。

二、MyBatis优势概括

官网:https://mybatis.org/mybatis-3/zh/index.html

MyBatis JAR下载:https://github.com/mybatis/mybatis-3/releases

Mybatis主要优势概况:

  1. 数据表的行和实体类双向转换,比如ResultSet对象返回的数据封装到Entity或List中,或者将实体类中的数据转换为数据表的一行,实现双向转换。
  2. SQL语句和Java文件分离,MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO,实现了分离,代码分层明确,有利于维护。
  3. 允许对SQL语句进行自定义优化,提高操作效率。这也是MyBatis框架替换掉Hibernate框架的主要原因。
  4. 减少DAO层的代码,MyBatis将JDBC各种操作进行封装,减少大量冗余的JDBC代码,提高了开发效率。
  5. MyBatis的半自动化灵活性,功能丰富,也是半自动化的ORM框架。操作数据库依然使用SQL语句,可以实现调用存储过程和高级映射等功能,将SQL的灵活性融入项目开发中。
  6. XML和Annotation注解进行ORM,官方推荐使用XML方式。

三、Mybatis 3和Spring 5 整合

小白刚刚入门,还未学习完整框架,许多项目使用SSM框架,也就是Spring+SpringMVC+MyBatis的整合。

这里的实现相对简单,只有Spring+MyBatis,算是一个入门,实现操作数据库CURD的基本功能。

首先,对于入门新手,需要进行准备工作。

下载Mybatis。

解压如下

另外,在Spring 5 框架中,默认不支持Mybatis 3进行直接的整合,需要依赖官方提供的插件mybatis-spring-1.x.x.jar。我已上传CSDN资源。

下载地址:https://download.csdn.net/download/Charzous/15404391

导入到library中。

1、创建实体类

/*
 * User.java
 * Copyright (c) 2021-02-24
 * LastModified:2021/2/24 下午4:55
 * Author : Charzous
 * All right reserved.
 */

package spr_myb.bean;

public class User {
    int id;
    String username;
    String password;
    String sex;
    String home;
    String info;

    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 getSex() {
        return sex;
    }

    public String getHome() {
        return home;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setHome(String home) {
        this.home = home;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public String getPassword() {
        return password;
    }

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

    @Override
    public String toString() {
        return ("姓名:"+username+"\n密码:"+password+"\n性别:"+sex+"\n学校:"+home+"\n备注:"+info);
    }
}

该实体类则对应一个数据表,后续操作依赖于此类。

对应数据表为:

 

2、创建SQL映射接口

/*
 * IUser.java
 * Copyright (c) 2021-02-24
 * LastModified:2021/2/24 下午5:00
 * Author : Charzous
 * All right reserved.
 */

package spr_myb.dao;

import spr_myb.bean.User;

public interface IUser {
    User getUserByID (int id);
    void insertUser(User user);//update,delete,insert语句是不需要设置返回类型的,在dao的接口函数设置为void
    void upUser(User user);
    void delUser(int id);
}

该接口包括了增删查改4个方法,返回类型和参数类型有严格的定义。后续映射到这4个方法。 

3、配置Mapper映射

<?xml version="1.0" encoding="UTF-8" ?>
<!--
  ~ userMap.xml
  ~ Copyright (c) 2021-02-24
  ~ LastModified:2021/2/24 下午5:58
  ~ Author : Charzous
  ~ All right reserved.
  -->

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="spr_myb.dao.IUser">
    <select id="getUserByID" resultType="spr_myb.bean.User" parameterType="map">
        SELECT * from user where id = #{id}
    </select>
    <insert id="insertUser" parameterType="spr_myb.bean.User" useGeneratedKeys="true" keyProperty="id">
        insert into user(id,username,password,sex,home,info) values (#{id},#{username},#{password},#{sex},#{home},#{info})
    </insert>
    <update id="upUser" parameterType="spr_myb.bean.User">
        update user set username=#{username} where id=#{id}
    </update>
    <delete id="delUser" parameterType="int">
        delete from user where id=#{id}
    </delete>
</mapper>

注意: 每个映射的id必须和接口中的方法名一致,才能形成正确的映射关系,检验如下:可通过箭头跳转到对应接口中的方法,或通过方法跳转映射关系。

4、创建JDBC资源文件

在项目src文件下创建mysql-local.properties文件,存放连接mysql数据库的具体信息。

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/test?serverTimezone=UTC&characterEncoding=utf8&useSSL=false
jdbc.uid=root
jdbc.password=123456

5、配置Spring

这时需要写Spring配置文件,文件的配置这里不详细讲解。

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

<!--
  ~ applicationContext.xml
  ~ Copyright (c) 2021-02-25
  ~ LastModified:2021/2/24 下午6:16
  ~ Author : Charzous
  ~ Blog : https://blog.csdn.net/Charzous
  ~ All right reserved.
  -->


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.springframework.org/schema/context
                            https://www.springframework.org/schema/context/spring-context.xsd
                            http://www.springframework.org/schema/tx
                            http://www.springframework.org/schema/spring-tx.xsd
                            http://www.springframework.org/schema/aop
                            https://www.springframework.org/schema/aop/spring-aop.xsd">



    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>
                mysql-local.properties
            </value>
        </list>
    </property>
    </bean>


    <!--数据库连接池-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.uid}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- 配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="mybatis-config.xml"/>

    </bean>

    <!--配置userMapper对象-->
    <!--方法1:通过扫描配置,用类名获取-->
<!--    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
<!--        <property name="basePackage" value="spr_myb.*"/>-->
<!--        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>-->
<!--    </bean>-->
    <!--方法2:通过id-bean配置,用id名获取-->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="spr_myb.dao.IUser"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
</beans>

6、Mybatis配置

<?xml version="1.0" encoding="UTF-8" ?>
<!--
  ~ mybatis-config.xml
  ~ Copyright (c) 2021-02-24
  ~ LastModified:2021/2/24 下午5:37
  ~ Author : Charzous
  ~ All right reserved.
  -->

<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <!-- mapping文件路径配置 -->
    <typeAliases>
        <typeAlias type="spr_myb.bean.User" alias="User"/>
    </typeAliases>
    <mappers>
        <mapper resource="spr_myb/userMap.xml"/>
    </mappers>

</configuration>

主要对类与实体的映射文件进行声明配置。 

7、创建运行类

/*
 * demoTest.java
 * Copyright (c) 2021-02-24
 * LastModified:2021/2/24 下午6:09
 * Author : Charzous
 * All right reserved.
 */

package spr_myb.bean;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spr_myb.dao.IUser;


public class demoTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        IUser userMapper = (IUser)context.getBean("userMapper");//"userMapper"

        String name="testName";
        int num=1010;
        String pwd="123";
        String sex="男";
        String school="广东省";
        String info="计算机";

        User user1=new User();
        user1.setId(num);
        user1.setPassword(pwd);
        user1.setUsername(name);
        user1.setSex(sex);
        user1.setHome(school);
        user1.setInfo(info);
        userMapper.insertUser(user1);

        System.out.println("插入的数据为:");
        System.out.println(user1);

    }
}

 验证一下插入数据。

数据表的存入一行数据。

其他方法也测试成功,如更新数据、删除。

四、总结

这篇学习了Mybatis框架的强大功能,以及通过实践实现了CRUD基本操作,将Spring5和Mybatis3框架进行整合,也是技术的合并应用,强化对此方面基础知识的理解。

小白学习下来,这个过程遇到了不少问题,开始感觉Spring的配置以及Mybatis的映射非常难搞定,后来也是慢慢理清思路,认真学习了技术的原理,最后成功正确配置映射文件。所以写此篇记录一些重要的知识,与正在学习的大家一起分享,共同进步,欢迎交流指正!

感兴趣的话可以看一下上篇我写的Spring入门《原创 Spring 5 核心技术AOP基础项目实践详细记录》。

五、88元可以买华为云1核2G服务器啦

如果你想把自己项目部署云服务,或者玩一玩云服务,我推荐华为云服务器,现在是购买云服务的最好时机,开年好礼,更加实惠!

推荐理由:性价比高、个人建站、云上开发必备,稳定性强!

可以看到活动非常火爆,新用户购买享受低至0.7折,原价1000元+。

步骤一:首先扫描二维码,进行用户注册。

步骤二:可以点击下方我的专属链接或者扫码享受此优惠价格。

华为云服务器购买链接:https://activity.huaweicloud.com/newyear_promotion/index.html?bpName=08a3013a6b80106f0f4ec018ce22bf60&bindType=1&salesID=chenzhenhong

对于购买云服务器,可以私信或者邮件咨询我哦~(猜猜我的邮箱在那里可以找到)

如果觉得不错欢迎“一键三连”哦,点赞收藏关注,有问题直接评论,交流学习! 


我的CSDN博客:https://blog.csdn.net/Charzous/article/details/114325383

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页