资讯专栏INFORMATION COLUMN

Mybatis初体验

ingood / 1933人阅读

摘要:概述是一款优秀的基于的持久层框架,封装代码,实现将参数映射到语句并执行,最后将执行结果映射到对象并返回的功能,支持自定义存储过程和高级映射。命名无要求,但应该有意义。创建实体和映射文件是映射框架,所以我们需要对应创建类,与数据库表进行映射。

概述

Mybatis是一款优秀的、基于SQL的持久层框架,封装JDBC代码,实现将参数映射到SQL语句并执行,最后将执行结果映射到JAVA对象并返回的功能,支持自定义SQL、存储过程和高级映射。

本系列文章是基于Mybatis 3.4.6 版本。

创建项目

我们使用maven来构建和管理项目,使用的IDEA开发工具来学习,这些都是目前很优秀的并且使用广泛的工具,流畅的开发体验便于提高开发效率,按如下步骤进行:

在IDEA中点击【file】-->【New】-->【Project...】,打开New Project窗口向导,如下图:

选择Maven并勾选Create from archetype,最后选择maven-archetype-quickstart,点击【Next】,如下图:

GroupId、ActifactId和Version是项目的maven坐标,作用就是便于在maven仓库中查找项目以供其他项目使用。命名无要求,但应该有意义。点击【Next】,如下图:

以上界面是对新建项目的描述信息,点击【Next】,如下图:

注意此界面的Project Name,此处默认是上个界面定义的去掉"-"的ActifactId,此处可以加上"-",最终如下图:

点击【Finish】,最终的项目结构如下:

打开pom文件,添加相关依赖,代码如下:



    org.mybatis
    mybatis
    3.4.6




    mysql
    mysql-connector-java
    5.1.38




    junit
    junit
    4.12
    test




    org.apache.logging.log4j
    log4j-api
    2.11.0


    org.apache.logging.log4j
    log4j-core
    2.11.0

至此,项目已经创建完成,下一步开始编码。

编码实现

在开始编码之前,需要先创建测试使用的表,mybatis本身是ORM框架,所以数据库肯定少不了,我们使用的是mysql数据库,可以使用一个已有数据库或者新建一个新库,在此基础上新建表,如下:

CREATE TABLE `sys_user` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT "主键",
  `username` varchar(50) DEFAULT NULL COMMENT "用户名",
  `password` varchar(50) DEFAULT NULL COMMENT "用户密码",
    `phone` varchar(20) DEFAULT NULL COMMENT "手机号",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT="用户表";

创建完数据库表后,我们插入一些测试数据,如下:

insert into sys_user(username,password,phone) 
values ("zhangsan","123456","13901234567"),
       ("lishi","123456","13901234567"),
       ("wangwu","123456","13901234567");

准备好数据库表和测试数据后,开始编写代码。

创建实体和映射文件

Mybatis是ORM映射框架,所以我们需要对应创建java类,与数据库表进行映射。

在src/main/java下创建包:com.github.dalianghe.model,并在该包下创建数据库sys_user表的映射类SysUser,代码如下:

package com.github.daliang.model;

public class SysUser{
    private Long id;
    private String username;
    private String password;
    private String phone;

    // get/set

    // 重写toString
    @Override
    public String toString() {
        return "User["+
                     "id="+this.getId()+"," +
                     "username="+this.getUsername()+
                     ",password="+this.getPassword()+
                     ",phone="+this.getPhone()
                  +"]";
    }
}

在src/mainresources下创建mappers目录,并在其下创建SysUserMapper.xml文件,代码如下:






    

说明:

< mapper>:XML根元素,属性namespace定义了当前XML命名空间

< select>标签:定义select查询sql,id属性定义当前select查询的唯一ID,resultType定义查询返回类型或集合元素类型(此处使用了配置别名,详细见Mybatis配置文件,如果不使用别名,此处应该制定类的全限定名即:com.github.dalianghe.model.SysUser)。标签内容为要执行的sql语句。

Mybatis配置文件

配置Mybatis有多种方法,本例使用XML方式进行配置,在classpass(src/main/resource)下创建mybatis-config.xml文件,并进行配置,代码如下:




    
        
        
    
    
    
        
    
    
    
        
            
                
            
            
                
                
                
                
            
        
    
    
    
        
    

配置日志

本例使用log4j2框架进行日志输出(所依赖的jar包已经在pom文件中进行了配置),便于我们观察Mybatis行为,在classpath下新建log4j2.xml文件,并进行配置,代码如下:



    
        
            
        
    
    
        
            
        
    

编写测试

以上代码编写完成,现在使用Juint编写测试用例,代码如下:

public class SysUserMapperTest {

    private static SqlSessionFactory sqlSessionFactory ;

    @BeforeClass
    public static void init(){
        try{
            //通过Resources工具类将mybatis配置文件读入Reader
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            //通过SqlSessionFactoryBuilder构造类使用reader创建SqlSessionFactory对象
            //在创建SqlSessionFactory对象过程中,首先解析mybatis-config.xml配置文件,并读取mappers标签配置的Mapper.xml进行解析。
            //解析之后,SqlSessionFactory包括了所有属性和要执行的SQL
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            reader.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    @Test
    public void testSelectAll(){
        //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try{
            //通过sqlSession的selectList方法查找到id为selectAll的方法执行sql
            //执行完后,mybatis将结果集映射为returnType类型并返回
            List userList = sqlSession.selectList("selectAll");
            printUserList(userList);
        }finally {
            //关闭资源
            sqlSession.close();
        }
    }

    private void printUserList(List users){
        for(SysUser user : users){
            System.out.println(user.toString());
        }
    }

}

运行测试方法testSelectAll,如无问题将打印如下内容:

... ...
11:11:47.042 [main] DEBUG com.github.dalianghe.mapper.SysUserMapper.selectAll - ==>  Preparing: select id,username,password,phone from sys_user 
11:11:47.109 [main] DEBUG com.github.dalianghe.mapper.SysUserMapper.selectAll - ==> Parameters: 
11:11:47.130 [main] TRACE com.github.dalianghe.mapper.SysUserMapper.selectAll - <==    Columns: id, username, password, phone
11:11:47.130 [main] TRACE com.github.dalianghe.mapper.SysUserMapper.selectAll - <==        Row: 1, zhangsan, 123456, 13901234567
11:11:47.133 [main] TRACE com.github.dalianghe.mapper.SysUserMapper.selectAll - <==        Row: 2, lishi, 123456, 13901234567
11:11:47.133 [main] TRACE com.github.dalianghe.mapper.SysUserMapper.selectAll - <==        Row: 3, wangwu, 123456, 13901234567
11:11:47.133 [main] DEBUG com.github.dalianghe.mapper.SysUserMapper.selectAll - <==      Total: 3
User[id=1,username=zhangsan,password=123456,phone=13901234567]
User[id=2,username=lishi,password=123456,phone=13901234567]
User[id=3,username=wangwu,password=123456,phone=13901234567]
... ...
总结

本节是第一篇关于mybatis的学习,我们体验了下mybatis的查询功能,后续继续学习更多更强大的功能,自己努力、大家努力。

最后创建了qq群方便大家交流,可扫描加入,同时也可加我qq:276420284,共同学习、共同进步,谢谢!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71205.html

相关文章

  • Mybatis体验

    摘要:是支持普通查询,存储过程和高级映射的优秀持久层框架。其中,标签内指定的是你定义的实体类的别名,方便之后使用。如果有问题会输出相应的提示。结果根据配置,我们生成了三个文件。 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将...

    flyer_dev 评论0 收藏0
  • [直播视频] 《Java 微服务实践 - Spring Boot 系列》限时折扣

    摘要:作为微服务的基础设施之一,背靠强大的生态社区,支撑技术体系。微服务实践为系列讲座,专题直播节,时长高达小时,包括目前最流行技术,深入源码分析,授人以渔的方式,帮助初学者深入浅出地掌握,为高阶从业人员抛砖引玉。 简介 目前业界最流行的微服务架构正在或者已被各种规模的互联网公司广泛接受和认可,业已成为互联网开发人员必备技术。无论是互联网、云计算还是大数据,Java平台已成为全栈的生态体系,...

    Enlightenment 评论0 收藏0
  • [直播视频] 《Java 微服务实践 - Spring Boot 系列》限时折扣

    摘要:作为微服务的基础设施之一,背靠强大的生态社区,支撑技术体系。微服务实践为系列讲座,专题直播节,时长高达小时,包括目前最流行技术,深入源码分析,授人以渔的方式,帮助初学者深入浅出地掌握,为高阶从业人员抛砖引玉。 简介 目前业界最流行的微服务架构正在或者已被各种规模的互联网公司广泛接受和认可,业已成为互联网开发人员必备技术。无论是互联网、云计算还是大数据,Java平台已成为全栈的生态体系,...

    winterdawn 评论0 收藏0
  • 我的Go+语言体验——(速爽到极致的Go+体验感)The Go+ Playground

    摘要:欢迎大家参与我的语言初体验活动活动地址本文为大家带来最直接的语言测试体验,欢迎点赞评论收藏。前言优势对于科学数据提供了更强大的数学表达式功能,例如有理数表达式有理数表达式,可简化数据科学目的的编程。 欢迎大家参与【我的Go+语言初体验】活动: 活动地址:【https://bbs.csdn.n...

    baiy 评论0 收藏0
  • Auto Layout 使用心得(一)—— 体验

    摘要:核心思想本质分析的本质是依靠某几项约束条件来达到对某一个元素的定位。我们可以在某个地方只使用一个约束,以达到一个小目的,例如防止内容遮盖防止边界溢出等。下一步使用心得二实现三等分原文发表在我的个人网站使用心得一初体验 本系列文章将从一个慢慢摸索中的新手的角度介绍 Auto Layout,讲述我在这两个月的学习中对它一点一滴的感受,最终目的是让大家在阅读完之后能够自己上手使用,并完成绝大...

    WrBug 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<