第10章 集成MyBatis

开心一笑

【风水轮流转,你要相信,那些曾经骑在你头上拉屎的,总有一天会换成另一拨人。】

新书购买

戳图购买 >>>

10.1 MyBatis介绍

10.1.1 MyBatis概述

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

10.2 集成MyBatis

10.2.1 引入依赖

在Spring Boot中集成Mybatis,首先需要在pom.xml文件中引入所需的依赖,具体代码如下:


org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1

10.2.2 添加MyBatis配置

在pom文件添加Mybatis所需的依赖之后,我们需要在application.properties文件中添加如下的配置信息:

### mybatis配置
mybatis.mapper-locations=classpath:/mappers/*Mapper.xml
mybatis.type-aliases-package=com.example.demo.dao

mybatis.mapper-locations:Mapper资源文件存放的路径。
mybatis.type-aliases-package:Dao接口文件存放的目录。

10.2.3 Dao层和Mapper文件开发

application.properties配置添加完成之后,我们需要根据MyBatis配置添加对应的文件夹。首先,我们需要在/src/main/java/com.example.demo.dao目录下新建AyUserDao接口,这样Spring Boot启动时候,就可以根据application.properties配置mybatis.type-aliases-package,找到AyUserDao接口。AyUserDao具体代码如下:

/**
 * 描述:用户DAO
 * @author Ay
 * @date   2017/11/20.
 */
@Mapper
public interface AyUserDao {

    /**
     *  描述:通过用户名和密码查询用户
     * @param name
     * @param password
     */
    AyUser findByNameAndPassword(@Param("name") String name, 
@Param("password") String password);

}

@Mapper:重要注解, MyBatis根据接口定义与Mapper文件中的SQL语句动态创建接口实现。
@Param:注解参数,在Mapper.xml配置文件钟,可以采用#{}的方式对@Param注解括号内的参数进行引用。
findByNameAndPassword:该方法可以通过用户名和密码查询用户。
然后我们在/src/main/resources目录下新建AyUserMapper.xml文件,Spring Boot在项目启动时候,会根据application.properties配置mybatis.mapper-locations找到该文件。AyUserMapper具体代码如下:


    
        
        
        
        
    

   


< mapper>标签:该标签的namespace属性用于绑定绑定Dao接口的。
< select>标签:用来编写select语句,映射查询语句。select标签有几个重要的属性,比如:resultMap
< resultMap>:映射管理器resultMap,是Mybatis中最强大的工具,描述了如何将数据库查询的结果集映射到Java对象,并管理结果和实体类之间的映射关系。
AyUserDao代码开发完成之后,我们在之前开发好的AyUserService接口类中添加添加接口findByNameAndPassword。具体代码如下:

/**
 * 描述:用户服务层接口
 * @author 阿毅
 * @date   2017/10/14
 */
public interface AyUserService {
         //此处省略代码

    AyUser findByNameAndPassword(String name, String password);

}

然后,我们在AyUserServiceImpl类中实现findByNameAndPassword接口,具体代码如下:

/**
 * 描述:用户服务层实现类
 * @author 阿毅
 * @date   2017/10/14
 */
//@Transactional
@Service
public class AyUserServiceImpl implements AyUserService {

    //此处省略代码

    @Resource
    private AyUserDao ayUserDao;

    @Override
    public AyUser findByNameAndPassword(String name, String password) {
        return ayUserDao.findByNameAndPassword(name, password);
    }
}

10.2.4 测试

代码开发完成之后,我们在MySpringBootApplicationTests类下添加测试方法,具体代码如下:

@Resource
private AyUserService ayUserService;

@Test
public void testMybatis(){
	AyUser ayUser = ayUserService.findByNameAndPassword("阿毅", "123456");
	logger.info(ayUser.getId() + ayUser.getName());

}

执行测试用例,在Intellij IDEA控制台可以看到相应的打印信息。


读书感悟

来自《知识的边界》

  • 足够的宽度本身就成为了一种深度。
  • 互联网就是一堆未经把门的谣言、流言与谎言的集合。它把我们的注意力切割成碎片,终结了那些长线的深入的思考。
  • 网络能够让我们更聪明,只要我们自己想要更聪明。
  • 新的过滤技术是毁灭性的,尤其是在知识的权威性这一点上更是如此。一些旧式的知识机制,比如报纸、百科全书、教材等,其权威性来自于它们为其他人过滤信息这一事实。而如果我们的社交网络是我们新的过滤器,那这种权威就从遥远的专家那里,转移到了我们所熟悉、所喜欢、所尊重的人所构成的这个网络上。
  • 传统媒体太容易去夸大那些阶段性的、暂时性的发现,但媒体给人塑造的科学印象则是科学是一种肯定无疑的正确观点的集合。但是网络化的科学则完全不同。这个科学无比庞大,永远存在分歧,讲究实用,借由命名空间来协调差异,而且永远不确定。一句话,网络化的科学看起来更像是科学家眼中的科学,而非媒体眼中的科学。

经典故事

在一次讨论会上,一位著名的演说家没讲一句开场白,手里却高举着一张20美元的钞票。面对会议室里的200个人,他问:“谁要这20美元?”一只只手举了起来。他接着说:“我打算把这20美元送给你们中的一位,但在这之前,请准许我做一件事。”他说着将钞票揉成一团,然后问:“谁还要?”仍有人举起手来。他又说:“那么,假如我这样做又会怎么样呢?”他把钞票扔到地上,又踏上一只脚,并且用脚碾它。尔后他拾起钞票,钞票已变得又脏又皱。“现在谁还要?”还是有人举起手来。

【无论我如何对待那张钞票,你们还是想要它,因为它并没贬值,它依旧值20美元。人生路上,我们会无数次被自己的决定或碰到的逆境击倒、欺凌甚至碾得粉身碎骨。我们觉得自己似乎一文不值。但无论发生什么,或将要发生什么,在上帝的眼中,你们永远不会丧失价值。在他看来,肮脏或洁净,衣着齐整或不齐整,你们依然是无价之宝。】


大神文章


其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎鼓励,点赞、顶、欢迎留下宝贵的意见、多谢支持!

你可能感兴趣的:(一步一步学SpringBoot)