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