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

mybatis框架

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

mybatis框架

1、介绍mybatis框架

(1)什么是框架:框架就是别人搭建好的某些功能,你只需要引用该框架并加入自己的业务代码

(2)mybatis的介绍:MyBatis 是一款优秀的持久层Dao框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Java实体类)映射成数据库中的记录。

2、如何使用mybatis

(1)在pom.xml中引入mybatis和mysql的jar包

        
            org.mybatis
            mybatis
            3.4.6
        

        
        
            mysql
            mysql-connector-java
            8.0.28
        

(2) 创建mybatis的配置文件




    
        
            
            
            
                
                 
                 //自己用户
                 //自己密码
            
        
    

(3)创建数据库和表(省略)

(4) 创建实体类(省略)

(5) 创建mybatis和数据库的映射文件

作用: 映射实体和表之间的映射关系





    
    
        select * from tb_user where userid=#{id}
    

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

    
    
        delete from tb_user where userid=#{id}
    

    
    
         update tb_user set username=#{username},realname=#{realname} where userid=#{userid}
    

    
    
    select * from user where id=#{id}



        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();
    }
7.2 安装mybatis插件

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

8、传递多个参数

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

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

9、添加时如何返回递增的主键值
 
    
          insert into tb_user values(null,#{name},#{pwd})
    

//需要返回添加数据库后的id值
10、解决列名和属性名不一致

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

可以有两种解决办法:

(1)为查询的列起别名,而别名和属性名一致

 
    
        select * from tb_stu where stu_id=#{id}
    

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

11、动态sql 11.1什么是动态sql:根据参数的值,判断sql的条件
name!=null address
select * from 表名 where name=#{name} and address=#{address}
name==null
select * from 表名.
11.2mybatis中动态sql标签有哪些
元素作用描述
if条件判断单条件判断
choose(when、otherwise)条件选择、相当java when多条件分支判断
where、set辅助处理sql语句拼接问题
foreache循环循环
11.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}
        
    
11.4 choose标签 多条件分支判断
11.5 where标签
 
           #{min} and id <#{max}]]>
    
13、mybatis完成模糊查询

(1)使用字符串函数 完成拼接 concat


        select * from account where name like '%${name}%'
    
14、联表查询

多对一 : 从多的一方来查询一的一方

例如:班级表和学生表

根据学生id查询学生信息并携带班级信息

select * from tb_stu s join tb_class c on s.class_id=c.cid where stu_id=1

实体类:

学生表:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private int id;
    private String name;
    private int age;
    private String sex;
    private Integer classId;

    private Clazz clazz;//学生所属的班级
}

班级表:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Clazz {
    private Integer cid;
    private String cname;

}

xml:


            
            
            
            
            
            
            
                
                
            
    
    
         select * from tb_stu s join tb_class c on s.class_id=c.cid where stu_id=#{id}
    

测试:

@Test
    public void findStudentById()throws Exception{
        Reader reader= Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession session= factory.openSession();

        StudentDao studentDao=session.getMapper(StudentDao.class);

        Map map=StudentDao.findStudentById(1);
        System.out.println("cname");

        session.commit();
        session.close();
    }

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

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

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