Mybatis门一定要进去,进不去那SSM不就堵了?(中)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 二、第一个Mybatis程序1. 搭建环境1.1搭建数据库1.2 新建项目1.2.1 新建一个普通的maven项目1.2.2 删除src目录,将我们这个作为父工程1.2.3 导入maven依赖2. 新建一个module2.1 编写mybatis的核心配置文件2.2 编写mybatis的工具类3. 编写代码3.1 实体类3.2 Dao接口3.3 接口实现类4. 测试成功结果:注意点:5. 将Dao改成Mapper

二、第一个Mybatis程序


思路:搭建环境–>导入Mybatis–>编写代码–>测试


微信图片_20211230101930.png


1. 搭建环境


1.1搭建数据库


CREATE database `mybatis`;
use `mybatis`;
create table `user`(
  `id` int(20) not null primary key,
  `name` varchar(30) default null,
  `pwd` varchar(30) default null
)engine=innodb default charset=utf8;
insert into `user`(`id`, `name`, `pwd`) values(1,'hxl', '123456'),(2,'laoer', '123456'),(3,'laosan', '123456')

微信图片_20211230101945.png


1.2 新建项目


1.2.1 新建一个普通的maven项目


这个之前有发过博客,所以这里就不赘述了,如果不知道请点击传送门❤️“一篇文章教你解决maven”从环境到应用–非常值得阅读❤️


1.2.2 删除src目录,将我们这个作为父工程


1.2.3 导入maven依赖


一般我们都会设置自动导入,但是新版2020.X的IDEA没有这个,所以我们写完文件后点击右上方的该图案


微信图片_20211230102223.png

<?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.hxl</groupId>
    <artifactId>Mybatis-Study</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--导入依赖-->
    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!--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>
        </dependency>
    </dependencies>
</project>


2. 新建一个module


我们创建一个名字为mybatis-01的module,使用普通的maven创建,注意是在Mybatis项目中创建module。这样的好处是我们不需要每次都需要导入mybatis等包了。


2.1 编写mybatis的核心配置文件


我们连接一下数据库。这个地方我也发过,如果连接的时候出现时区问题,我们需要去设置一下时区,设置成GMT(可以直接点击set,去修改即可),然后连接即可。


image.png



在这个地方我们可以找到下面配置需要的url。


然后我们需要在src->main->resources->添加一个mybatis-config.xml然后添加下面的东西。


注意里面的vlaue要改成和自己相关的,不要照抄,


<?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/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
    <mappers>
        <mapper resource="com/hxl/dao/UserMapper.xml"/>
    </mappers>
</configuration>

2.2 编写mybatis的工具类

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;
//sqlSessionFactory -->用来构建sqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            //使用mybatis第一步这是获取sqlSessionFactory对象
            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();
    }
}


3. 编写代码


3.1 实体类


public class User {
    private int id;
    private String name;
    private String pwd;
    public User() {
    }
    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}


3.2 Dao接口

List<User> getUserList();

3.3 接口实现类


由原来的UserDaoImpl装换为Mapper配置文件


这里的mybatis.user是因为idea中连接了数据库,如果没连直接写表名


在dao下创建一个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">
<!--命名空间namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.hxl.dao.UserDao">
    <!--select查询语句-->
    <!--这里的id对应的方法名, resultType=结果,返回地类型要写全-->
    <select id="getUserList" resultType="com.hxl.pojo.User">
    select * from mybatis.user
  </select>
</mapper>


4. 测试


成功结果:


最好在test下创建一个和dao相同的目录进行测试


微信图片_20211230102648.png


public class UserDaoTest {
    @Test
    public void test(){
        //获得SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //我们获得到对象,要拿到sql要么去dao拿要么去mapper中拿,但其实都一样
        //下面我们通过mapper获取到他的类,然后接口就可以用了,返回接口类型
        //方式1:getMapper 执行sql
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();
        //方式2:直接通过里面的select,根据返回值的来进行。不推荐使用
        //List<User> userList = sqlSession.selectList("com.hxl.dao.UserDao.getUserList");
        for (User user : userList) {
            System.out.println(user);
        }
        //关闭SQLSession
        sqlSession.close();
    }
}

官方推荐的测试要包在try catch中

public class UserDaoTest {
    @Test
    public void test(){
        //获得SqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try{
            //我们获得到对象,要拿到sql要么去dao拿要么去mapper中拿,但其实都一样
            //下面我们get到他的接口,返回接口类型
            //方式1:getMapper 执行sql
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> userList = userDao.getUserList();
            //方式2:直接通过里面的select,根据返回值的来进行。不推荐使用
            //<User> userList = sqlSession.selectList("com.hxl.dao.UserDao.getUserList");
            for (User user : userList) {
                System.out.println(user);
            }
        }finally {
            //关闭SQLSession
            sqlSession.close();
        }
    }
}


微信图片_20211230102755.png


注意点:


问题1:Type interface com.hxl.dao.UserDao is not known to the MapperRegistry.

在Mybatis-config核心配置文件中需要进行下面的注册


<!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册-->
<mappers>
    <mapper resource="com/hxl/dao/UserMapper.xml"/>
</mappers>


问题2:### The error may exist in com/hxl/dao/UserMapper.xml。找不到这个资源


maven约定大于配置,我们写出的配置文件无法被导出或生效


在pom.xml中添加。添加之后刷新一下maven


<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>
            </resource>
        </resources>
    </build>


问题3:绑定接口错误


问题4:方法名不对


问题5:返回类型不对


5. 将Dao改成Mapper


我们之前是UserDao,然后我们将其修改成UserMapper。同时我们还需要将UserMapper.xml以及Test中的相关代码修改。


微信图片_20211230102900.png





相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
ssm(Spring+Spring mvc+mybatis)——showDept.jsp
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
248 2
|
Java 数据库连接 Android开发
SSM框架——使用MyBatis Generator自动创建代码
SSM框架——使用MyBatis Generator自动创建代码
168 2
|
Java 关系型数据库 MySQL
SpringBoot整合JUnit、MyBatis、SSM
SpringBoot整合JUnit、MyBatis、SSM
170 4
|
Java Spring
ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
ssm(Spring+Spring mvc+mybatis)Spring配置文件——applicationContext.xml
ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
ssm(Spring+Spring mvc+mybatis)Service层实现类——DeptServiceImpl
ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl
ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl