MyBatis的快速入门、Mybatis增删改查(查询数据库表封装成对象、查一个对象也行;可以根据基本类型,也可以根据对象)

在这里插入图片描述
在这里插入图片描述

一、步骤

新建一个无骨架的maven项目:

在这里插入图片描述

1.pom.xml:

在这里插入图片描述

<?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>cn.itcast</groupId>
    <artifactId>Mybatis_day1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
    
</project>

2.创建数据库表和实体类

在这里插入图片描述
在这里插入图片描述

package com.itheima.domain;

/**
 * @author QLBF
 * @version 1.0
 * @date 2021/1/28 12:18
 */
public class Sys_user {
    
    
    private int id;
    private String username;
    private String email;
    private String password;
    private String phoneNum;

    @Override
    public String toString() {
    
    
        return "Sys_user{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", email='" + email + '\'' +
                ", password='" + password + '\'' +
                ", phoneNum='" + phoneNum + '\'' +
                '}';
    }

    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 getEmail() {
    
    
        return email;
    }

    public void setEmail(String email) {
    
    
        this.email = email;
    }

    public String getPassword() {
    
    
        return password;
    }

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

    public String getPhoneNum() {
    
    
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
    
    
        this.phoneNum = phoneNum;
    }
}

3.创建UserMapper.xml

(这里是新建一个File再后缀为xml就行,因为它的约束头要下面这样的,不是直接新建Spring config的xml哦)
(一般在resources新建一个xxx.mapper再放进去)
在这里插入图片描述

在这里插入图片描述
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">
<mapper namespace="userMapper">
    <select id="findAll" resultType="com.itheima.domain.Sys_user">   /*Sys_user是数据库对应的实体类*/
        SELECT * FROM sys_user  /*这里是sys_user是数据库真实的表*/
    </select>
</mapper>

4.编写MyBatis核心文件

(直接放在resources下就行,不用放包里,也是同样建File改后缀为xml就行,把下面的开头约束复制进去就行)
在这里插入图片描述sqlMapConfig.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="developement">
        <environment id="developement">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
                <property name="username" value="root"></property>
                <property name="password" value="root"></property>

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

    <!--加载映射文件-->
    <mappers>
        <mapper resource="com.itheima.mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

5.测试

在这里插入图片描述
MybatisTest :

package com.itheima;

import com.itheima.domain.Sys_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.Test;

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

/**
 * @author QLBF
 * @version 1.0
 * @date 2021/1/28 13:06
 */
public class MybatisTest {
    
    

    @Test
    public void test_queryall() throws IOException {
    
    
        //获得核心配置文件
        InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //执行操作  参数:UserMapper.xml的namespace+id
        List<Sys_user> sys_userList= sqlSession.selectList("userMapper.findAll");
        //打印数据
        System.out.println(sys_userList);
        //释放资源
        sqlSession.close();



    }
}

演示test_queryall():
在这里插入图片描述

二、小结

在这里插入图片描述

三、Mybatis增删改查

在这里插入图片描述

在这里插入图片描述

重点:Mybatis的事务默认不提交的,跟JDBC不一样的,所以Mybatis在增、删、改时要提交事务sqlSession.commit()(或者openSession(true)也行),查询操作不需要提交,因为它对表没影响

1.如果parameterType后写的是对象,那么#{}括号里写的是实体类的属性,而不是数据表的字段名;
2.如果parameterType后写的是基本类型,那么#{}括号里随便写任意字符串
(见下面代码)

在这里插入图片描述查一条数据时并封装成对象用selectone,用到了resultType和parameterType(resultType写对象而已,parameterType没写对象时,#{}还是随便写)

代码在上面的UserMapper.xml和测试代码改下就行,细节在代码的注释里面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
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">
<mapper namespace="userMapper">
    <!--查询数据表封装成集合输出-->
    <select id="findAll" resultType="com.itheima.domain.Sys_user">   /*Sys_user是数据库对应的实体类*/
        SELECT * FROM sys_user  /*这里是sys_user是数据库真实的表*/
    </select>
    
<!--查询一个对象数据-->
    <select id="findone" resultType="com.itheima.domain.Sys_user" parameterType="int">   /*Sys_user是数据库对应的实体类*/
        SELECT * FROM sys_user WHERE id=#{id1}/*这里是sys_user是数据库真实的表*/
    </select>


    <!--插入操作,save是随便起的,parameterType后面都是写对象类型进行传递的哦-->
    <insert id="save" parameterType="com.itheima.domain.Sys_user">
        /*这里#后的{}写的是对应上面parameterType对象里面的属性,而不是对应数据库表的哦
        (虽然一般数据库表跟实体类设置成一样,但有时不一样,这里要写的是实体类的哦)*/
        INSERT INTO sys_user VALUES(#{id},#{username},#{email},#{password},#{phoneNum})
    </insert>


    <!--修改操作-->
    <update id="update" parameterType="com.itheima.domain.Sys_user">
        UPDATE sys_user set username=#{username},password=#{password} where id=#{id}
    </update>

    <!--删除操作——基本类型,parameterType是基本类型的话,#{}里的就随便起-->
    <delete id="delete1" parameterType="java.lang.Integer">
        delete from sys_user where id=#{abc}
    </delete>

    <!--删除操作——对象类型,parameterType是对象的话,#{}里的得和对象的属性值一样-->
    <delete id="delete_duixiang" parameterType="com.itheima.domain.Sys_user">
        DELETE from sys_user where id=#{id}
    </delete>
</mapper>

MybatisTest.java:

package com.itheima;

import com.itheima.domain.Sys_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.Test;

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

/**
 * @author QLBF
 * @version 1.0
 * @date 2021/1/28 13:06
 */
public class MybatisTest {
    
    

    @Test
    //查询数据库表封装成对象
    public void test_queryall() throws IOException {
    
    
        //获得核心配置文件
        InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //执行操作  参数:UserMapper.xml的namespace+id,selectList为mybatis固定有的方法
        List<Sys_user> sys_userList= sqlSession.selectList("userMapper.findAll");
        //打印数据
        System.out.println(sys_userList);
        //释放资源
        sqlSession.close();

    }
    
	@Test
    //查询一条数据
    public void test_queryone() throws IOException {
    
    
        //获得核心配置文件
        InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //执行操作  参数:UserMapper.xml的namespace+id,selectone为mybatis固定有的方法
        Sys_user sys_user = sqlSession.selectOne("userMapper.findone", 3);
        //打印数据
        System.out.println(sys_user);
        //释放资源
        sqlSession.close();

    }

    @Test
    //增
    public void test_insert() throws IOException {
    
    
        //先模拟sys_user对象,一般都是web传过来的(这里在这里创而已)
        Sys_user sys_user=new Sys_user();
        //这里的id是自增的,所以不用设置
        sys_user.setUsername("Tom66");
        sys_user.setEmail("[email protected]");
        sys_user.setPassword("125632");
        sys_user.setPhoneNum("13800138000");
        //获得核心配置文件
        InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //执行操作  参数:UserMapper.xml的namespace+id
        sqlSession.insert("userMapper.save",sys_user);
        //mybatis执行更新操作(增删改要提交,查询不用)  一定要提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();

    }

    @Test
    //改
    public void test_update() throws IOException {
    
    
        //先模拟sys_user对象,一般都是web传过来的(这里在这里创而已)
        Sys_user sys_user=new Sys_user();
        //这里要根据对象id删除,所以要设置id了
        sys_user.setId(6);
        sys_user.setUsername("Tom333");
        sys_user.setEmail("[email protected]");
        sys_user.setPassword("123");
        sys_user.setPhoneNum("13800138000");
        //获得核心配置文件
        InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //执行操作  参数:UserMapper.xml的namespace+id
        sqlSession.update("userMapper.update",sys_user);
        //mybatis执行更新操作(增删改要提交,查询不用)  一定要提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();

    }

    @Test
    //根据基本类型删除
    public void test_delete_jiben() throws Exception {
    
    

        //获得核心配置文件
        InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //执行操作  参数:UserMapper.xml的namespace+id
        sqlSession.delete("userMapper.delete1",5);
        //mybatis执行更新操作(增删改要提交,查询不用)  一定要提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();

    }

    @Test
    //根据对象类型删除
    public void test_delete_duixiang() throws IOException {
    
    
        //先模拟sys_user对象,一般都是web传过来的(这里在这里创而已)
        Sys_user sys_user=new Sys_user();
        //这里要根据对象id删除,所以要设置id了,其他的属性可以不用设置
        sys_user.setId(6);
        //获得核心配置文件
        InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession=sqlSessionFactory.openSession();
        //执行操作  参数:UserMapper.xml的namespace+id
        sqlSession.delete("userMapper.delete_duixiang",sys_user);
        //mybatis执行更新操作(增删改要提交,查询不用)  一定要提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();

    }


}

猜你喜欢

转载自blog.csdn.net/GLOAL_COOK/article/details/113319274