mybatis官方文档之第一个mybatis程序实操

导读:本篇文章讲解 mybatis官方文档之第一个mybatis程序实操,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

mysql数据库准备工作:

首先,我们需要在mysql数据库中,建立数据库和数据表:

//创建数据库
create database my_batis;
//创建表
create table students(id int not null,name varchar(30) default null,pwd varchar(30) default null);
//插入数据
insert into students(id,name,pwd) values(1,'小明','1234');
insert into students(id,name,pwd) values(2,'小红','1234121');
insert into students(id,name,pwd) values(3,'小黄','4354');

IDE准备工作:

新建工程项目:

在这里插入图片描述

创建完成后,请删除src:

在这里插入图片描述

右击父项目[mybatis3]:

在这里插入图片描述

建立子项目:

在这里插入图片描述

自行检查包和类所放的位置,主要不要放错啦

在这里插入图片描述

配置依赖:

在这里插入图片描述

注:MyBatis包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易

子项目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">
    <parent>
        <artifactId>mybatis1</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mybatis</artifactId>

    <properties>
        <maven.compiler.source>18</maven.compiler.source>
        <maven.compiler.target>18</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>

            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

</project>

父项目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>org.example</groupId>
    <artifactId>mybatis1</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>mybatis</module>
    </modules>

    <properties>
        <maven.compiler.source>18</maven.compiler.source>
        <maven.compiler.target>18</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--使用Maven来构建项目-导入maven依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>

            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

mybatis_utils:

package dao;
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 mybatis_utils {
    private  static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            //使用mybatis获取SqlSessionFactory对象
  				String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession () {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }
}

注:从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置,但也可以使用任意的输入流,以(InputStream)实例,比如用文件路径字符串或 file:// URL 构造的输入流

user_interface:

方法1:通过XML配置映射文件来进行映射:

package dao;
import pojo.user;
import java.util.List;
public interface user_interface {
    List<user> getUserList();
}

方法2:通过注解进行映射—->不推荐:

package dao;
import org.apache.ibatis.annotations.Select;
import pojo.user;
import java.util.List;
public interface user_interface {
    @Select("select * from students")
    List<user> findAll();
}

user:

注意!实体类中的属性名一定要和数据库中表的字段名保持一致,否则会出现查询字段值为空的情况

package pojo;

public class user {
    private  int id;
    private String name;
    private  String pwd;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return pwd;
    }
    public void setPassword(String password) {
        this.pwd = password;
    }
    public user() {
    }
    public user(int id,String name,String password){
        this.id=id;
        this.name=name;
        this.pwd=password;
    }
    @Override
    public String toString() {
        return "user{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + pwd + '\'' +
                '}';
    }
}

通过注解进行映射的mybatis-condig.xml文件:

注意 :XML 头部的声明,它用来验证 XML 文档的正确性,environment 元素体中包含了事务管理和连接池的配置

mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="xxx"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="dao"/>
    </mappers>
</configuration>

通过XML配置映射文件来进行映射的mybatis.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="xxx"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="userMapper.xml"/>
    </mappers>
</configuration>

通过XML配置映射文件来进行映射的UserMapper.xml文件:

注:使用注解的方式进行映射不需要添加该文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.user_interface" >
    <select id="getUserList" resultType="pojo.user">
        select * from mybatis.user
    </select>
</mapper>

在一个 XML映射文件中,可以定义无数个映射语句,这样一来,XML 头部和文档类型声明部分就显得微不足道了,它在命名空间 “dao.user_interface” 中定义了一个名为 “getUserList” 的映射语句,这样你就可以用全限定名 “dao.user_interface.getUserList” 来调用映射语句了

命名空间小tips:

在之前版本的 MyBatis 中,命名空间(Namespaces)的作用并不大,是可选的。,但现在,随着命名空间越发重要,必须指定命名空间

命名空间的作用有两个:

利用更长的全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定

命名解析:为了减少输入量,MyBatis 对所有具有名称的配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则

全限定名(比如 “com.mypackage.MyMapper.selectAllThings)将被直接用于查找及使用

短名称(比如 “selectAllThings”)如果全局唯一也可以作为一个单独的引用,如果不唯一,有两个或两个以上的相同名称:
(比如“com.foo.selectAllThings” 和 “com.bar.selectAllThings”),那么使用时就会产生“短名称不唯一”的错误,这种情况下就必须使用全限定名

通过注解进行映射的测试类:

package dao.user;
import dao.mybatis_utils;
import dao.user_interface;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.user;
import java.util.List;
public class test {
    @Test
    public void tests(){
        //获得sqlSession对象
        SqlSession sqlSession= mybatis_utils.getSqlSession();
        user_interface user_interface=sqlSession.getMapper(dao.user_interface.class);
        List<user> userList=user_interface.findAll();
        for(user user:userList){
            System.out.println(user);
        }
        //关闭sqlSession
        sqlSession.close();
    }
}

映射器是一些绑定映射语句的接口,映射器接口的实例是从 SqlSession 中获得的,虽然从技术层面上来讲,任何映射器实例的最大作用域与请求它们的 SqlSession 相同,但方法作用域才是映射器实例的最合适的作用域。,也就是说,映射器实例应该在调用它们的方法中被获取,使用完毕之后即可丢弃 ,映射器实例并不需要被显式地关闭,尽管在整个请求作用域保留映射器实例不会有什么问题,但是你很快会发现,在这个作用域上管理太多像 SqlSession 的资源会让你忙不过来,因此,最好将映射器放在方法作用域内,就像上述实例一样。

通过XML配置映射文件来进行映射的测试类:

package dao.user;
import dao.mybatis_utils;
import dao.user_interface;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.user;
import java.util.List;
public class test {
    @Test
    public void tests(){
        //获得sqlSession对象
      SqlSession sqlSession= mybatis_utils.getSqlSession();
      //方式1:
        user_interface user_interface=sqlSession.getMapper(dao.user_interface.class);
        List<user> userList=user_interface.getUserList();
        for(user user:userList){
            System.out.println(user);
        }
        //关闭sqlSession
        sqlSession.close();
    }
}

输出:

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/81382.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!