What is a mapper in Java MyBatis?

Abigail 37 Published: 08/20/2024

What is a mapper in Java MyBatis?

I'd be happy to explain what a mapper is in Java MyBatis!

In the context of Java MyBatis, a mapper is a class that acts as an interface between your Java application and your database. It's a crucial component that enables you to interact with your database using SQL or stored procedures, while also providing a convenient and type-safe way to retrieve data from your database.

Think of a mapper like a translator between your Java code and your database. You can use it to execute SQL queries, fetch data from the database, or even perform CRUD (Create, Read, Update, Delete) operations. Mappers provide a declarative programming paradigm, allowing you to describe what you want to do with your data without writing explicit database interaction code.

Here's how it typically works:

You define a mapper interface by extending the Mapper interface provided by MyBatis. In this interface, you specify the SQL queries or stored procedures that will be used to interact with your database. This is done using annotations like @Select, @Insert, @Update, and @Delete. MyBatis takes care of executing these queries on behalf of your application. It generates the required SQL code based on the annotations you provided in your mapper interface. You can then use the generated SQL query or stored procedure to retrieve data from the database or perform CRUD operations.

Mappers are incredibly powerful and flexible, allowing you to decouple your business logic from your database interactions. This makes it easier to maintain and evolve your application over time.

For example, let's say you have a User class that represents a user in your system. You can create a UserMapper interface that provides methods for retrieving users by ID or username:

public interface UserMapper {

@Select("SELECT * FROM users WHERE id = #{id}")

public User getUserById(int id);

@Select("SELECT * FROM users WHERE username = #{username}")

public User getUserByUsername(String username);

}

In this example, the UserMapper interface defines two methods: getUserById and getUserByUsername. These methods are annotated with SQL queries that retrieve a user by their ID or username, respectively. MyBatis takes care of executing these queries when you call the corresponding methods on your UserMapper instance.

By using mappers in Java MyBatis, you can write robust, maintainable, and scalable code that effectively interacts with your database.

I hope this helps clarify what a mapper is in Java MyBatis!

Java mybatis mapper tutorial

MyBatis Mapper Tutorial for Beginners

Welcome to this comprehensive MyBatis Mapper tutorial! In this article, we'll explore the world of MyBatis and learn how to create a simple CRUD (Create, Read, Update, Delete) application using Java and MySQL.

What is MyBatis?

MyBatis is an open-source persistence framework that simplifies database interactions. It's designed to work with any database that has a JDBC driver, including MySQL, PostgreSQL, Oracle, and more. MyBatis allows you to write SQL in your Java code, which can be useful when working with complex databases or legacy systems.

Setting Up Your Project

To start this tutorial, you'll need:

Eclipse (or any other IDE): Download and install Eclipse. Maven: Install the Maven plugin for Eclipse to manage dependencies. MySQL: Create a new database and username/password combination. MyBatis: Add MyBatis as a dependency in your pom.xml file.

Here's an example pom.xml file:


org.mybatis

mybatis

3.4.1

mysql

mysql-connector-java

8.0.23

Creating a Simple CRUD Application

Let's create a simple CRUD application to demonstrate MyBatis functionality. We'll use the User table in our MySQL database.

Create a new Java class: Name it UserMapper.java.
public interface UserMapper {

// CRUD methods go here

}

Define your CRUD methods: Use MyBatis annotations (@Insert, @Update, etc.) to define your CRUD methods.
public interface UserMapper {

@Insert("INSERT INTO users (name, email) VALUES (#{name}, #{email})")

int insertUser(User user);

@Select("SELECT * FROM users WHERE id = #{id}")

User getUser(int id);

@Update("UPDATE users SET name = #{newName} WHERE id = #{id}")

void updateUser(User user);

@Delete("DELETE FROM users WHERE id = #{id}")

void deleteUser(int id);

}

Create a User class: Define your domain object (in this case, the User class).
public class User {

private int id;

private String name;

private String email;

// getters and setters

}

Create a MyBatisConfig.xml file: Configure MyBatis to use your MySQL database.

"http://mybatis.org/dtd/mybatis-3.dtd">

Create a UserDAO.java file: Implement your CRUD logic using the UserMapper interface.
public class UserDAO {

private UserMapper userMapper;

public UserDAO() {

// load the MyBatis configuration

String resource = "MyBatisConfig.xml";

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// get the mapper

userMapper = sqlSessionFactory.getConfiguration().getMapper(UserMapper.class);

}

public void insertUser(User user) {

userMapper.insertUser(user);

}

public User getUser(int id) {

return userMapper.getUser(id);

}

public void updateUser(User user) {

userMapper.updateUser(user);

}

public void deleteUser(int id) {

userMapper.deleteUser(id);

}

}

Test your CRUD application: Create a Main.java file to test your CRUD application.
public class Main {

public static void main(String[] args) {

UserDAO userDAO = new UserDAO();

// create and save a new user

User user1 = new User("John Doe", "[email protected]");

userDAO.insertUser(user1);

// read the saved user

User savedUser = userDAO.getUser(1);

System.out.println(savedUser.getName()); // prints John Doe

// update the saved user

User updatedUser = new User("Jane Doe", "[email protected]");

userDAO.updateUser(updatedUser);

// delete the saved user

userDAO.deleteUser(1);

}

}

This tutorial provides a solid foundation for building CRUD applications with MyBatis. You've learned how to:

Set up your project with Maven and Eclipse Define your CRUD methods using MyBatis annotations Implement your CRUD logic in Java Test your CRUD application

In the next part of this series, we'll explore more advanced topics, such as mapping tables to classes, handling relationships between entities, and dealing with complex queries.