MyBatis实现mapper配置并查询数据

准备数据源

因为MyBatis是一个持久层框架,所以我们在使用之前需要执行如下SQL语句备好数据源

# 删除mybatis_demo数据库
drop database if exists mybatis_demo;

# 创建mybatis_demo数据库
create database mybatis_demo;

# 使用mybatis_demo数据库
use mybatis_demo;

# 创建account表
create table user (
    id int auto_increment primary key,
    username varchar(20),
    age int,
    score int
);

# 新增数据
insert into user (id, username, age, score) values
(1,'peter', 18, 100), (2,'pedro', 24, 200),
(3,'jerry', 28, 500), (4,'mike', 12, 300),
(5,'tom', 27, 1000);

我们以查询User数据为例感受Mapper引入后和JDBC执行SQL有什么区别

MyBatis 提供了注解和XML两种方式来连接Java方法和SQL语句,首先学习注解方式使用Mapper

注解方式使用Mapper

代码实现
要想使用MyBatis首先需要导入MySQL驱动包、MyBatis框架基础包并且添加MyBatis核心配置文件

在mybatis-config.xml配置文件中添加上对应的mapper配置

<!-- mapper配置 -->
<mappers>
    <mapper class="mapper.UserMapper"/>
</mappers>

新建mapper包,并在其下新建UserMapper.java类

User模块Mapper层:UserMapper.java

package mapper;

public interface UserMapper {
    /**
     * 通过用户id查询用户名称
     *
     * @param id 用户id
     * @return 用户名称
     */
    String selectUsernameById(Integer id);
}

有了方法定义后,我们再通过注解为该方法添加上对应的SQL语句

@Select("SELECT username FROM user WHERE id = #{id}")

User模块测试类:UserTest.java

@SuppressWarnings({"Duplicates"})
public class UserTest {
    public static void main(String[] args) throws IOException, SQLException {
        // 读取配置文件
        InputStream configuration = Resources.getResourceAsStream("mybatis-config.xml");
        // 得到 SqlSessionFactory 核心类
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
        // 开始一个 sql 会话
        SqlSession session = sqlSessionFactory.openSession();
        // 得到 mapper
        UserMapper mapper = session.getMapper(UserMapper.class);
        // 调用注解的SQL
        String username = mapper.selectUsernameById(1);
        System.out.println("username: " + username);
        // 关闭会话
        session.close();
    }
}

测试结果
测试结果如下图所示:
在这里插入图片描述
表示mapper已经通过注解的方式搭建好了Java方法和SQL语句之间的桥梁,并且查询出了所需要的数据

XML方式使用Mapper

XML方式是更加强大的一种使用方式,虽然它没有注解那么方便,但是功能更强、更易维护,是 MyBatis 官方推荐的一种方式

代码实现
因为我们在mybatis-config.xml配置文件中已经添加过了mapper配置,所以说不需要在配置文件中添加额外的配置

在 UserMapper 接口中,我们再新增一个方法selectUserAgeById,该方法的作用是通过用户id查询用户年龄

User模块Mapper层:UserMapper.java

/**
 * 通过用户id查询用户年龄
 *
 * @param id 用户id
 * @return 用户年龄
 */
Integer selectUserAgeById(Integer id);

这次使用XML的方式添加SQL语句,首先在资源文件夹下新建mapper包,并在其下新建名为UserMapper的XML文件

User模块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="mapper.UserMapper">
</mapper>

namespace命名空间是每一个mapper的唯一标识,也是XML文件和Java接口类连接的标识

有了XML文件后,我们使用标签给查询年龄的方法添加上对应的SQL语句

<select id="selectUserAgeById" resultType="java.lang.Integer">
    SELECT age FROM user WHERE id = #{id}
</select>

select 标签中有两个必填属性:

  1. id:对应接口的方法名,即 selectUserAgeById,通过它 MyBatis 才能将二者对应起来
  2. resultType:对应SQL 语句的返回类型,与接口方法的返回值相同,有时会用到resultMap

测试类添加代码调用XML的SQL

User模块测试类:UserTest.java

// 调用XML的SQL
Integer age = mapper.selectUserAgeById(1);
System.out.println("age: " + age);

测试结果
测试结果如下图所示:
在这里插入图片描述
表示mapper已经通过XML的方式搭建好了Java方法和SQL语句之间的桥梁,并且查询出了所需要的数据

select-resultType
代码实现
在UserMapper.xml文件中,我们新增 selectUserById 标签,该 select 标签的作用是:通过id查询用户

<select id="selectUserById" resultType="">
    SELECT * FROM user WHERE id = #{id}
</select>

上面的内容返回的是所有字段值,我们需要自己创建实体类来存储查出来的值

在entity包下创建User实体类:User.java

package entity;

public class User {
    private Integer id;
    private String username;
    private Integer age;
    private Integer score;
    // 省略getter&setter方法
    // 省略toString方法
}

把UserMapper.xml文件中selectUserById标签的返回类型改为上面创建的实体类

resultType="entity.User"

User模块Mapper层:UserMapper.java

/**
 * 通过用户id查询用户信息
 *
 * @param id
 * @return
 */
User selectUserById(Integer id);

User模块测试类:UserTest.java

// 调用通过用户id查询用户信息的方法
User user = mapper.selectUserById(1);
System.out.println(user);

测试结果

在这里插入图片描述
在上面这段select标签中,SQL语句返回的是一个复杂对象,即resultType上指定的 User

select-resultMap
MyBatis自动帮助我们映射数据库数据和Java对象,其实这是MyBatis在幕后帮我们创建了resultMap对象,我们也可手动定义

代码实现
User模块Mapper层配置文件:UserMapper.xml

<resultMap id="userMap" type="entity.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="age" column="age"/>
    <result property="score" column="score"/>
</resultMap>

上标签中有和两个子标签

其中标签是主键,其它字段均使用 result 标签来映射

标签有property和column两个属性

其中 property 是 Java 对象中的属性名称,column 是数据表与之对应的字段名称

把UserMapper.xml文件中selectUserById标签的返回类型改为上面创建的resultMap

resultMap="userMap"

测试结果
在这里插入图片描述
测试结果和修改前一样,说明MyBatis确实自动帮助我们做了数据映射,但是对于复杂的对象,比如字段名和属性名不同的情况下,我们就必须自定义resultMap了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatismapper配置文件是用来定义SQL语句与Java方法之间的映射关系的文件。这个文件通常采用XML格式,并且与对应的Java接口一一对应。 在mapper配置文件中,我们需要配置的主要内容包括: 1. 命名空间(namespace):用于定义这个mapper文件的命名空间,其值通常为对应的Java接口的全限定名。 2. SQL语句的定义:使用<select>、<insert>、<update>和<delete>等标签来定义对应的SQL语句。 3. 输入参数(parameterType):指定SQL语句接收的输入参数的类型,可以是基本类型、Java对象或者集合。 4. 输出结果(resultType):指定SQL语句的返回结果的类型,可以是基本类型、Java对象或者集合。 5. SQL语句的具体实现:使用相应的标签编写SQL语句。在SQL语句中,可以使用#{parameter}来表示输入参数,使用${variable}来表示变量。 6. 与Java方法的映射关系:将Java接口中的方法与SQL语句进行映射,通过指定SQL语句的id和Java方法的名称来实现映射。 7. 结果映射(resultMap):用于将SQL查询结果映射到Java对象中,通过指定映射规则,可以将查询结果自动转换为Java对象。 使用mapper配置文件可以使得SQL语句与Java代码相分离,提高了代码的可维护性和可读性。同时,MyBatis还提供了一些高级功能,如动态SQL、多表关联查询等,可以通过mapper配置文件来实现。总的来说,mapper配置文件是MyBatis中非常重要的一部分,它定义了数据访问层的实现细节,为Java程序提供了方便灵活的数据访问方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值