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

MyBatis(二) 通过dao和映射文件的关联来完成操作---企业开发模式

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

MyBatis(二) 通过dao和映射文件的关联来完成操作---企业开发模式

        在mybatis中可以使用SqlSession封装的一些方法可以完成crud操作,但是SqlSession封装的方法,传递的参数statement, 传递占位符的参数只能传递一个。而且他的方法名称都是固定。而真实在开发环境下我们不使用SqlSession封装的方法,而是习惯自己定义方法,自己调用自己的方法。

并且mybatis可以将查询出来的数据,按照对应的属性名字,封装到定义好的实现类中,更加方便的完成查询操作。

一、如何实现: 1、创建实现类:
@Data  //lomkox注释 get set方法以及toString 等方法
@AllArgsConstructor //所有属性的构造方法
@NoArgsConstructor  //无参数的构造方法
public class User {
    private int id;
    private String name;
    private String email;
}
2、创建对应的dao接口
public interface UserDao {
    
    public List findAll();
}
 3、编写对应的xml文件

        mapper的namespace属性必须是dao接口的文件位置,必须和到相同,这样才能将自己编写的dao接口在xml中完成配置,一致下面的sql操作是自己的dao接口中的方法。

        各操作标签中的id属性值,必须是和dao接口中的方法名一致,不然找不到方法名,就相当于没有实现接口中的方法,在使用是会报错。




  
    
        select * from tb_user
    
4、在全局的xml文件中注册映射文件



    
        
            
            
            
                
                
                
                
            
        
    
    
    
        
        
    
5、测试方法
 @Test
    public void testFindAll() throws Exception{
        Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(resourceAsReader);
        SqlSession session=factory.openSession();
		//获取相应接口的代理对象,后面部分可以理解为接口的实现类
        UserDao userDao=session.getMapper(UserDao.class);
        List list = userDao.findAll();//调用接口方法
        System.out.println(list);
        session.commit();
        session.close();
    }

总结:这种使用mybatis的方法,更加符合在企业开发中的应用,应为在实际应用中,不可能每个方法他的参数都是一个,并且在多个值时,不可能每次都封装成一个对象去实现传值。使用这种开发模式,更加方便也更加实用。

二、传递多个参数

        在开发中,dao层的方法中会有传递多个参数的方法,例如登录方法、多条件查询等方法,我们要传递多个值。当然我们可以在方法中传递多个参数,要注意的是,在xml中调用多个参数时,#{参数名},这种方式已经不能使用了,因为mybatis在进行多个值传递时,会自动的将变量名字换成param1、param2...表示参数1、参数2...。这样在使用时不够方便,不够见名知意。所在在传递多个参数时,我们在参数前面使用@Param("参数名"),来为参数加上默认变量名,这样在xml中使用时就可以使用我们设置好的参数名。

 三、如何在添加操作时返回自动递增的主键

insert标签中有着useGeneratedKeys属性,值为true或false。true为使用返回自动生成的主键。默认为false,keyProperty属性是要将这个字段的值,赋值给实体类中的哪个属性。

 
    
          insert into tb_user values(null,#{name},#{address})
    
四、解决列名和属性名不一致。

        当我们实体类中的属性名与数据库表中的字段名不一致时,我们在执行查询方法时,这个属性会得到null,应为mybatis没有找到与之对应的属性名,意思就是我们知道哪一个值赋给哪一个属性,但是程序不知道,我们要给他们指定好,这样程序在执行时,就算字段与属性不同,通过我们的指定也可应找到对应的属性,将值赋给对应属性。

        第一种方法:为字段起别名,让他和我们的实体类中的名字一样。缺点就是字段多的情况下会导致sql很长。

    
        select * from tb_stu where stu_id=#{id}
    

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

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

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