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

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

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

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

1. 正文
1. 通过dao和映射文件的关联来完成操作---企业开发模式
2. 传递多个参数。
3. 添加时如何返回递增的主键值。
4. 解决列名和属性名不一致。
5. 动态sql拼接
2. 通过dao和映射文件的关联来完成操作---企业开发模式

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

2.1 如何实现

(1)创建一个dao接口并定义自己需要的方法。

public interface UserDao {
    
    public List findAll();
}
​

(2)创建映射文件





    
        select * from tb_user
    

注意: namespace必须和dao接口一样,而且标签的id必须和你接口的方法名一样。

(3)测试

@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();
    }

常见的bug

(1)

 

namespace和接口名不对应。 xml文件没有注册到mybatis配置文件中

(2)

 

映射文件中的标签id和接口中方法名不对应

2.2 安装mybatis插件

作用: 检查dao和映射文件是否匹配

3.传递多个参数。

我们在dao接口中某些方法可能需要传递多个参数,譬如: 登录(username,password)

 

我们需要在参数处使用@Param()为参数起名。

4.添加时如何返回递增的主键值。

需要返回添加数据库后的id值。


    
          insert into tb_user values(null,#{username},#{realname})
    

5.解决列名和属性名不一致。

问题: 查询时返回一个null,或者某个列没有值

可以有两种解决办法:

第一种: 为查询的列起别名,而别名和属性名一致。


    
        select * from tb_stu where stu_id=#{id}
    

如果列名和属性名有些一致的,可以在resultMap中不写映射关系

6. 动态sql 什么是动态sql:

根据参数的值,判断sql的条件。

name!=null address
select * from 表名 where name=#{name} and address=#{address}
name==null
select * from 表名.
为什么要使用动态sql:

mybatis中动态sql标签有哪些?

 

 

6.3 if标签--单条件判断
//如果name不为null则按照name查询 如果为null则查询所有
    public List findByCondition(@Param("name")String name,@Param("money") Double money);


    
    
        select * from account where 1=1
        
             and  name=#{name}
        
        
             and  money=#{money}
        
    
6.4 choose标签 多条件分支判断
6.5 where标签

我们观察到上面的sql都加了 where 1=1 ,如果不使用where 1=1 那么你的动态sql可能会出错。 我们能不能不加where 1=1呢! 可以 那么我们就可以使用where标签,作用:可以自动为你添加where关键字,并且可以帮你去除第一个and |or

总结:
1. 实际开发创建一个dao接口和映射文件。---namespace要和dao接口相同,id要和方法名相同。
2. 传递多个参数----@Param("名称") == xml #{名称}
3. 添加时需要获取递增的主键id.
4. 列名和属性名不一致。---别名    ===resultMap
5. 动态sql. 
     if
     choose
     where

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

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

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