jpetstore-Spring Boot-MyBatis_by

本博客主要针对基于SpringBoot集成的jpetstore中的MyBatis进行分析。注意若没有使用SpringBoot集成的MyBatis将比这复杂一些。下面博客将就如何实现MyBatis进行叙述。

在 基于Spring Boot的jpetstore项目分析(一)_by_一把健

中曾经描述过,本项目中persistence包中的接口与mapper文件夹下的xml映射文件为一一对应关系。

jpetstore-Spring Boot-MyBatis_by_第1张图片

jpetstore-Spring Boot-MyBatis_by_第2张图片

 

一、准备工作

首先创建项目工程时就要选择Spring初始化工具,让IntelliJ为我们做好初始化工作。

jpetstore-Spring Boot-MyBatis_by_第3张图片

要实现映射关系,首先要在application.properties配置文件中添加如下语句

1.数据库连接

#datasource

spring.datasource.url=jdbc:mysql://localhost:3306/mypetstore?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

2.MyBaits映射文件位置

#MyBatis

mybatis.mapper-locations=classpath:mapper/*Mapper.xml

然后需要在启动文件中的类前添加如下注解

@MapperScan("org.csu.mypetstorespring.persistence") // 扫描映射器

该注解的功能是扫描persistence中的接口,与映射文件即映射器进行对接。

 

二、MyBatis分析

下面将对persistence接口和xml映射文件做详细描述。

例子:AccountMapper接口和AccountMapper.xml

jpetstore-Spring Boot-MyBatis_by_第4张图片

如果把SQL语句完全展示出来篇幅会过长,在此我们暂不关注SQL语句和注释。

jpetstore-Spring Boot-MyBatis_by_第5张图片

 

AccountMapper接口一目了然,主要是对用户的增删改查,我们重点关注下AccountMapper.xml映射文件里面的内容。注意博主这里的AccountMapper.xml没有附加解释文件,当然没有解释文件其实更好一点,故里面的属性值均是完整包名,千万不要写错。

首先xml文件有文件头和唯一的根标签。

jpetstore-Spring Boot-MyBatis_by_第6张图片

xml文件头指明当前xml使用版本为1.0(version=”1.0”),编码格式为UTF-8(encoding=”UTF-8”)。

根标签必须以命名,在根标签内有属性namespace,该属性的值为对应映射关系的接口文件,故为该接口的完整包名:"org.csu.mypetstorespring.persistence.AccountMapper"

 

下面看根标签内的内容,首先我们关注下接口内的两个方法:

    // 通过用户名得到用户
    Account getAccountByUsername(String username);

    // 通过用户名和密码得到用户
    Account getAccountByUsernameAndPassword(Account account);

 

第一个方法是传入一个用户名得到用户信息(注册的时候会用到,查看用户名是否可用),第二个方法是传入一个用户对象得到用户信息(登录的时候会用到)。相应的,xml映射文件中针对每个方法也需要有对应的操作标签。

 

 

 

 

对应于增删改查的基础SQL操作,MyBatis提供四种标签对。

 

属性介绍:

id :是标签唯一的标识符,通常与接口中的方法相对应。

parameterType:传给此语句的参数的完整包名或者别名例:com.test.poso.User或user。

resultType :语句返回值的完整包名或者别名。

 

对于select需要有返回值,故有resultType属性,对于其他操作一般不需要resultType属性。

标签中的parameterType属性值更是与接口方法中的参数类型相对应。对于保留字的写法,MyBatis使用#{username} 的写法替换掉传统保留字 ? 。

 

下面对于方法

Account getAccountByUsernameAndPassword(Account account);

和该方法对应的标签内的内容进行分析。

 

仔细看可以注意到保留字为 #{username} 和#{password},即需要用户的用户名和密码,可是 parameterType 的值为Account类。注意这里MyBatis使用了依赖注入的方式。传入的是Account类的对象没错,但是MyBatis通过account对象中的属性username 和password的值自动注入到保留字#{username}和#{password}中,前提是若传入的是domain对象,domain领域对象中的成员变量的命名要和xml中保留字的命名一致

 

即在传入多个参数时,需要先将参数封装成一个领域对象,通过依赖注入的方式填充对应保留字。

 

再举个insert的例子:


        INSERT INTO ACCOUNT
        (EMAIL, FIRSTNAME, LASTNAME, STATUS, ADDR1, ADDR2, CITY, STATE, ZIP, COUNTRY, PHONE, USERID)
        VALUES
        (#{email}, #{firstName}, #{lastName}, #{status}, #{address1},  #{address2,jdbcType=VARCHAR}, #{city}, #{state}, #{zip}, #{country}, #{phone}, #{username})

 

  这其中有多项保留字,其名字与Account类中的成员变量名一致。

 

 

以上,是对基于SpringBoot集成的jpetstore中的MyBaits的实现的相关说明。

 

 

你可能感兴趣的:(jpetstore,MyBatis,Spring,Boot,jpetstore)