Mybatis框架快速入门-2

          2.1 入门案例

MyBatis 开发准备

搭建 MyBatis 开发环境,实现第一个案例

2.1.1 使用 Mybatis

准备 下载 mybatis https://github.com/mybatis/mybatis-3/releases

2.1.2 搭建 MyBatis 开发环境

(1) 创建 mysql 数据库和表 数据库名 ssm ;表名 student

  

 

 

(2) 创建 maven 工程

在pom.xml文件中添加Mybatis依赖

  

<?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>org.example</groupId>
  <artifactId>Mybatis-01</artifactId>
  <version>1.0-SNAPSHOT</version>



  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <!--依赖列表-->
  <dependencies>
    <!--Mybatis依赖-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.1</version>
    </dependency>
  <!--Mysql依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>
  <!--单元测试-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <!--资源插件,处理src/main/java目录中的xml文件-->
    <resources>
      <resource>
        <directory>src/main/java</directory><!--所在的目录-->
        <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
</project>

编写一个与数据库属性一致的实体类对象

  

package org.example.domain;

public class Student {
    private Integer id;
    private String name;
    private String email;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }

    public Integer getAge() {
        return age;
    }

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

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

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

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "学生信息{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

  编写Dao接口StudentDao  

  

package org.example.Dao;

import org.example.domain.Student;

import java.util.List;

public interface StudentDao {
    //查询一个学生
    Student selectStudentById(Integer id);
}

  编写Dao接口Mapper映射文件StudentDao.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">
<!--
    namespace:必须有值,自定义的唯一字符串
               推荐使用:dao接口的全限定名
-->
<mapper namespace="org.example.Dao.StudentDao">
    <!--
    <select>: 表示查询数据, 标签中必须是 select 语句
        id: sql 语句的自定义名称,推荐使用 dao 接口中方法名称,
            使用名称表示要执行的 sql 语句
    resultType: 告诉mybatis,执行sql语句,把数据赋值给哪个类型的java对象。
        resultType的值现在使用的java对象的全限定名称
    -->
    <select id="selectStudentById" resultType="org.example.domain.Student">
    <!--要执行的sql语句-->
        select * from Student where id =   #{StudentId}
    </select>
</mapper>
<!--
        1.约束文件:
            http://mybatis.org/dtd/mybatis-3-mapper.dtd
            约束文件的作用:定义和限制当前文件中可以使用的标签和属性,以及标签出现的顺序
        2.mapper是根标签
            namespace是命名空间,必须有值,自定义的唯一字符串
               推荐使用:dao接口的全限定名
            作用:参与识别sql语句的作用
         3.在mapper里面可以写<insert><update><delete><select>
            <insert>里面是<insert>语句,表示执行insert操作
            <update>里面是<update>语句
            <delete>里面是<delete>语句
            <select>里面是 <select>语句
-->

  创建Mybatis主配置文件

  项目 src/main 下创建 resources 目录,设置 resources 目录为 resources root

  创建主配置文件:名称为 mybatis.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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--配置数据源:创建Connection对象-->
            <dataSource type="POOLED">
                <!--driver:驱动内容-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--链接数据库的url-->
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&amp;characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="xxxxx"/>
            </dataSource>
        </environment>
    </environments>
    <!--
        指定其他mapper文件的位置
        其他mapper文件的目的是找到其他文件的sql语句
    -->
    <mappers>
        <!--
            使用mapper的resource属性指定的mapper文件的路径
                这个路径是从target/classes路径开启的

                使用注意:
                    resource=“mapper文件的路径,使用/分割路径”
                    一个mapper resource指定一个mapper文件

        -->
        <mapper resource="org/example/Dao/StudentDao.xml"/>
    </mappers>
</configuration>

  创建测试类MybatisTest

  

package org.example;

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.example.domain.Student;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;


public class MyTest {
    @Test
    public void testSelectStudentById() throws IOException {
        //调用Mybatis某个对象的方法,执行Mapper文件的sql语句
        //Mybatis核心类:SqlSessionFactory

        //1.定义Mybatis主配置文件的位置,从类路径开始的相对路径
        String config = "Mybatis.xml";
        //2.读取主配置文件,使用Mybatis框架中的Resource类  Resources使用的是import org.apache.ibatis.io.Resource
        InputStream in = Resources.getResourceAsStream(config);
        //3.创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder类的build(Inputstream)方法
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //4.获取SqlSession对象
        SqlSession session = factory.openSession();
        //5.指定要执行的Sql语句id
        //sql的id = namespace+“.”+select|update|insert|delete标签的id属性值
        String sqlId = "org.example.Dao.StudentDao"+"."+"selectStudentById";
        //6.通过SqlSession的方法,执行sql语句
        Student student = session.selectOne(sqlId);
        System.out.println("使用Mybatis查询一个学生:"+student);
        //7.关闭SqlSession对象
        session.close();
    }

    @Test
    public void testSelectStudentById2() throws IOException {
        //调用Mybatis某个对象的方法,执行Mapper文件的sql语句
        //Mybatis核心类:SqlSessionFactory

        //1.定义Mybatis主配置文件的位置,从类路径开始的相对路径
        String config = "Mybatis.xml";
        //2.读取主配置文件,使用Mybatis框架中的Resource类  Resources使用的是import org.apache.ibatis.io.Resource
        InputStream in = Resources.getResourceAsStream(config);
        //3.创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder类的build(Inputstream)方法
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //4.获取SqlSession对象
        SqlSession session = factory.openSession();
        //5.指定要执行的Sql语句id
        //sql的id = namespace+“.”+select|update|insert|delete标签的id属性值
        String sqlId = "org.example.Dao.StudentDao"+"."+"selectStudentById";
        //6.通过SqlSession的方法,执行sql语句
        Student student = session.selectOne(sqlId,1002);
        System.out.println("使用Mybatis查询一个学生:"+student);
        //7.关闭SqlSession对象
        session.close();
    }
}

 

运行结果

  

 

 

 

 

 配置日志功能

  mybatis.xml 文件加入日志配置,可以在控制台输出执行的 sql 语句和参数

  在Myybatis.xml文件中<configuration>标签中加入

<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
再次运行,查看结果
  

 

     2.1.3 insert 操作

 (1) StudentDao 接口中增加方法

  int insertStudent(Student student);

 (2) StudentDao.xml 加入 sql 语句

 <!--添加操作insert
        传入Mybatis是一个java对象,使用#{属性名}来获取属性的值
        属性值放到#{}占位符的位置,Mybatis执行此属性,对应的getXXX()
        例如#{id},执行getID();
    -->
    <insert id="insertStudent">
        insert into student(id,name,email,age)
            values (#{id},#{name},#{email},#{age})
    </insert>

  (3) 增加测试方法

  

@Test
    public void testInsert() throws IOException {

        String config = "Mybatis.xml";
        InputStream in = Resources.getResourceAsStream(config);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = factory.openSession();
        //5.指定要执行的Sql语句id
        //sql的id = namespace+“.”+select|update|insert|delete标签的id属性值
        String sqlId = "org.example.Dao.StudentDao"+"."+"insertStudent";
        //6.通过SqlSession的方法,执行sql语句
       Student student = new Student();
       student.setId(1003);
       student.setName("王五");
       student.setEmail("789@163.com");
       student.setAge(20);

        int rows = session.insert(sqlId,student);
        //7.提交事务
        session.commit();
        System.out.println("增加记录行数"+rows);
        //8.关闭SqlSession对象
        session.close();
    }

  查看结果

  注意:不能添加相同的数据,否则会报错

 

posted @ 2022-02-22 20:19  Soleili  阅读(18)  评论(0编辑  收藏  举报