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

跟着zz学Java 03-Mybatis框架的使用1-jar构建一个简单项目

程序员文章站 2022-04-18 16:45:47
...

前言

前面我们使用JDBC实现了一个增删查改的操作,但是我们可以发现,这里面存在大量的冗余代码,在实际的开发当中我们都是使用一些封装好的框架进行开发的,这次我们使用的是Mybatis这个框架

搭建环境

我们创建一个项目mybatis-jar,并且引入mybatis的jar包和mysql的驱动包,这里就不截图了,跟之前的过程是一样的,jar包可以在我在码云这个项目的lib文件夹下面找到

实体类编写

com.zz.pojo目录下创建一个User的实体类,用于映射表user

package com.zz.pojo;

public class User {
    private Integer id;

    private String username;

    private String password;

    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 String getPassword() {
        return password;
    }

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

创建Mybatis主配置文件

在src目录下创建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>
    <!--    类型别名,方便待会儿引用实体类,不用写全类名,只需要给出类名-->
    <typeAliases>
        <package name="com.zz.pojo"/>
    </typeAliases>
    <!--    数据源的一些配置,跟JDBC里面可以联系起来理解-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/sugon666?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root123"/>
            </dataSource>
        </environment>
    </environments>
    <!--    指定mapper文件的地址,后面创建User的mapper文件的时候会在这个地址下面创建-->
    <mappers>
        <mapper resource="com/zz/pojo/User.xml"/>
    </mappers>
</configuration>

User的配置文件

<?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">
<!--名称空间需要定义在pojo实体类路径-->
<mapper namespace="com.zz.pojo">
    <!--    id 查询的标识符 resultMap指定查询到结果以后的映射返回类型,这个过程也是Mybatis的核心-->
    <select id="listUser" resultType="User">
        SELECT  * from user
    </select>
</mapper>

测试类

package com.zz.pojo;

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;
import java.util.List;

public class Test {
    public static void main(String[] args) throws IOException {
        // 根据配置文件去创建一个会话工厂
        String resource = "mybatis-config.xml";
        // 这里的 Resources 一定要是 org.apache.ibatis.io.Resources; 包下面的方法
        InputStream resourceAsStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();

        // 通过 sqlSession 的selectList调用 listUser 配置在 User.xml 中的语句
        List<User> listUser = sqlSession.selectList("listUser");
        for (User user : listUser) {
            System.out.println(user.getUsername());
        }
    }
}

整个流程的分析

1 应用程序找Mybatis要数据

2 mybatis从数据库中找来数据
2.1 通过mybatis-config.xml定位哪个数据库
2.2 通过Category.xml执行对应的select语句
2.3 基于Category.xml把返回的数据库记录封装在 Category对象中
2.4 把多个Category对象装在一个Category集合中

3 返回一个Category集合

CRUD

为了方便我们的测试,我们添加junit的jar包,待会就可以在一个类里面运行多个测试方法了

用户映射的配置

<?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">
<!--名称空间需要定义在pojo实体类路径-->
<mapper namespace="com.zz.pojo">
    <!--    id 查询的标识符 resultType指定查询到结果以后的映射返回类型,这个过程也是Mybatis的核心-->
    <select id="listUser" resultType="User">
        SELECT  * from user
    </select>

    <insert id="addUser" parameterType="User">
        INSERT into user (username, password) values (#{username}, #{password})
    </insert>

    <delete id="deleteUser" parameterType="User">
        delete from user where id=#{id}
    </delete>

    <select id="getUser" parameterType="int" resultType="User">
        select * from user where id=#{id}
    </select>

    <update id="updateUser" parameterType="User">
        update user set username=#{username} where id=#{id}
    </update>
</mapper>

测试类

package com.zz.pojo;

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.Test;

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

public class TestCRUD {
    /**
     * 测试获取一个用户
     *
     * @throws IOException
     */
    @Test
    public void TestGetUser() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();

        User c = session.selectOne("getUser",3);

        System.out.println(c.getUsername());

        session.commit();
        session.close();
    }

    /**
     * 测试增加一个用户
     *
     * @throws IOException
     */
    @Test
    public void TestAddUser() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();

        User user = new User();
        user.setUsername("新增加的用户");
        user.setPassword("password");

        session.insert("addUser", user);

        listAll(session);

        session.commit();
        session.close();
    }

    /**
     * 测试删除一个用户
     *
     * @throws IOException
     */
    @Test
    public void TestDeleteUser() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();

        User user = new User();
        user.setId(4);

        session.delete("deleteUser", user);

        listAll(session);

        session.commit();
        session.close();
    }

    /**
     * 测试更新一个用户
     *
     * @throws IOException
     */
    @Test
    public void TestUpdateUser() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();

        User user = new User();
        user.setId(3);
        user.setUsername("修改后的username");

        session.update("updateUser", user);

        listAll(session);

        session.commit();
        session.close();
    }

    public static void listAll(SqlSession sqlSession) {
        List<User> listUser = sqlSession.selectList("listUser");
        for (User user : listUser) {
            System.out.println(user.getUsername());
        }
    }
}