0
点赞
收藏
分享

微信扫一扫

Mybatis的简单介绍和基本使用

小a草 2022-01-26 阅读 93

Mybatis的简单介绍和基本使用

1、数据库操作框架的历程

1、JDBC

在这里插入图片描述

2、DBUtils

3、Hibernate

在这里插入图片描述

Hibernate优点

Hibernate缺点

4、JDBCTemplate

JDBCTemplate优点

JDBCTemplate缺点

5、Mybatis

Mybatis优点

Mybatis缺点

2、快速搭建Mybatis项目

2.1、新建一个maven项目,并导入pom依赖

<!-- mybatis核心驱动 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>

<!-- 导入mysql对应版本的驱动(根据自己安装的版本) -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.24</version>
</dependency>

如何找到适合与自己安装的mysql的连接依赖:依照下面的图去寻找即可。

在这里插入图片描述

在这里插入图片描述

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

2.2、配置一个SqlSessionFactory的文件

<?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="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

在这里插入图片描述

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

3、mybatis的简单使用

package cool.ale.pojo;

/**
 * @author dujlc
 */
public class Emp {
    private Integer id;

    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
<?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如果是基于statementId的方式去执行SQL就可以随便写
        如果是基于接口绑定的方式就需要输入相应接口的完整限定名-->
<mapper namespace="cool.ale.mapper.EmpMapper">

  <select id="selectEmp" resultType="cool.ale.pojo.Emp">
    select * from emp where id = #{id}
  </select>

</mapper>

3.1、基于statementId的方式去调用SQL

<mappers>
    <mapper resource="EmpMapper.xml"/>
</mappers>
package cool.ale.tests;

import cool.ale.pojo.Emp;
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 Test {

    /**
     * 基于statementId的方式去执行SQL
     * @throws IOException
     */
    @org.junit.Test
    public void Test01() throws IOException {
        // 从 xml中构建 SqlSessionFactory
        String resource = "mybatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 获取数据的第一种方式
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 这里的第一个参数是EmpMapper中的namespace + 具体sql语句的id
            // 第二个是传入sql的参数
            Emp emp = (Emp) session.selectOne("cool.ale.pojo.EmpMapper.selectEmp", 101);
            System.out.println(emp);
        }
    }
}

3.2、基于接口绑定的方式调用SQL

package cool.ale.mapper;

import cool.ale.pojo.Emp;

public interface EmpMapper {
    /**
     * 根据id查询sql
     * @param id id参数
     * @return
     */
    Emp selectEmp(Integer id);

}
<?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="cool.ale.mapper.EmpMapper">

  <select id="selectEmp" resultType="cool.ale.pojo.Emp">
    select * from emp where id = #{id}
  </select>

</mapper>
<mappers>
    <mapper class="cool.ale.mapper.EmpMapper"></mapper>
</mappers>

在这里插入图片描述

package cool.ale.tests;

import cool.ale.mapper.EmpMapper;
import cool.ale.pojo.Emp;
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 Test {

    /**
     *
     * 基于接口绑定的方式
     * @throws IOException
     */
    @org.junit.Test
    public void Test02() throws IOException {
        // 从 xml中构建 SqlSessionFactory
        String resource = "mybatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 获取数据的第二种方式
        try (SqlSession session = sqlSessionFactory.openSession()) {
            EmpMapper mapper = session.getMapper(EmpMapper.class);
            Emp emp = mapper.selectEmp(101);
            System.out.println(emp);
        }
    }
}

3.3、基于注解的方式调用Sql

package cool.ale.mapper;

import cool.ale.pojo.Emp;
import org.apache.ibatis.annotations.Select;

public interface EmpMapper {
    /**
     * 根据id查询sql
     * @param id id参数
     * @return
     */
    @Select("select * from emp where id = #{id}")
    Emp selectEmp(Integer id);

}
<?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如果是基于statementId的方式去执行SQL就可以随便写
        如果是基于接口绑定的方式就需要输入相应接口的完整限定名-->
<mapper namespace="cool.ale.mapper.EmpMapper">

  <!--<select id="selectEmp" resultType="cool.ale.pojo.Emp">
    select * from emp where id = #{id}
  </select>-->

</mapper>
/**
 *
 * 基于注解的方式
 * @throws IOException
 */
@org.junit.Test
public void Test03() throws IOException {
    // 从 xml中构建 SqlSessionFactory
    String resource = "mybatis.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    // 获取数据的第二种方式
    try (SqlSession session = sqlSessionFactory.openSession()) {
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        Emp emp = mapper.selectEmp(101);
        System.out.println(emp);
    }
}

4、mybatis的增删改查操作

4.1、准备工作

<!-- mybatis核心驱动 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>

<!-- 导入mysql对应版本的驱动(根据自己安装的版本) -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.24</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
<?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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--<mapper resource="EmpMapper.xml"/>-->
        <mapper class="cool.ale.mapper.EmpMapper"></mapper>
    </mappers>
</configuration>
package cool.ale.mapper;

import cool.ale.pojo.Emp;

public interface EmpMapper {
    /**
     * 根据id查询sql
     * @param id id参数
     * @return
     */
    Emp selectEmp(Integer id);

}
package cool.ale.pojo;

/**
 * @author dujlc
 */
public class Emp {
    private Integer id;

    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
<?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如果是基于statementId的方式去执行SQL就可以随便写
        如果是基于接口绑定的方式就需要输入相应接口的完整限定名-->
<mapper namespace="cool.ale.mapper.EmpMapper">

  <select id="selectEmp" resultType="cool.ale.pojo.Emp">
    select * from emp where id = #{id}
  </select>

</mapper>

4.2、具体操作

<?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如果是基于statementId的方式去执行SQL就可以随便写
        如果是基于接口绑定的方式就需要输入相应接口的完整限定名-->
<mapper namespace="cool.ale.mapper.EmpMapper">

  <select id="selectEmp" resultType="cool.ale.pojo.Emp">
     select * from emp where id = #{id}
  </select>

  <insert id="insertEmp">
      INSERT INTO `mybatis`.`emp`(`id`, `name`) VALUES (#{id}, #{name});
  </insert>

   <update id="updateEmp">
      UPDATE emp SET name = #{name} WHERE id = #{id};
   </update>

   <delete id="deleteEmp">
      DELETE FROM emp WHERE id = #{id};
   </delete>

</mapper>
package cool.ale.mapper;

import cool.ale.pojo.Emp;

public interface EmpMapper {
    /**
     * 根据id查询sql
     * @param id id参数
     * @return
     */
    Emp selectEmp(Integer id);

    /**
     * 插入Emp信息
     * @param emp   传入需要插入的emp对象
     * @return
     */
    Integer insertEmp(Emp emp);

    /**
     * 需要更新的对象
     * @param emp   传入需要更新的emp对象
     * @return
     */
    Integer updateEmp(Emp emp);

    /**
     * 需要删除的对象
     * @param id 需要删除的emp对象的id
     * @return
     */
    Integer deleteEmp(Integer id);

}
package cool.ale.tests;

import cool.ale.mapper.EmpMapper;
import cool.ale.pojo.Emp;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;


public class MybatisCRUDTest {

    private SqlSession session = null;

    @Before
    public void before() throws IOException {
        // 从 xml中构建 SqlSessionFactory
        String resource = "mybatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // true是设置自动提交
        session = sqlSessionFactory.openSession(true);

    }

    @Test
    public void select() {
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        Emp emp = mapper.selectEmp(101);
        System.out.println(emp);
    }

    @Test
    public void Insert() {
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        Emp emp = new Emp();
        emp.setId(102);
        emp.setName("张三");
        Integer result = mapper.insertEmp(emp);
        System.out.println(result.toString());
    }

    @Test
    public void Update() {
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        Emp emp = new Emp();
        emp.setId(102);
        emp.setName("李四");
        Integer result = mapper.updateEmp(emp);
        System.out.println(result.toString());
    }

    @Test
    public void Delete() {
        EmpMapper mapper = session.getMapper(EmpMapper.class);
        Integer id = 102;
        Integer result = mapper.deleteEmp(id);
        System.out.println(result.toString());
    }
}
举报

相关推荐

0 条评论