栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Mybatis】02:映射文件深入

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Mybatis】02:映射文件深入

第二章:MyBatis映射文件深入

OVERVIEW
  • 第二章:MyBatis映射文件深入
      • 一、Mybatis的Dao层实现
      • 二、动态SQL
        • 1.环境搭建
        • 2.条件查询if
        • 3.复杂查询foreach
        • 4.Sql片段抽取

一、Mybatis的Dao层实现

传统开发方式是手动对dao层进行实现,

而企业级开发的主流,采用的是Mybatis的代理开发方式实现dao层的开发。

Mapper接口开发方法只需要编写Mapper接口(类似于dao层接口),

由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同dao接口实现类的方法。

Mapper接口开发需要遵循以下规范:

  1. Mapper.xml文件中的namespace与mapper接口的全限定名相同
  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
  3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
  4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

二、动态SQL

Mybaits的映射文件中,有时候业务逻辑复杂sql语句是动态变化的,就难以满足要求了:

1.环境搭建

package com.itcast.domain;

public class User {
    private int id;
    private String username;
    private String password;

    public int getId() { return id; }

    public void setId(int id) { this.id = id; }

    public String getUsername() { return username; }

    public void setUsername(String username) { this.username = username; }

    public String getPassward() { return password; }

    public void setPassward(String passward) { this.password = passward; }

    
    @Override
    public java.lang.String toString() {
        return "User{" + "id=" + id + ", username=" + username + ", passward=" + password + '}';
    }
}
package com.itcast.mapper;

import com.itcast.domain.User;

import java.util.List;

public interface UserMapper {
    public List findByCondition(User user);
}



    
    
        select * from user where id = #{id} and username = #{username} and password = #{password}
    




    
    
        
            
            
                
                
                
                
            
        
    
    
    
        
    

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=debug, stdout
package com.itcast.test;

import com.itcast.domain.User;
import com.itcast.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MapperTest {
    @Test
    public void test1() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //mybatis实现dao层
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //模拟user
        User condition = new User();
        condition.setId(1);
        condition.setUsername("zhangsan");
        condition.setPassward("123");

        //执行操作
        List userList = mapper.findByCondition(condition);
        System.out.println(userList);
    }
}

2.条件查询if

当部分查询条件缺失时,可以在UserMapper.xml文件中使用if标签拼接sql语句,修改文件如下:




    
    
        select * from user
        
            
                and id = #{id}
            
            
                and username = #{username}
            
            
                and password = #{password}
            
        
    
    
        
        
            
                and id = #{id}
            
            
                and username = #{username}
            
            
                and password = #{password}
            
        
    
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号