【新征程-ssm】3、mybatis的使用

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/wearge/article/details/89397375

3、mybatis的使用

【目的】

我不是为了了解其中实现的细节而去学这个ssm框架的,虽然现在企业用的很多都是ssm框架,但是我暂时不需要找工作,我的目的很明确,为了搭建一个web框架,供我临时使用

1、准备工作

1.1 编译环境:IDEA+mysql-server+Navicat Premium

其中Navicat Premium是mysql的一个可视化界面,我电脑上没有按照mysql的全套exe执行文件去自动安装的,我只是安装了一个数据库,单纯的数据库,没有可视化界面等等一系列东西。

具体安装的方法可以参考博客

https://www.cnblogs.com/reyinever/p/8551977.html

http://www.runoob.com/mysql/mysql-install.html

我不建议安装整套的,因为太大了,而且mysql自带的workbench不是很好用,这个我之前一直用的是这个。

后来发现mysql-server+Navicat Premium就很好用了

1.2 数据表的准备

在这里插入图片描述

插入数据sql语句

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');

2、使用mybatis

忽略我左边的项目,直接右边点击create new project
在这里插入图片描述
填写项目名称
在这里插入图片描述
不选择模板
在这里插入图片描述
next
在这里插入图片描述
启用自动导包
在这里插入图片描述

扫描二维码关注公众号,回复: 5945788 查看本文章

2.1 添加pom.xml坐标

<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.11</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>2.10.0</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
</dependencies>

在这里插入图片描述

2.2 创建User.java实体类

1555643413775

将User.java中的属性,对应User表中的属性

在这里插入图片描述

生成getter 和setter方法

2.3 创建IUserDao.java接口

在这里插入图片描述

这个文件和User.java放在同一级别的目录下,但是不同的包中。

2.4 在IUserDao中编写接口方法

在这里插入图片描述

2.5 编写SqlConfigMap.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>
    <!--配置环境-->
    <environments default="mysql">
        <environment id="mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源,(连接池)-->
            <dataSource type="POOLED">
                <!--配置连接数据库的4个基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>


        </dataSource>
    </environment>
</environments>



</configuration>

在这里插入图片描述

2.6 创建IUserDao.xml文件

这里的IUserDao.xml文件放在com.huiyu.dao文件夹下面,但是在resources这个文件下不能直接创建三级目录,这里要分三次,每次创建一个文件夹,如先创建com.再创建huiyu.再创建dao文件夹,最后创建IUserDao.xml文件。不然这里会出问题。

在这里插入图片描述

在这个IUserDao.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.huiyu.dao.IUserDao">
    <!-- 配置查询所有操作 -->
    <select id="findAll" resultType="com.huiyu.domain.User">   select * from user  </select>
    

</mapper>

这个就对应在IUserDao.java中接口中编写的接口的实现。

我们写完这个就不需要再编写实现类了,相当于findAll接口的实现类已经写完了。

需要注意的是:这里的select中的id就是我们接口中的接口方法,两者需要同名。

在这里插入图片描述
而这里相当于调用这个查询语句,每次我们系统调用IUserDao.java中的接口时,系统会先在这里找到相应的xml实现,为了能够找到这个,我们需要在 的namespace写出我们的接口所在的包,这样系统就知道我们这个xml是和接口方法相对应的,select对应接口方法,用这条语句查询到的数据将映射到我们的结果集中。

所以这个resultType需要定义返回对象需要封装在什么类中。也就是我们之前编写的User.java类,这就是为什么这个类中的所有属性都需要和数据库中的属性名对应的原因了。因为这个select语句查询到的数据是数据库中的数据,需要封装在对应的java类中才能在java语言中遍历打印(这样解释应该能理解了)

这样我们就相当于全部写完了方法,然后为了能够让mybaitis能够找到这个实现方法,我们需要在SqlConfigMap.xml中添加mapper

在这里插入图片描述

所有方法就差不多实现了,其实大部分是mybatis自动实现,我们开始编写测试类。

2.7 编写测试类

在这里插入图片描述

测试类的代码大部分细节是不需要知道的。只需要将代码贴上:

package com.huiyu.test;

import com.huiyu.dao.IUserDao;
import com.huiyu.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.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Auther: huiyu
 * @Date: 2019/4/19
 * @Description: com.huiyu.test
 */
public class UserTest {

    private InputStream in;
    private SqlSession session;
    private IUserDao userDao;

    @Before
    public void init() throws IOException {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2.创建 SqlSessionFactory 的构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        // 3.使用构建者创建工厂对象 SqlSessionFactory
        SqlSessionFactory factory = builder.build(in);
        //4.使用 SqlSessionFactory 生产 SqlSession 对象
        session = factory.openSession();
        //5.使用 SqlSession 创建 dao 接口的代理对象
        userDao = session.getMapper(IUserDao.class);
    }

    @After
    public void destory() throws IOException {

        session.commit();

        //7.释放资源
        session.close();
        in.close();
    }


    /**
     * 查找所有入门案例
     * @param
     */
    @Test
    public void findAllTest(){
        //6.使用代理对象执行查询所有方法
        List<User> users = userDao.findAll();
        for(User user : users)
        {
            System.out.println(user);
        }
    }


}

在finAllTest()方法上右键,选择运行。便可以查询到我们需要的结果。

在这里插入图片描述

再最后看一下项目的结构:

在这里插入图片描述

这里的log4j只需要复制进去即可:

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

3、总结一下

按顺序我们做的工作是

  • 创建数据表
  • 创建表对应的实体类,生成getter和setter方法,生成toString方法
  • 创建对应的IUserDao.java接口类,编写查询接口方法
  • 创建SqlConfigMap.xml,将配置信息复制进去
  • 创建IUserDao.xml文件,编写select查询语句,将结果集映射到java实体中
  • 在SqlConfigMap.xml添加这里映射到我们新编写的IUserDao.xml文件
  • 编写测试类,运行

说明:只要熟悉这个过程之后,其他的增删改查等一系列操作都是按照这个流程来的,至于其中的很多代码,比如测试类中:

在这里插入图片描述

个人学习框架的方法

我们不需要知道这些代码的实际含义,只需要在我们的测试方法中调用dao中的接口即可。

等到熟悉了所有的流程后,我们便可以再回头去学习这些代码的具体含义,比如我们在IUserDao.xml中,可以添加where标签,可以添加别名,可以建立多表查询,但是这些复杂的查询,都是在这个简单的基础上进行扩展的,而我们学习的时候,要把最基本的框架熟练掌握。

然后在此框架上进行衍生一些其他复杂的操作,而复杂的操作也不过就是在这框架上多加了一点东西,这个时候多加这些东西,我们便可以查找相关的文档,比如IUserDao.xml文件中,我们可以查找文档,学到还有很多标签等。

所以学习需要有方法,抓总体,再回头细看局部。

猜你喜欢

转载自blog.csdn.net/wearge/article/details/89397375