Mybatis实现Mapper配置

准备数据源

# 删除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);

使用注解方式配置Mapper

导入mysql驱动包和mybatis依赖

<!--MySQL数据库驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.22</version>
    </dependency>

    <!--mybatis核心包-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.2</version>
    </dependency>

添加mybatis配置文件和db.properties

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties resource="db.properties"/>

	<environments default="mysql">
		<!-- 1.2配置id 为mysql的数据库环境 -->
		<environment id="mysql">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC"/>
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="${driverClassName}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<package name="com.mapper"/>
	</mappers>
</configuration>
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_demo?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
username=root
password=hs20010224

创建mapper接口

public interface UserMapper {
    @Select("SELECT username FROM user WHERE id = #{id}")
    String selectUsernameById(Integer id);
}

测试类

@SuppressWarnings({"Duplicates"})
public class UserTest {
    public static void main(String[] args) throws IOException {
        // 读取配置文件
        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();
    }
}

测试结果

Mybatis实现Mapper配置

使用XML方式配置Mapper

代码实现

在UserMapper接口中添加一个方法selectUserAgeById

Integer selectUserAgeById(Integer id);

在resources文件夹下创建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">
<!-- namespace表示命名空间 -->
<mapper namespace="com.mapper.UserMapper">

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

</mapper>

注意:UserMapper.xml必须和UserMapper接口放在同一包下,而且如果有多个包,则包必须一个一个创建。
select标签中id对应接口中的方法名,resultType对应接口中方法的返回值类型

测试
在测试类中添加下列方法

Integer age = mapper.selectUserAgeById(1);
System.out.println("age: " + age);

测试结果

Mybatis实现Mapper配置

resultType

代码实现

创建User实体类

@ToString
@Data
public class User {
    private Integer id;
    private String username;
    private Integer age;
    private Integer score;
}

在UserMapper接口中添加selectUserById方法

User selectUserById(Integer id);

在UserMapper.xml添加一个select标签

<select id="selectUserById" parameterType="java.lang.Integer" resultType="com.entity.User" >
		select * from user where id =#{id}
</select>

在测试类中添加测试代码

User user = mapper.selectUserById(1);
System.out.println(user);

测试结果

Mybatis实现Mapper配置

resultMap

代码实现

在UserMapper.xml添加下列代码

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

resultMap 标签的id表示resultMap 的唯一标识,type标识返回值类型;子标签中id标签表示主键,其他属性用result 标签表示,其中的property表示实体类的属性名称,column表示数据表的列名。

将selectUserById标签的返回值类型改为上面的resultMap

resultMap="userMap" 

测试结果

Mybatis实现Mapper配置

注意

MyBatis自动会帮助我们映射数据库数据和Java对象,但是如果要映射的对象比较复杂时就需要我们手动去映射。
resultMap标签通常在实体类的属性名称和数据表的列名不一致时使用

上一篇:MapperFactoryBean和MapperScannerConfigurer的作用和区别


下一篇:Mybatis的基本使用