Mybatis(三)——【多表操作、注解开发】

目录

一对一查询

多对多查询 

Mybatis的注解开发

Mybatis的增删查改

MyBatis的注解实现复杂映射开发


一对一查询

一对一查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户。

一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户
Mybatis(三)——【多表操作、注解开发】_第1张图片

 一对一查询的语句

对应的sql语句: select * from orders o,user u where o.uid=u.id;查询的结果如下:
Mybatis(三)——【多表操作、注解开发】_第2张图片

 创建Order和User实体

Mybatis(三)——【多表操作、注解开发】_第3张图片

 创建OrderMapper接口

public interface OrderMapper {

    //查询全部的方法
    public List findAll();
}

配置OrderMapper.xml





    
        
        
        
        
        

        
        
            
            
            
            
        

    

    

配置UserMapper.xml






    
        
        
        
        
        
        
            
            
            
            
        
    

    

    

    
        
        
        
        
        
        
        
            
            
            
        
    

    

配置sqlMapConfig.xml





    
    

    
    
        
        
        
    

    
    
        
            
            
                
                
                
                
            
        
    
    

    
    
        
        
    

测试代码

    @Test
    public void test1() 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();
    }

一对多查询

一对多查询模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单
Mybatis(三)——【多表操作、注解开发】_第4张图片

 对应的sql语句: select *,o.id oid from user u left join orders o on u.id=o.uid;查询的结果如下:

Mybatis(三)——【多表操作、注解开发】_第5张图片

SELECT *,o.id oid FROM USER u, orders o WHERE u.id=o.uid

Mybatis(三)——【多表操作、注解开发】_第6张图片

修改User实体
Mybatis(三)——【多表操作、注解开发】_第7张图片

创建UserMapper接口
Mybatis(三)——【多表操作、注解开发】_第8张图片

配置UserMapper.xml
测试结果

Mybatis(三)——【多表操作、注解开发】_第9张图片

多对多查询 

多对多查询的模型
用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用多对多查询的需求:查询用户同时查询出该用户的所有角色
Mybatis(三)——【多表操作、注解开发】_第10张图片

 多对多查询的语句

对应的sql语句: select u.*,r.*,r.id rid from user u left join user_role ur on u.id=ur.user_idinner join role r on ur.role_id=r.id;
查询的结果如下:
Mybatis(三)——【多表操作、注解开发】_第11张图片

创建Role实体,修改User实体
Mybatis(三)——【多表操作、注解开发】_第12张图片

添加UserMapper接口方法


配置UserMapper.xml(上面)
测试代码

Mybatis(三)——【多表操作、注解开发】_第13张图片

总结: 

MyBatis多表配置方式:

一对一配置:使用做配置
一对多配置:使用+做配置

多对多配置:使用+做配置
 

Mybatis的注解开发

Mybatis的常用注解

这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作。
@Insert:实现新增
@Update:实现更新@Delete:实现删除@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result一起使用,封装多个结果集@One:实现一对一结果集封装
@Many:实现一对多结果集封装

Mybatis的增删查改

    private UserMapper mapper;

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

   @Test
    public void testSave(){
        User user = new User();
        user.setUsername("tom");
        user.setPassword("abc");
        mapper.save(user);
    }

    @Test
    public void testUpdate(){
        User user = new User();
        user.setId(18);
        user.setUsername("lucy");
        user.setPassword("123");
        mapper.update(user);
    }

    @Test
    public void testDelete(){
        mapper.delete(18);
    }

    @Test
    public void testFindById(){
        User user = mapper.findById(2);
        System.out.println(user);
    }

    @Test
    public void testFindAll(){
        List all = mapper.findAll();
        for (User user : all) {
            System.out.println(user);
        }
    }

修改MyBatis的核心配置文件,我们使用了注解替代的映射文件,所以我们只需要加载使用了注解的Mapper接口即可
 

    
    
        
        
    

或者指定扫描包含映射关系的接口所在的包也可以
 

    
    
        
        
    

UserMapper:

public interface UserMapper {

    @Insert("insert into user values(#{id},#{username},#{password},#{birthday})")
    public void save(User user);

    @Update("update user set username=#{username},password=#{password} where id=#{id}")
    public void update(User user);

    @Delete("delete from user where id=#{id}")
    public void delete(int id);

    @Select("select * from user where id=#{id}")
    public User findById(int id);

    @Select("select * from user")
    public List findAll();

    @Select("select * from user")
    @Results({
            @Result(id=true ,column = "id",property = "id"),
            @Result(column = "username",property = "username"),
            @Result(column = "password",property = "password"),
            @Result(
                    property = "orderList",
                    column = "id",
                    javaType = List.class,
                    many = @Many(select = "com.longdi.mapper.OrderMapper.findByUid")
            )
    })
    public List findUserAndOrderAll();


    @Select("SELECT * FROM USER")
    @Results({
            @Result(id = true,column = "id",property = "id"),
            @Result(column = "username",property = "username"),
            @Result(column = "password",property = "password"),
            @Result(
                    property = "roleList",
                    column = "id",
                    javaType = List.class,
                    many = @Many(select = "com.longdi.mapper.RoleMapper.findByUid")
            )
    })
    public List findUserAndRoleAll();


}

MyBatis的注解实现复杂映射开发

实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置
Mybatis(三)——【多表操作、注解开发】_第14张图片

Mybatis(三)——【多表操作、注解开发】_第15张图片

一对一查询(使用注解配置Mapper)

Mybatis(三)——【多表操作、注解开发】_第16张图片

测试代码:

Mybatis(三)——【多表操作、注解开发】_第17张图片

一对多查询(使用注解配置Mapper)

Mybatis(三)——【多表操作、注解开发】_第18张图片

测试代码;

Mybatis(三)——【多表操作、注解开发】_第19张图片

 多对多查询(使用注解配置mapper)

Mybatis(三)——【多表操作、注解开发】_第20张图片

测试代码:

Mybatis(三)——【多表操作、注解开发】_第21张图片

你可能感兴趣的:(#,SSM框架,java,开发语言,后端)