MyBatis实现Mapper配置并查询数据


Mapper 作为 Java 方法和 SQL 语句之间的桥梁,来更好地去使用 SQL

 

什么是Mapper

MyBatis工程搭建 中我们主要讲解的是 MyBatis 如何连接数据库,具体执行 SQL 语句使用的是 JDBC 方式

但在实际应用中是不会选择 JDBC 来执行 SQL 的,MyBatis 提供了 Mapper 作为 Java 方法和 SQL 语句之间的桥梁,来帮助我们更好地去使用 SQL

准备数据源

创建

drop database if exists mybatis_demo;

create database mybatis_demo;

use mybatis_demo;

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

 

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

<!-- mapper配置 -->

<mappers>

    <mapper class="mapper.UserMapper"/>

</mappers>

 

新建mapper包并新建UserMapper.java类

package mapper;

public interface UserMapper {

String selectUsernameById(Integer id);

}

添加SQL语句

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

 

测试类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 = new SqlSessionFactoryBuilder().build(configuration);

SqlSession session = sqlSessionFactory.openSession();

UserMapper mapper = session.getMapper(UserMapper.class);

String username = mapper.selectUsernameById(1);

System.out.println("username: " + username);

session.close();

}

}

注解方式使用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();
}
}

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文件后,我们使用<select></select>标签给查询年龄的方法添加上对应的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);

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-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"

					


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM