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

MyBatis(一)

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

MyBatis(一)

Mybatis

MyBatis是一款优秀的持久层框架,用于简化JDBC开发。

持久层:负责将数据保存到数据库的那一层代码;javaEE三层架构:表现层、业务层、持久层。

框架:
框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。
在框架的基础之上构建软件编写更加高效、规范、通用、可扩展。

JDBC缺点
1.硬编码:注册驱动、获取连接;SQL语句。
2.操作繁琐:手动设置参数;手动封装结果集。

Mybatis快速入门

查询user表中所有数据
1.创建user表,添加数据
2.创建模块,导入坐标
3.编写Mybatis核心配置文件—>替换链接信息 解决硬编码问题。
4.编写SQL映射文件—>统一管理sql语句,解决硬编码问题
5.编码:
    1.定义POJO类;
    2.加载核心文件,获取 SqlSessionFactory 对象;
    3.获取SqlSession对象,执行SQL语句;
    4.释放资源。

Mapper代理开发

使用Mapper代理方式完成入门案例
1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。
2.设置SQL映射文件的namespace属性为Mapper接口全限定名。
3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致。
4.编码:①通过SqlSession的getMapper方法获取Mapper接口的代理对象。
              ②调用对应方法完成sql的执行。
细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。

类型别名(typeAliases)

    
        
    
MyBatisX 插件

MyBatisX是一款基于IDEA的快速开发插件,为效率而生。
主要功能:XML和接口方法互相跳转;根据接口方法生成statement

实体类属性名 和 数据库表列名 不一致,不能自动封装数据
1)起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样
        *可以定义片段,提升复用性。
2)resultMap:定义完成不一致的属性名和列名的映射。

查询语句:
    
        
        
        
    

    
        select *
        from tb_brand;
    
    

    
        select *
        from tb_brand
        where status = #{status}
            and company_name like #{companyName}
            and brand_name like #{brandName} ;
    
		//三种查询的接口。
    
    List selectByCondition(@Param("status") int status, @Param("companyName") String companyName, @Param("brandName") String brandName);
    List selectByCondition(Brand brand);
    List selectByCondition(Map map);
多条件-动态条件查询

SQL语句会随着用户的输入或外部条件变化而变化,我们称为动态SQL

    
    
        select *
        from tb_brand
        
                
                
                    status = #{status}
                

                
                    company_name like #{companyName}
                

                
                    brand_name like #{brandName}
                

                
                
                    1=1
                

            
        
    
添加

1.编写接口方法:Mapper接口 void add(Brand brand);
      参数:出了ID之外的所有数据
      结果:void
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。

    
        insert into tb_brand (brand_name,company_name,ordered,description,status)
        value(#{brandName},#{companyName},#{ordered},#{description},#{status})
    

MyBatis事务:
openSession():默认开启事务,进行增删改查后需要使用sqlSession.commit();手动提交事务。
openSession(true):可以设置为自动提交事务(关闭事务)。

添加 - 主键返回

在数据添加成功后,需要获取插入数据库数据的主键的值
比如:添加订单和订单项
1.添加订单。
2.添加订单项,订单项中需要设置所属订单的id。


.........(数据库语句略)

修改

1.编写接口方法:Mapper接口 void update(Brand brand);
      参数:所有数据
      结果:void
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。

    
        update tb_brand
        set
            brand_name = #{brandName},
            company_name = #{companyName},
            ordered = #{ordered},
            description = #{description},
            status = #{status}
        where id = #{id};
    



删除

删除一个
1.编写接口方法:Mapper接口 void deleteById(int id);
      参数:id
      结果:void
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。

    
        delete from tb_brand where id = #{id};
    

批量删除
1.编写接口方法:Mapper接口 void deleteByIds(@Param("ids" ) int[] ids);
      参数:id数组
      结果:void
2.编写SQL语句:SQL映射文件。
3.执行方法,测试。

    void deleteByIds(@Param("ids") int[] ids);
    //不加@Param("ids") 那么collection="array"
    
    
        delete from tb_brand where id
        in
            
                #{id}
            
            ;
    

MyBatis参数传递

MyBatis接口方法中可以接受各种各样的参数,MyBatis底层对于这些参数进行不同的封装处理方式
  单个参数:
      1.POJO类型:直接使用,属性名 和 参数占位符名称 一致
      2.Map集合:直接使用,键名 和 参数占位符名称 一致
      3.Collection:封装成Map集合,可以使用@Param注解,替换集合中默认的键名 arg。
            map.put(“arg0”,collection 集合);
            map.put(“collection”,collection 集合);
      4.List:封装成Map集合,可以使用@Param注解,替换集合中默认的键名 arg。
            map.put(“arg0”,List 集合);
            map.put(“collection”,List 集合);
            map.put(“List”,List 集合);
      5.Array:封装成Map集合,可以使用@Param注解,替换集合中默认的键名 arg。
            map.put(“arg0”,数组);
            map.put(“array”,数组);
      6.其他类型:直接使用
  多个参数:封装为Map集合,可以使用@Param注解,替换集合中默认的键名 arg。

map.put("arg0",参数1)
map.put("param1",参数1)
map.put("arg1",参数2)
map.put("param2",参数1)
----------------------@Param("username")
map.put("username",参数1)
map.put("param1",参数1)
map.put("arg1",参数2)
map.put("param2",参数1)

MyBatis提供了ParamNameResolver类来进行参数封装。
建议:将来都是用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样可读性更高。

注解完成增删改查

使用注解开发会比配置文件开发更加方便

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

查询:@Select;  添加:@Insert;  修改:@Update;  删除:@Delete
提示:主街完成简单功能;配置文件完成复杂功能。

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

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

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