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

Mybatis丶Mybatis-Plus

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

Mybatis丶Mybatis-Plus

Mybatis

mybatis是持久层框架,封装了JDBC,开发时只需要关注SQL语句本身,是半ORM(对象映射)框架

原始的使用步骤:

1.POM.XML文件添加相关依赖
2.创建实体类,映射数据库的字段
3.创建dao持久层接口,编写方法
4.同dao层目录下创建mapper文件,名字同接口.xml,编写SQL语句,映射接口方法
5.创建主配置文件(resource目录下)mybatis.xml,连接数据库和映射mapper文件
6.创建测试类,固定三步,获取sqlsession对象,执行SQL语句

获取sqlsession固定三大步,封装成工具类:

public class MybatisUtil {
    static SqlSessionFactory build = null;

    static {
        //获取核心xml配置文件
        InputStream ra = null;
        try {
            ra = Resources.getResourceAsStream("mybatis.xml");
            //通过方法,获取SqlSessionFactory实例
            build = new SqlSessionFactoryBuilder().build(ra);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    
    public static SqlSession getSqlSession() {
        //通过SqlSessionFactory实例,获取sqlSession对象
        return build.openSession();
    }
}

mybatis动态代理,底层创建dao层接口实现类,完成SQL语句的执行:

//通过sqlSession对象调用getMapper方法传入dao层接口字节码,获取动态代理的接口实现类对象
UserDao mapper = sqlSession.getMapper(UserDao.class);
//通过实现类对象调用接口方法即可
User result = mapper.selectUserById(1);

使用mybatis动态代理的要求:

1.mapper文件的namespace必须写全接口名
2.id必须写方法名
这样框架才能动态找到对应的SQL语句并执行

对比:以前是用的sqlSession对象的SQL方法,方法需要传入全接口名加id名,现在底层实现类执行SQL语句,我们只需要调用方法就行了,怎么找到mapper文件的sql定位不需要我们关心了
----------------------------------------------------------
参数类型parameterType:

mybatis会自动识别,一般不需要我们写
手动写有两种方式:
1.全类名,比如java.lang.String
2.别名:mybatis官网制定好的别名,比如Integet类型对应的是integer

参数命名:

接口方法参数是基本数据类型或者String类型,属于简单参数
1.如果参数只有一个,是简单参数,那么mapper文件使用#{}接收参数
2.如果参数有多个,是简单参数,那么接口方法的形参类型前面需要加注解@Param(value="…"),value是给参数取名可以省略,对应的mapper文件#{参数名},这个参数名必须是新取的名字
3.当参数有太多个了,可以使用对象传参,要求对象可以是任意自定义的,但是属性必须有get和set方法,比如使用现成的实体类,对应的mapper文件#{属性},只要是对象的属性就行,只是个接收器而已
4.位置参数,mybatis3.4版本新特性,mapper文件#{arg0},#{arg1}对应着dao层接口方法的形参,从左往右一一对应
5.参数可以是Map集合,对应的mapper文件#{Map集合的key},key是从Java代码里存储的元素获取
一般参数有两三个的用2方式,有四五个的用3方式,能解决全部问题了!!!

#{} 和 ${}的区别:

#{}:使用PrepareStatement作为对象执行SQL语句,效率高,可以防止SQL注入,#{}常作为列值使用,位于等号右边,可以区分数据类型,会自动加单字符串
-------------------------------------------------------------------------
${}:使用Statement作为对象执行SQL语句,效率低,使用字符串拼接方式传入SQL语句,有SQL注入风险,数据是原样使用的,不会区分数据类型,不会自动加单字符串,${}常用作列名或表名,在保证数据安全情况下使用!!!

---------------------------------------
resultType可以写三种方式:

实际上resultType对应的就是接口方法的返回值类型,只是要写全类名而已
1.全类名
2.简单类型
3.Map

resultType返回结果的过程:

resultType = “全类名”(推荐) 或者 resultType = “自定义别名”(不推荐)
查询的过程是:传入查询条件给SQL语句,mybatis执行SQL,创建实体类对象,调用set方法为属性赋值,对象的属性对应着表中列名
增加的过程是:创建实体类,为属性赋值传入SQL,mybatis执行SQL语句
删除的过程:直接传入条件给SQL语句,mybatis执行SQL
修改的过程:创建实体类通过主键ID唯一性为属性赋值,传入修改条件给SQL语句,mybatis执行SQL,ID相同的列值将被修改

给resultType取别名的步骤:

要求:必须在主配置文件配置,点进configuration标签可以看到标签顺序


    
        
        
        
        
        
    

resultType可以是简单类型全类名:

比如: 接口方法是 Long selectById();
对应的resultType=“java.lang.Long”

resultType可以是Map:

列名是map的key,列值是map的value,map只能查一条数据,不能查多条
比如:接口方法 Map selectById(int id);
对应的mapper文件 resultType=“java.util.Map”

resultMap结果映射:

列名和属性名不对应的情况下使用,相同也能使用
用法:
1.在mapper文件定义resultMap标签,指定列名和属性名称的对应关系
2.在select标签使用属性resultMap = “resultMap标签的ID值”


    
    
        
        
        
        
    
    
    

------------------------------------------------------
动态SQL常用标签:

多条件查询时使用动态SQL,接口方法的参数用java对象,主要是where部分有变化,掌握if,where,foreach,sql

if:
if例子:
where:


foreach:

例子1:循环简单类型list
第二种方式:
sql:

--------------------------------------
主配置文件属性描述:


------------------------------------------------------
使用分页插件pageHelper
------------------------------------------------------------------------

Mybatis-Plus

简化mybatis,操作流程:

1.添加mybatis-plus相关依赖
2.创建pojo实体类,创建dao层接口,继承baseMapper类
3.baseMapper类帮我们写了CRUD方法和SQL

配置日志:

SQL是mybatis-plus完成的,是不可见的,所以我们要配置日志
在properties属性配置文件,配置相关日志

主键生成策略:

要求:数据库主键字段自增,实体类对应主键的字段加注解@IdType

自动更新时间,实现步骤:

1.删除数据库的自动更新操作
2.实体类字段上加注解

3.编写处理器

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

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

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