MyBatis入门

MyBatis入门案例

一、实现步骤

  1. 创建数据库db1,在数据库中新建一个表student

  2. 创建一个maven项目

  3. 修改pom.xml

    (1)加入依赖:mybatis依赖,mysql驱动,junit单元测试

    (2)在加入资源插件

  4. 创建实体类Student。定义属性和数据库表中列名保持一致

  5. 创建Dao接口,在该接口中定义一些操作数据库的方法

  6. 创建一个xml文件(mapper文件),该文件是用来写sql语句的。

    (1)该文件叫做sql映射文件,一般一个表对应一个mapper文件(sql映射文件)。

    (2)该文件与Dao接口在同一个目录下,文件名与Dao接口名文件名一致。

  7. 创建mybatis主配置文件,一个项目一个配置文件,放在resources目录下。

    (1)定义创建连接实例的数据源(DataSources),即JDBC中的Connection对象。

    (2)指定其他mapper文件(sql映射文件)的位置信息。

  8. 创建测试内容。

    使用main()方法,测试mybatis访问数据库

    或者使用junit访问数据库。

二、具体流程

  1. 创建数据库db1,在数据库中新建一个表student
    在这里插入图片描述

  2. 创建一个maven项目
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 修改pom.xml
    **(1)**加入依赖:mybatis依赖,mysql驱动,junit单元测试
    **(2)**在加入资源插件, 主要作用是处理编译src/main/java/目录中的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>com.bipowernode</groupId>
  <artifactId>ch01-first</artifactId>
  <version>1.0</version>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>15</maven.compiler.source>
    <maven.compiler.target>15</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>

  1. 创建实体类Student。定义属性和数据库表中列名保持一致。
package com.bipowernode.domain;

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

    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;
    }

    public String getEmail() {
        return email;
    }

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

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "学生实体的信息{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}
  1. 创建Dao接口,在该接口中定义一些操作数据库的方法
package com.bipowernode.dao;

import com.bipowernode.domain.Student;

public interface StudentDao {

    //创建一个查询一个学生的方法:
    public Student selectStudentById(Integer id);

    //创建一个添加学生的方法
    //返回值为int, 表示本次操作影响的数据库行数
    public int insertStudent(Student student);
}
  1. 创建一个StudentDao.xml文件(mapper文件,也即sql映射文件),该文件是用来写sql语句的。
    **(1)**该文件叫做sql映射文件,一般一个表对应一个mapper文件(sql映射文件)。
    **(2)**该文件与Dao接口在同一个目录下,文件名与Dao接口名文件名一致。
<?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文件-->

<!--mapper是根标签
    namespace: 命名空间, 必须有值,不能为空。唯一值
               推荐使用Dao接口的全限定名称。
-->
<mapper namespace="com.bipowernode.dao.StudentDao">
        
    <!--查询一个学生student: select
        <select>:表示查询操作,里面是select语句
         id: 要执行sql语句的唯一标识,是一个自定义字符串。
             推荐使用dao接口的方法名称
         resultTYpe: 告诉mybatis, 执行sql语句,把数据赋值给哪个类型的就java对象。
                     该值现在是使用java对象的全限定名称。
                     只有查询时才具有查询结果返回类型,所以只有在sql语句是select时才需要用该属性。
    -->
    <select id="selectStudentById" resultType="com.bipowernode.domain.Student">
        select * from student where id=1001
    </select>
  1. 创建mybatis主配置文件,一个项目一个配置文件,放在resources目录下。
    **(1)**定义创建连接实例的数据源(DataSources),即JDBC中的Connection对象。
    **(2)**指定其他mapper文件(sql映射文件)的位置信息。
<?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>
    
    <!--设置日志,运行代码时会在控制台输出日志-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    
    <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/db1?useUnicode=true&amp;characterEncoding=UTF-8"/>
                <!--用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定其他mapper文件的位置:
         目的是找到其他文件的sql语句
    -->
    <mappers>
        <!--使用mapper的resource属性指定mapper(sql映射文件)文件的路径。
            这个路径是从target/classes路径开启的
            使用注意:
                resource="mapper(sql映射文件)文件的路径,使用/ 分割路径"
                一个mapper resource 指定一个mapper(sql映射文件)文件
        -->
        <mapper resource="com/bipowernode/dao/StudentDao.xml"/>
    </mappers>
</configuration>
  1. 创建测试内容。

    使用main()方法,测试mybatis访问数据库

    或者使用junit访问数据库。

    查询学生信息测试用例。

    package com.bipowernode;
    
    import com.bipowernode.domain.Student;
    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;
    
    public class MyTest {
    
        //测试mybatis执行sql语句
        @Test
        public void testSelectStudentById() throws IOException {
            //该方法的目的是调用mybatis某个对象的方法,执行mapper文件中的sql语句
    
            //mybatis核心类:sqlSessionFactory
            //1. 定义mybatis主配置文件的位置,从类路径开始的相对路径
            String resource = "mybatis.xml";
            //2. 读取主配置文件,使用mybatis框架中的Resources类
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //3. 创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder类
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    
            //4. 获取SqlSession对象
            SqlSession session = factory.openSession();
    
            //5. 指定要执行sql语句的id
            //sql的id = namespace+“.”+ select|update|insert|delete标签的id属性值
            String sqlId = "com.bipowernode.dao.StudentDao"+"."+"selectStudentById";
    
            //6. 通过SqlSession的方法,执行sql语句
            Student student = session.selectOne(sqlId);
            System.out.println("使用mybatis查询一个学生"+ student);
    
            //7. 关闭SqlSession对象
            session.close();
        }
        
    }
    

    测试结果如下:
    在这里插入图片描述

    上述测试用例是在mapper文件(sql映射文件)中写出固定的查询语句,写出了具体的查询条件。若想实现动态查询,动态输入查询条件,输出对应的查询结果,显然上述代码实现比较麻烦,先对上述部分代码进行修改。

  • 先修改mapper文件(sql映射文件)中对应部分的代码
    <!--#{studentId}: 占位符, 表示从java程序中传入过来的数据-->
    <select id="selectStudentById" resultType="com.bipowernode.domain.Student">
        select * from student where id=#{studentId}
    </select>
  • 再修改测试代码中对应部分的代码
        //6. 通过SqlSession的方法,执行sql语句。这里可以动态传入需要查询的id
        Student student = session.selectOne(sqlId,1002);

查询结果相同。

添加学生信息测试用例

  • 先在StudentDao.xml文件加入对应的代码
    <!--添加insert
        原来是: insert into student value(1003, "李峰", "lifeng@qq.com", 26)

        如果实现动态传入数值,则:
        传入给mybatis是一个java对象,使用#{属性名}获取此属性的值
        属性值放入到#{}占位符的位置.然后mybatis执行此属性对应的getXXX()方法。

        例如:#{id}, mybatis执行getId();
    -->
    <insert id="insertStudent">
        insert into student value(#{id}, #{name}, #{email}, #{age})
    </insert>
  • 再在测试代码中添加对应的代码
@Test
    public void testInsertStudent2() throws IOException {

        String resource = "mybatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = factory.openSession();

        String sqlId = "com.bipowernode.dao.StudentDao"+"."+"insertStudent";

        Student student = new Student();
        student.setId(1004);
        student.setName("李思思");
        student.setEmail("lisisi@qq.com");
        student.setAge(22);

        int rows = session.insert(sqlId,student);
        System.out.println("使用mybatis添加一个学生,影响行数="+ rows);

        //当向对数据库表进行添加修改操作时,必须添加提交操作,否则数据库表无变化!!
        session.commit();
        
        session.close();
    }

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值