jpetstore-Spring Boot-MyBatis_by

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

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

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

 

一、准备工作

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

要实现映射关系,首先要在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

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

 

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

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

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

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

 

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

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

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

 

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

 

<select id="getAccountByUsername" parameterType="java.lang.String" resultType="org.csu.mypetstorespring.domain.Account">

</select>
<select id="getAccountByUsernameAndPassword" parameterType="org.csu.mypetstorespring.domain.Account"resultType="org.csu.mypetstorespring.domain.Account">

</select>

 

 

 

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

<insert></insert>

<delete></delete>

<update></update>

<select></select>

 

属性介绍:

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

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

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

 

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

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

 

下面对于方法

Account getAccountByUsernameAndPassword(Account account);

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

<select id="getAccountByUsernameAndPassword" parameterType="org.csu.mypetstorespring.domain.Account" resultType="org.csu.mypetstorespring.domain.Account">
        SELECT
        SIGNON.USERNAME,
        ACCOUNT.EMAIL,
        ACCOUNT.FIRSTNAME,
        ACCOUNT.LASTNAME,
        ACCOUNT.STATUS,
        ACCOUNT.ADDR1 AS address1,
        ACCOUNT.ADDR2 AS address2,
        ACCOUNT.CITY,
        ACCOUNT.STATE,
        ACCOUNT.ZIP,
        ACCOUNT.COUNTRY,
        ACCOUNT.PHONE,
        PROFILE.LANGPREF AS languagePreference,
        PROFILE.FAVCATEGORY AS favouriteCategoryId,
        PROFILE.MYLISTOPT AS listOption,
        PROFILE.BANNEROPT AS bannerOption,
        BANNERDATA.BANNERNAME
        FROM ACCOUNT, PROFILE, SIGNON, BANNERDATA
        WHERE ACCOUNT.USERID = #{username}
        AND SIGNON.PASSWORD = #{password}
        AND SIGNON.USERNAME = ACCOUNT.USERID
        AND PROFILE.USERID = ACCOUNT.USERID
        AND PROFILE.FAVCATEGORY = BANNERDATA.FAVCATEGORY
    </select>

 

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

 

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

 

再举个insert的例子:

<insert id="insertAccount" parameterType="org.csu.mypetstorespring.domain.Account">
        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})
</insert>

 

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

 

 

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值