资讯专栏INFORMATION COLUMN

Mybatis基本映射--SELECT

printempw / 610人阅读

摘要:概述上一篇针对进行了入门体验,本节将继续介绍基本映射单表查询。本系列文章是基于版本。总结本节实例了基本查询及映射,这些也是实际工作中用的最多的功能,虽然简单,日积月累会构建起我们的知识结构和体系,一步一步来。。。

概述

上一篇针对Mybatis进行了入门体验,本节将继续介绍Mybatis基本映射--单表查询。

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

创建表

针对于上一节,我们对sys_user表结构进行了优化,字段类型更规范了些,这样做更有利于数据库性能,我们参考了一些数据库设计规范,后续抽时间整理分享出来,修改后SQL语句为:

CREATE TABLE `sys_user` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT "主键",
  `user_account` varchar(50) NOT NULL COMMENT "用户账户",
  `user_password` char(32) NOT NULL COMMENT "MD5加密的用户密码",
  `user_email` varchar(20) DEFAULT NULL COMMENT "用户邮箱",
  `user_phone` varchar(20) DEFAULT NULL COMMENT "手机号",
  `created_date` datetime NOT NULL COMMENT "创建时间",
  `modified_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT "修改时间",
  `yn` tinyint(1) unsigned NOT NUll DEFAULT 1 COMMENT "是否有效(0无效,1有效)",
  `modified_user` varchar(50) DEFAULT NULL COMMENT "修改人",
  `remark` varchar(500) DEFAULT NULL COMMENT "备注",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT="用户信息表";
实体

我们的SysUser实体代码如下(使用lombok注解,在类中不必写get/set方法,提高开发效率以及代码更整洁):

package com.github.dalianghe.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.Date;

@Getter
@Setter
@ToString
public class SysUser {

    private Long id;

    private String userAccount;

    private String userPassword;

    private String userEmail;

    private String userPhone;

    private Date createdDate;

    private Date modifiedDate;

    private Integer yn;

    private String modifiedUser;

    private String remark;

}

接口

Mybatis3.0相比于2.0,支持使用接口调用方法,并且对于多参数需求,支持在方法参数中使用注解@Param设置参数的名字(2.0中需要使用对象或map来传多参数),接口代码如下:

package com.github.dalianghe.mapper;

import com.github.dalianghe.model.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SysUserMapper {

    // 返回多值需用List接收
    public List selectAll() throws Exception;
    // 返回单个或0个使用对象接收
    public SysUser selectUserById(Long id) throws Exception;
    // 多参数方法
    public SysUser selectUserByAccountAndPass(@Param("userAccount") String userAccount,
                                              @Param("userPassword") String userPassword) throws Exception;

}

接口类中定义了无参、一个参数和多个参数的查询方法,在mapper配置文件中需定义三个id为方法名的select查询标签。

需注意的是查询SQL返回的结果数量,当返回1个或0个时,使用对象,返回多个时使用List,否则会报错。

mapper配置文件

定义mapper映射文件,代码如下:






    
    
        
        
        
        
    
    
    
    
    
    
    


mybatis配置文件

mybatis配置文件代码如下:







    
        
        
        
        
    

    
        
        
    
    
    
        
            
                
            
            
                
                
                
                
            
        
    

    
        
        

        
        
    


测试

编写测试用例对mapper方法进行测试,代码如下:

package com.github.dalianghe;

import com.github.dalianghe.mapper.SysUserMapper;
import com.github.dalianghe.model.SysUser;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserMapperTest {

    private static SqlSessionFactory sqlSessionFactory;

    @Before
    public void init(){
        try{
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    public SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

    @Test
    public void testSelectAll(){
        SqlSession sqlSession = getSqlSession();
        try{
            SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
            List users = sysUserMapper.selectAll();
            users.forEach(user -> {
                System.out.println(user.toString());
            });
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Test
    public void testSelectUserById(){
        SqlSession sqlSession = getSqlSession();
        try{
            SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
            SysUser sysUser = sysUserMapper.selectUserById(1L);
            System.out.println(sysUser);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Test
    public void testSelectUserByAccountAndPass(){
        SqlSession sqlSession = getSqlSession();
        try{
            SysUserMapper sysUserMapper = sqlSession.getMapper(SysUserMapper.class);
            SysUser sysUser = sysUserMapper.selectUserByAccountAndPass("admin","123");
            System.out.println(sysUser);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

运行测试方法即可。

总结

本节实例了mybatis基本查询及映射,这些也是实际工作中用的最多的功能,虽然简单,日积月累会构建起我们的知识结构和体系,一步一步来。。。

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

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

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

相关文章

  • Mybatis常见面试题

    摘要:执行没有,批处理不支持,将所有都添加到批处理中,等待统一执行,它缓存了多个对象,每个对象都是完毕后,等待逐一执行批处理。 Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字符串替换。 使用#{}可以有效的防止...

    liuchengxu 评论0 收藏0
  • Java Persistence with MyBatis 3读书笔记

    摘要:内部将通过创建事务管理应用服务器负责管理数据库连接生命周期使用。对于大型数据库而言这会导致很差的性能问题。这是指检索出的对象不会被共享并且可以被调用者安全地修改不会其他潜在的调用者或者线程的潜在修改干扰。 第一章 mybatis 简介 以下内容是自己在看本书时觉得重要的地方记录下来,一方面自己做个笔记也希望对其他同行有帮助 简介 mybatis: 是一个简化和实现了Java数据持久层的...

    JinB 评论0 收藏0
  • Mybatis学习笔记(一)——基本的CRUD操作

    摘要:将语句硬编码到代码中,修改语句需要重新编译代码设想使用配置文件配置。从结果集中遍历数据的时候存在硬编码。表示一个拼接符号,会引用注入,所以不建议使用。和表示查询出一条记录进行映射。 MyBatis是什么 mybatis是托管在github上的ORM框架,让程序员将主要精力放在SQL上,通过mybatis提供映射方式,自由灵活(SQL的可定制性较高,半自动化)生成满足需求的SQL语句。m...

    evin2016 评论0 收藏0

发表评论

0条评论

printempw

|高级讲师

TA的文章

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