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

Mybatis框架(Dao层实现+文件深入+多表操作)

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

Mybatis框架(Dao层实现+文件深入+多表操作)

Mybatis框架(Dao层实现+文件深入+多表操作)

1 Mybatis代理开发方式实现Dao层2 Mybatis文件深入

2.1 映射文件深入(动态SQL)

2.1.1 动态sql-if2.1.2 动态sql-foreach2.1.3 动态sql的抽取 2.2 核心配置文件深入

2.2.1 typeHandlers标签2.2.2 plugins标签(PageHelper分页) 3 Mybatis的多表操作

3.1 一对一查询3.2 一对多查询3.3 多对多查询

1 Mybatis代理开发方式实现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的类型相同



1)dao层接口:

public interface UserMapper {
    public List findAll() throws IOException;

    public User findById(int id);
}

2)映射文件配置:





    
    
        select *
        from user
    

    
    
        select *
        from user
        
            -- 根据传进来的参数,如果满足if则动态拼接字符串查询
            
                id = #{id}
            
            
                and username = #{username}
            
            
                and password = #{password}
            
        
    

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

        //模拟参数条件user
        User user = new User();
        user.setId(3);
        user.setUsername("张无忌");
//        user.setPassword("123456");
        List userList = mapper.findByCondition(user);
        System.out.println(userList);

    }
}

2.1.2 动态sql-foreach

业务场景:查询id为1,2,3…的用户的信息
接口:

public List findByIds(List ids);

映射文件:





    
        SELECT *,
               `order`.id oid
        FROM `order`,
             `user`
        WHERe `order`.uid = `user`.id;
    

4)测试:

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

        List orderList = mapper.findAll();
        for (Order order:orderList
             ) {
            System.out.println(order);
        }

        sqlSession.close();
    }
}



5)第二种在映射文件中手动配置字段与实体的映射关系的方法:




    
        
        
        
        
        
        
        
            
            
            
            
        
    

    
        SELECT *,
               o.id oid
        FROM `user` u,
             `order` o
        WHERe u.id = o.uid;
    

3.3 多对多查询





    
        
        
        
        
        
            
            
            
        
    
    

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

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

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