Bootstrap

IDEA使用Mybatis进行连接Mysql并执行增删改查(CRUD)操作

一、新建一个数据库

CREATE DATABASE `student`;

CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) CHARACTER SET utf8,
  `age` int(11) NULL DEFAULT NULL,
  `sex` varchar(25) CHARACTER SET utf8 DEFAULT NULL,  
  PRIMARY KEY (`id`) 
);

INSERT INTO `user`(name,age,sex) VALUES ('小李', 21, '男');
INSERT INTO `user`(name,age,sex) VALUES ('小红', 20, '女');
INSERT INTO `user`(name,age,sex) VALUES ('小黄', 22, '男');

效果如下:
在这里插入图片描述

二、IDEA新建一个Maven项目导入依赖

pom.xml导入依赖如下:

<dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.5.5</version>
     </dependency>
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.47</version>
     </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

在这里插入图片描述

三、写一个简单的Mybatis项目

3.1.项目目录

在这里插入图片描述
其中MybatisTest为测试类

3.2.mybatis配置文件(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>
        <typeAlias type="top.upstudy.pojo.User" alias="user"/>
    </typeAliases>
    <!--配置环境-->
    <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/student?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--绑定mapper-->
    <mappers>
        <mapper resource="Mapper/Mapper.xml"/>
    </mappers>
</configuration>

其中username、password为连接数据库的账号与密码,mappers中绑定操作数据库mapper文件

3.3.操作数据库文件Mapper.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="top.upstudy.dao.UserMapper">
    <!--查询所有用户-->
    <select id="showUser" resultType="user">
    select * from user
    </select>
    <!--查询单个用户-->
    <select id="getUser" parameterType="int" resultType="user">
        select * from user where id = #{id}
    </select>
    <!--添加用户-->
    <insert id="addUser" parameterType="user">
        insert into user (name,age,sex) values (#{name},#{age},#{sex})
    </insert>
    <!--更新用户信息-->
    <update id="updateUser" parameterType="user">
        update user set name = #{name},age = #{age} where id = #{id}
    </update>
    <!--删除用户信息-->
    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>
</mapper>

在这里写sql语句id名与接口中的方法名相对应

3.4.写对应的操作接口UserMapper(类似jdbc中的dao)

package top.upstudy.dao;
import top.upstudy.pojo.User;
import java.util.List;

public interface UserMapper {
    //查询所有用户
    List<User> showUser();
    //按id查询用户
    User getUser(int id);
    //添加一个用户
    boolean addUser(User user);
    //修改用户信息
    boolean updateUser(User user);
    //删除用户
    boolean deleteUser(int id);
}

方法由mybatis用mapper实现,我们只需要写个接口

3.5.用户类User(用作参数传入/返回类型)

package top.upstudy.pojo;

public class User {
    private int id;  //id
    private String name;   //姓名
    private int age;//年龄
    private String sex;   //性别

    public User() {
    }

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public User(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

由于只是用作测试,故不添加get/set方法了

3.6.写配置文件MybatisUtils

package top.upstudy.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;

public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //绑定配置文件
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //获取SqlSession连接
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

mybatis使用了工厂模式建立了数据库的操作,方便直接使用,至此配置完成

四、测试CRUD(其中增、删、改需提交事务)

1.查询用户

所有用户:
对应mapper.xml中的

    <!--查询所有用户-->
    <select id="showUser" resultType="user">
    select * from user
    </select>

对应接口中的

    //查询所有用户
    List<User> showUser();

代码(供直接增、改、删调用,故不做测试)

 //查询所有用户方法
    public void selectAll(UserMapper mapper){
        //查看当前用户数据
        List<User> allUser = mapper.showUser();
        //遍历返回数据
        for (User oneUser:allUser) {
            System.out.println(oneUser);
        }
    }

单个用户:
对应mapper.xml中的

 <!--查询单个用户-->
    <select id="getUser" parameterType="int" resultType="user">
        select * from user where id = #{id}
    </select>

对应接口中的

    //按id查询用户
    User getUser(int id);

测试代码

    @Test
    public void findUser(){
        //获取连接
        SqlSession session = MybatisUtils.getSession();
        //绑定mapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //以id查询查询用户数据
        User user = mapper.getUser(1);
        System.out.println(user);
        //关闭连接
        session.close();
    }

绑定接口,进行操作,实现通过id值查询用户信息
junit运行该方法后,效果:
在这里插入图片描述

2.添加用户

对应mapper.xml中的

    <!--添加用户-->
    <insert id="addUser" parameterType="user">
        insert into user (name,age,sex) values (#{name},#{age},#{sex})
    </insert>

对应接口中的

    //添加一个用户
    boolean addUser(User user);

添加用户方法

@Test
    public void add(){
        //获取连接
        SqlSession session = MybatisUtils.getSession();
        //绑定mapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //添加用户
        User user = new User("李四",22,"男");
        if (mapper.addUser(user))
            System.out.println("添加成功!");
        else
            System.out.println("添加失败!");
        //提交事务
        session.commit();
        //查看所有用户
        selectAll(mapper);
        //关闭连接
        session.close();
    }

效果如下:
在这里插入图片描述

3.修改用户信息

对应mapper.xml中的

   <!--更新用户信息-->
    <update id="updateUser" parameterType="user">
        update user set name = #{name},age = #{age} where id = #{id}
    </update>

对应接口中的

    //修改用户信息
    boolean updateUser(User user);

测试代码:

    @Test
    public void update(){
        //获取连接
        SqlSession session = MybatisUtils.getSession();
        //绑定mapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //修改id为1的用户信息
        User user = new User(1,"张三",18);
        if (mapper.updateUser(user))
            System.out.println("修改成功!");
        else
            System.out.println("修改失败!");
        //提交事务
        session.commit();
        //查看所有用户
        selectAll(mapper);
        //关闭连接
        session.close();
    }

效果:
在这里插入图片描述

4.删除用户

   <!--删除用户信息-->
    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>

对应接口中的

    //删除用户
    boolean deleteUser(int id);

测试代码(删除id为3的用户):

   @Test
    public void delete(){
        //获取连接
        SqlSession session = MybatisUtils.getSession();
        //绑定mapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //删除id为3的用户
        if (mapper.deleteUser(3))
            System.out.println("删除成功!");
        else
            System.out.println("删除失败!");
        //提交事务
        session.commit();
        //查看所有用户
        selectAll(mapper);
        //关闭连接
        session.close();
    }

效果:
在这里插入图片描述

5.整个测试代码

package top.upstudy;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import top.upstudy.dao.UserMapper;
import top.upstudy.pojo.User;
import top.upstudy.utils.MybatisUtils;

import java.util.List;

public class MybatisTest {
    //查询所有用户方法
    public void selectAll(UserMapper mapper){
        //查看当前用户数据
        List<User> allUser = mapper.showUser();
        //遍历返回数据
        for (User oneUser:allUser) {
            System.out.println(oneUser);
        }
    }

    @Test
    public void findUser(){
        //获取连接
        SqlSession session = MybatisUtils.getSession();
        //绑定mapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //以id查询查询用户数据
        User user = mapper.getUser(1);
        System.out.println(user);
        //关闭连接
        session.close();
    }

    @Test
    public void add(){
        //获取连接
        SqlSession session = MybatisUtils.getSession();
        //绑定mapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //添加用户
        User user = new User("李四",22,"男");
        if (mapper.addUser(user))
            System.out.println("添加成功!");
        else
            System.out.println("添加失败!");
        //提交事务
        session.commit();
        //查看所有用户
        selectAll(mapper);
        //关闭连接
        session.close();
    }

    @Test
    public void update(){
        //获取连接
        SqlSession session = MybatisUtils.getSession();
        //绑定mapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //修改id为1的用户信息
        User user = new User(1,"张三",18);
        if (mapper.updateUser(user))
            System.out.println("修改成功!");
        else
            System.out.println("修改失败!");
        //提交事务
        session.commit();
        //查看所有用户
        selectAll(mapper);
        //关闭连接
        session.close();
    }

    @Test
    public void delete(){
        //获取连接
        SqlSession session = MybatisUtils.getSession();
        //绑定mapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //删除id为3的用户
        if (mapper.deleteUser(3))
            System.out.println("删除成功!");
        else
            System.out.println("删除失败!");
        //提交事务
        session.commit();
        //查看所有用户
        selectAll(mapper);
        //关闭连接
        session.close();
    }
}

五、总结

mybatis让我们不需要编写jdbc代码,我们只需要关注sql的编写以及mapper文件的对应即可,配置完成后是进行增删改查操作是十分方便的。

;