GVKun编程网logo

插入Mybatis教学(mybatis教程视频)

11

此处将为大家介绍关于插入Mybatis教学的详细内容,并且为您解答有关mybatis教程视频的相关问题,此外,我们还将为您介绍关于2、mybatis学习——eclipse中导入mybatis的dtd约

此处将为大家介绍关于插入Mybatis教学的详细内容,并且为您解答有关mybatis教程视频的相关问题,此外,我们还将为您介绍关于2、mybatis学习——eclipse中导入mybatis的dtd约束使其配置文件有提示、Fluent Mybatis, 原生Mybatis, Mybatis Plus三者功能对比、Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能对比、java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】的有用信息。

本文目录一览:

插入Mybatis教学(mybatis教程视频)

插入Mybatis教学(mybatis教程视频)

------------恢复内容开始------------

1.Mybatis的CRUD

首先第一点要注意:

namespace中的包名称,一定要和mapper接口的包名称要一一对应。

 

有上面的图可以看出,这里是一个select标签。表示选择和查询的语句。

在标签中有个id。这里的id对应的就是namespace中路径下的Mapper接口里面的方法名。

这里的resultType表示的是sql语句执行后的返回值。

parameterType表示的是sql语句查询的参数条件。

 

我们现在实现第二个方法,根据ID查询用户。我们先在UserMapper类中添加一个方法 getUserById,如下图所示

 

 

再在UserMapper.xml中补充一个select标签。id为UserMapper接口中新增的方法名称getUserById。输入参数的类型为int,返回值类型为User类

 

 

 

 然后撰写sql语句。这里的id需要传入参数 使用#{}来获取,里面传入的值就是UserMapper接口中方法的参数名称。

 

 

 然后在测试类中进行测试得出结果。

 

 

 

注意,在这里一个sql语句,对应的就是Mapper接口中的一个方法。

现在写insert语句。add一个用户。

首先在接口中撰写一个addUser方法。

 

 

然后在Mapper.xml中撰写insert标签。以及标签下的语句。

 

 

 

 的在sql语句中,和上面的通过id查询用户一样,需要传入参数,这里的参数是一个User对象。对象中的属性,可以直接拿出来,作为sql语句中的参数,这里的id,name,pwd都是User类中的三个属性名称。

 

 

 完成上述操作之后进行测试,在测试的时候需要注意一个很重要的点,那就是对于增加需要提交事务,如果不提交事务那么数据库增加是无效的。

 

 

再写一个修改任务的操作。先是在Mapper接口中写出方法和上面的增加用户类似

 

 

 

然后再写Mapper.xml,注意这里使用的是update标签

 

 

 然后在test中进行测试。注意使用update标签也必须要提交事务,否则结果无效。

 

 

 最后还有一个操作删除一个用户

首先我们需要在Mapper.java这个接口中写删除的方法

 

 

 写完删除的方法后,我们需要到XML中写sql语句。语法和上述相同,唯一区别是使用了delete标签,并且参数为int类型,这种int类型的参数可以进行省略。

 然后使用test测试方法检测。这里一定要注意,增删改查中除了查,其他的操作都要提交事务。

 

 

 万能的Map,上述的增删改查传参是有弊端的,比如说增加和修改的时候我们是直接传一个User的实体类。如果实体类或者表中的字段参数太多,则我们应该考虑使用万能的Map集合,使用键值对的形式进行传参。

这里我们以addUser为例子。

先在Mapper接口中写好方法,这里我们的方法名是addUser2,传入的参数不再是一个User对象,而是一个Map集合。

 

 

然后我们去写Mapper.xml中的sql语句 

 

 

 

 这里重点就来了,在sql语句中可以看出,VALUES后面的参数并不是对应着对象中的属性,而是我们自定义的值,这里的值想怎么写就怎么写,但是要对应着Map集合中的键。键的取名是随意的。这样就大大简化了我们的操作,例如在update操作中,我们可能本来只想修改某个字段的值,如果使用对象作为参数,这我们需要把整个对象传入进去,而现在,我们只需要定义一个map集合就可以自定义的传参了。

 

 

 最后,我们在test测试的时候,先定义好一个hashmap.然后把键和值都传入到map中。就可以完成上述的操作了。一般在工作中都是使用map集合操作的。

 

 

 这里PS一个小插曲,在from后面写表名,如果idea连接了数据库,则可以写数据库名之后再点一下写出表名。如果idea没有写表名则直接写表名即可。

 

跳转到动态sql中间的慢慢再补充

首先要了解什么是动态sql,动态SAQL指的是不同的条件下生成不同的sql语句。

首先我们需要搭建环境

先创建一张表

create table blog(
	`id` VARCHAR(50) not null comment '博客id',
	`title` varchar(100) not null comment '博客标题',
	`author` varchar(30) not null comment '博客作者',
	`create_time` datetime not null comment '创建时间',
	`view` int(30) not null comment '浏览量'
)ENGINE=INNODB DEFAULT CHARSET=utf8 

然后搭建环境

创建一个基础工程

1.导包

2.编写配置文件

3.编写实体类

4.编写实体类对应的Mapper接口和Mapper.XML文件

以上是基础步骤。

 

生成dp.properties和mybatis-config.xml文件放入resources文件夹中。

 

 

在POM中添加lombok依赖

 

 

 

然后在POJO中新建一个Blog类,在其中注意一个小细节,Datetime需要用java.util.Datetime。不能用sql对应的Datetime

 

 在这里我们createTime和表字段中的create_time是不相同的,我们这里要注意。

 

 

 在dao包里面添加BlogMapper.java这个类,并且添加BlogMapper.XML这个文件

 

 

 在BlogMapper.XML中新建头文件

 

 最后在Mybatis-config.xml中,给新建的BlogMapper进行注册。

 

至此,我们的基本环境算是搭建完毕了。

这里有一个小彩蛋,@SuppressWarnings这个注解。该注解可以抑制警告。不要在写错的代码下面生成一条红线进行提示。

 

 

 

这里 ,我们新建一个IDutils类,在该类中生成获取主键的方法,主键是通过使用UUID进行生成的,具体的代码,如下所示。

 

 

 先在我们先解决POJO中属性和表中字段不一致的问题,这里还有一个小彩蛋,为什么所有的数据库字段都是中间以下划线连接的呢,因为在ORCAL数据库中,所有的字段名都会变成大写,所以会造成混乱。所以其他的数据库也改用了这种方式。

现在回到正题。

在Mybatis的官网上,

 

 这个配置告诉我们,只要开启这个配置,就开启了自动驼峰命名规则,这样createTime就相当于是被自动转换成的驼峰命名。我们在Mybatis-config.xml的setting标签中设置。这样驼峰命名就自动转换了。

@H_301_394@

 

 现在我们来写一个插入的方法

 

 然后在XML中写sql

 

 在Mytest中进行测试:

 

 现在我们需要使用IF进行判断。

sql语句需要进行如下的改造

 

此时再进行测试,Map集合中为空,或者添加了titile或者添加了author,都可以查询出来了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------

2、mybatis学习——eclipse中导入mybatis的dtd约束使其配置文件有提示

2、mybatis学习——eclipse中导入mybatis的dtd约束使其配置文件有提示

1、以压缩形式打开mybatis的jar包

 

 

2、解压这两个dtd文件

 

 

我的解压后的文件路径如下

 

 

3、在eclipse中点击window,然后点击preferences

    

 

4、依次找到如图部分

 

 

5、添加全局配置文件的dtd

  复制mybatis中的全局配置文件的dtd(不要双引号)

 

 

 

6、添加mapper配置文件的dtd

  复制mapper配置文件的dtd(不要双引号)

 

 

 然后操作和上面导入全局配置操作一样

 

 

7、此时便有提示

 

Fluent Mybatis, 原生Mybatis, Mybatis Plus三者功能对比

Fluent Mybatis, 原生Mybatis, Mybatis Plus三者功能对比

使用fluent mybatis可以不用写具体的xml文件,通过java api可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。不再需要在Dao中组装查询或更新操作,在xml或mapper中再组装参数。那对比原生Mybatis, Mybatis Plus或者其他框架,FluentMybatis提供了哪些便利呢?

需求场景设置

我们通过一个比较典型的业务需求来具体实现和对比下,假如有学生成绩表结构如下:

create table `student_score`
(
    id           bigint auto_increment comment ''主键ID'' primary key,
    student_id   bigint            not null comment ''学号'',
    gender_man   tinyint default 0 not null comment ''性别, 0:女; 1:男'',
    school_term  int               null comment ''学期'',
    subject      varchar(30)       null comment ''学科'',
    score        int               null comment ''成绩'',
    gmt_create   datetime          not null comment ''记录创建时间'',
    gmt_modified datetime          not null comment ''记录最后修改时间'',
    is_deleted   tinyint default 0 not null comment ''逻辑删除标识''
) engine = InnoDB default charset=utf8;

现在有需求:

统计2000年三门学科(''英语'', ''数学'', ''语文'')及格分数按学期,学科统计最低分,最高分和平均分, 且样本数需要大于1条,统计结果按学期和学科排序

我们可以写SQL语句如下

select school_term,
       subject,
       count(score) as count,
       min(score)   as min_score,
       max(score)   as max_score,
       avg(score)   as max_score
from student_score
where school_term >= 2000
  and subject in (''英语'', ''数学'', ''语文'')
  and score >= 60
  and is_deleted = 0
group by school_term, subject
having count(score) > 1
order by school_term, subject;

那上面的需求,分别用fluent mybatis, 原生mybatis 和 Mybatis plus来实现一番。

三者实现对比

使用fluent mybatis 来实现上面的功能

图片

我们可以看到fluent api的能力,以及IDE对代码的渲染效果。

换成mybatis原生实现效果

  1. 定义Mapper接口
public interface MyStudentScoreMapper {
    List<Map<String, Object>> summaryScore(SummaryQuery paras);
}
  1. 定义接口需要用到的参数实体 SummaryQuery
@Data
@Accessors(chain = true)
public class SummaryQuery {
    private Integer schoolTerm;

    private List<String> subjects;

    private Integer score;

    private Integer minCount;
}
  1. 定义实现业务逻辑的mapper xml文件
<select id="summaryScore" resultType="map" parameterType="cn.org.fluent.mybatis.springboot.demo.mapper.SummaryQuery">
    select school_term,
    subject,
    count(score) as count,
    min(score) as min_score,
    max(score) as max_score,
    avg(score) as max_score
    from student_score
    where school_term >= #{schoolTerm}
    and subject in
    <foreach collection="subjects" item="item" open="(" close=")" separator=",">
        #{item}
    </foreach>
    and score >= #{score}
    and is_deleted = 0
    group by school_term, subject
    having count(score) > #{minCount}
    order by school_term, subject
</select>
  1. 实现业务接口(这里是测试类, 实际应用中应该对应Dao类)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = QuickStartApplication.class)
public class MybatisDemo {
    @Autowired
    private MyStudentScoreMapper mapper;

    @Test
    public void mybatis_demo() {
        // 构造查询参数
        SummaryQuery paras = new SummaryQuery()
            .setSchoolTerm(2000)
            .setSubjects(Arrays.asList("英语", "数学", "语文"))
            .setScore(60)
            .setMinCount(1);

        List<Map<String, Object>> summary = mapper.summaryScore(paras);
        System.out.println(summary);
    }
}

总之,直接使用mybatis,实现步骤还是相当的繁琐,效率太低。那换成mybatis plus的效果怎样呢?

换成mybatis plus实现效果

mybatis plus的实现比mybatis会简单比较多,实现效果如下

图片

如红框圈出的,写mybatis plus实现用到了比较多字符串的硬编码(可以用Entity的get lambda方法部分代替字符串编码)。字符串的硬编码,会给开发同学造成不小的使用门槛,个人觉的主要有2点:

  1. 字段名称的记忆和敲码困难
  2. Entity属性跟随数据库字段发生变更后的运行时错误

其他框架,比如TkMybatis在封装和易用性上比mybatis plus要弱,就不再比较了。

生成代码编码比较

fluent mybatis生成代码设置

public class AppEntityGenerator {
    static final String url = "jdbc:mysql://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8";

    public static void main(String[] args) {
        FileGenerator.build(Abc.class);
    }

    @Tables(
        /** 数据库连接信息 **/
        url = url, username = "root", password = "password",
        /** Entity类parent package路径 **/
        basePack = "cn.org.fluent.mybatis.springboot.demo",
        /** Entity代码源目录 **/
        srcDir = "spring-boot-demo/src/main/java",
        /** Dao代码源目录 **/
        daoDir = "spring-boot-demo/src/main/java",
        /** 如果表定义记录创建,记录修改,逻辑删除字段 **/
        gmtCreated = "gmt_create", gmtModified = "gmt_modified", logicDeleted = "is_deleted",
        /** 需要生成文件的表 ( 表名称:对应的Entity名称 ) **/
        tables = @Table(value = {"student_score"})
    )
    static class Abc {
    }
}

mybatis plus代码生成设置

public class CodeGenerator {

    static String dbUrl = "jdbc:mysql://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8";

    @Test
    public void generateCode() {
        GlobalConfig config = new GlobalConfig();
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)
            .setUrl(dbUrl)
            .setUsername("root")
            .setPassword("password")
            .setDriverName(Driver.class.getName());
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
            .setCapitalMode(true)
            .setEntityLombokModel(false)
            .setNaming(NamingStrategy.underline_to_camel)
            .setColumnNaming(NamingStrategy.underline_to_camel)
            .setEntityTableFieldAnnotationEnable(true)
            .setFieldPrefix(new String[]{"test_"})
            .setInclude(new String[]{"student_score"})
            .setLogicDeleteFieldName("is_deleted")
            .setTableFillList(Arrays.asList(
                new TableFill("gmt_create", FieldFill.INSERT),
                new TableFill("gmt_modified", FieldFill.INSERT_UPDATE)));

        config
            .setActiveRecord(false)
            .setIdType(IdType.AUTO)
            .setOutputDir(System.getProperty("user.dir") + "/src/main/java/")
            .setFileOverride(true);

        new AutoGenerator().setGlobalConfig(config)
            .setDataSource(dataSourceConfig)
            .setStrategy(strategyConfig)
            .setPackageInfo(
                new PackageConfig()
                    .setParent("com.mp.demo")
                    .setController("controller")
                    .setEntity("entity")
            ).execute();
    }
}

FluentMybatis特性一览

图片

三者对比总结

看完3个框架对同一个功能点的实现, 各位看官肯定会有自己的判断,笔者这里也总结了一份比较。

-Mybatis PlusFluent Mybatis
代码生成生成 Entity生成Entity, 再通过编译生成 Mapper, Query, Update 和 SqlProvider
Generator易用性
和Mybatis的共生关系需替换原有的SqlSessionFactoryBean对Mybatis没有任何修改,原来怎么用还是怎么用
动态SQL构造方式应用启动时, 根据Entity注解信息构造动态xml片段,注入到Mybatis解析器应用编译时,根据Entity注解,编译生成对应方法的SqlProvider,利用mybatis的Mapper上@InsertProvider @SelectProvider @UpdateProvider注解关联
动态SQL结果是否容易DEBUG跟踪不容易debug容易,直接定位到SQLProvider方法上,设置断点即可
动态SQL构造通过硬编码字段名称, 或者利用Entity的get方法的lambda表达式通过编译手段生成对应的方法名,直接调用方法即可
字段变更后的错误发现通过get方法的lambda表达的可以编译发现,通过字段编码的无法编译发现编译时便可发现
不同字段动态SQL构造方法通过接口参数方式通过接口名称方式, FluentAPI的编码效率更高
语法渲染特点通过关键变量select, update, set, and, or可以利用IDE语法渲染, 可读性更高

Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能对比

Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能对比

本文主要介绍了Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能对比,分享给大家,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

目录

三者实现对比

使用fluent mybatis 来实现上面的功能

换成mybatis原生实现效果

换成mybatis plus实现效果

生成代码编码比较

fluent mybatis生成代码设置

mybatis plus代码生成设置

FluentMybatis特性一览

三者对比总结

Fluent Mybatis介绍和源码

使用fluent mybatis可以不用写具体的xml文件,通过java api可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。

不用再需要在Dao中组装查询或更新操作,在xml或mapper中再组装次参数。

那对比原生Mybatis, Mybatis Plus或者其他框架,FluentMybatis提供了哪些便利呢?

我们通过一个比较典型的业务需求来具体实现和对比下,假如有学生成绩表结构如下:

create table `student_score` ( id bigint auto_increment comment '主键ID' primary key, student_id bigint not null comment '学号', gender_man tinyint default 0 not null comment '性别, 0:女; 1:男', school_term int null comment '学期', subject varchar(30) null comment '学科', score int null comment '成绩', gmt_create datetime not null comment '记录创建时间', gmt_modified datetime not null comment '记录最后修改时间', is_deleted tinyint default 0 not null comment '逻辑删除标识' ) engine = InnoDB default charset=utf8;

现在有需求:

统计2000年三门学科(‘英语', ‘数学', ‘语文')及格分数按学期,学科统计最低分,最高分和平均分,

且样本数需要大于1条,统计结果按学期和学科排序

我们可以写sql语句如下

select school_term, subject, count(score) as count, min(score) as min_score, max(score) as max_score, avg(score) as max_score from student_score where school_term >= 2000 and subject in ('英语', '数学', '语文') and score >= 60 and is_deleted = 0 group by school_term, subject having count(score) > 1 order by school_term, subject;

那上面的需求,分别用fluent mybatis, 原生mybatis 和 Mybatis plus来实现一番。

三者实现对比

使用fluent mybatis 来实现上面的功能

具体代码

我们可以看到fluent api的能力,以及IDE对代码的渲染效果。

换成mybatis原生实现效果

定义Mapper接口

public interface MyStudentscoreMapper { List> summaryscore(SummaryQuery paras); }

定义接口需要用到的参数实体 SummaryQuery

@Data @Accessors(chain = true) public class SummaryQuery { private Integer schoolTerm; private List subjects; private Integer score; private Integer minCount; }

定义实现业务逻辑的mapper xml文件

select school_term, subject, count(score) as count, min(score) as min_score, max(score) as max_score, avg(score) as max_score from student_score where school_term >= #{schoolTerm} and subject in #{item} and score >= #{score} and is_deleted = 0 group by school_term, subject having count(score) > #{minCount} order by school_term, subject

实现业务接口(这里是测试类, 实际应用中应该对应Dao类)

@RunWith(springrunner.class) @SpringBoottest(classes = QuickStartApplication.class) public class MybatisDemo { @Autowired private MyStudentscoreMapper mapper; @Test public void mybatis_demo() { // 构造查询参数 SummaryQuery paras = new SummaryQuery() .setSchoolTerm(2000) .setSubjects(Arrays.asList("英语", "数学", "语文")) .setscore(60) .setMinCount(1); List> summary = mapper.summaryscore(paras); System.out.println(summary); } }

总之,直接使用mybatis,实现步骤还是相当的繁琐,效率太低。

那换成mybatis plus的效果怎样呢?

换成mybatis plus实现效果

mybatis plus的实现比mybatis会简单比较多,实现效果如下

但正如红框圈出的,写mybatis plus实现用到了比较多字符串的硬编码(可以用Entity的get lambda方法部分代替字符串编码)。字符串的硬编码,会给开发同学造成不小的使用门槛,个人觉的主要有2点:

字段名称的记忆和敲码困难

Entity属性跟随数据库字段发生变更后的运行时错误

其他框架,比如TkMybatis在封装和易用性上比mybatis plus要弱,就不再比较了。

生成代码编码比较

fluent mybatis生成代码设置

public class AppEntityGenerator { static final String url = "jdbc:MysqL://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8"; public static void main(String[] args) { FileGenerator.build(Abc.class); } @Tables( /** 数据库连接信息 **/ url = url, username = "root", password = "password", /** Entity类parent package路径 **/ basePack = "cn.org.fluent.mybatis.springboot.demo", /** Entity代码源目录 **/ srcDir = "spring-boot-demo/src/main/java", /** Dao代码源目录 **/ daoDir = "spring-boot-demo/src/main/java", /** 如果表定义记录创建,记录修改,逻辑删除字段 **/ gmtCreated = "gmt_create", gmtModified = "gmt_modified", logicDeleted = "is_deleted", /** 需要生成文件的表 ( 表名称:对应的Entity名称 ) **/ tables = @Table(value = {"student_score"}) ) static class Abc { } }

mybatis plus代码生成设置

public class CodeGenerator { static String dbUrl = "jdbc:MysqL://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8"; @Test public void generateCode() { GlobalConfig config = new GlobalConfig(); DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MysqL) .setUrl(dbUrl) .setUsername("root") .setPassword("password") .setDriverName(Driver.class.getName()); StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig .setCapitalMode(true) .setEntityLombokModel(false) .setNaming(NamingStrategy.underline_to_camel) .setColumnNaming(NamingStrategy.underline_to_camel) .setEntityTableFieldAnnotationEnable(true) .setFieldPrefix(new String[]{"test_"}) .setInclude(new String[]{"student_score"}) .setLogicDeleteFieldName("is_deleted") .setTableFillList(Arrays.asList( new TableFill("gmt_create", FieldFill.INSERT), new TableFill("gmt_modified", FieldFill.INSERT_UPDATE))); config .setActiveRecord(false) .setIdType(IdType.AUTO) .setoutputDir(System.getProperty("user.dir") + "/src/main/java/") .setFileOverride(true); new AutoGenerator().setGlobalConfig(config) .setDataSource(dataSourceConfig) .setStrategy(strategyConfig) .setPackageInfo( new PackageConfig() .setParent("com.mp.demo") .setController("controller") .setEntity("entity") ).execute(); } }

FluentMybatis特性一览

三者对比总结

看完3个框架对同一个功能点的实现, 各位看官肯定会有自己的判断,笔者这里也总结了一份比较。

-

Mybatis Plus

Fluent Mybatis

代码生成

生成 Entity, Mapper, Wrapper等文件, 并且Generator很好用

只生成Entity, 再通过编译生成 Mapper, Query, Update 和 sqlProvider

和Mybatis的共生关系

需要替换原有的sqlSessionfactorybean

对Mybatis没有任何修改,原来怎么用还是怎么用

动态sql构造方式

应用启动时, 根据Entity注解信息构造动态xml片段,注入到Mybatis解析器

应用编译时,根据Entity注解,编译生成对应方法的sqlProvider,利用mybatis的Mapper上@InsertProvider @SelectProvider @UpdateProvider注解关联

动态sql结果是否容易DEBUG跟踪

不容易debug

容易,直接定位到sqlProvider方法上,设置断点即可

动态sql构造

通过硬编码字段名称, 或者利用Entity的get方法的lambda表达式

通过编译手段生成对应的方法名,直接调用方法即可

字段变更后的错误发现

通过get方法的lambda表达的可以编译发现,通过字段编码的无法编译发现

编译时便可发现

不同字段动态sql构造方法

通过接口参数方式

通过接口名称方式, FluentAPI的编码效率更高

语法渲染特点

通过关键变量select, update, set, and, or可以利用IDE语法渲染, 可读性更高

Fluent Mybatis介绍和源码

Fluent Mybatis文档&示例

Fluent Mybatis源码, github

到此这篇关于Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能对比的文章就介绍到这了,更多相关Fluent Mybatis,原生Mybatis,Mybatis Plus内容请搜索小编以前的文章或继续浏览下面的相关文章希望大家以后多多支持小编!

java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】

java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】

第1章 Mybatis 连接池与事务深入

1.1 Mybatis 的连接池技术

1.1.1 Mybatis 连接池的分类

1.1.2 Mybatis 中数据源的配置

1.1.3 Mybatis 中 DataSource 的存取

1.1.4 Mybatis 中连接的获取过程分析

 

1.2 Mybatis 的事务控制

1.2.1 JDBC 中事务的回顾

 

1.2.2 Mybatis 中事务提交方式

1.2.3 Mybatis 自动提交事务的设置

第2章 Mybatis 的动态 SQL 语句

2.1 动态 SQL 之标签 

2.1.1 持久层 Dao 接口

2.1.2 持久层 Dao 映射配置

2.1.3 测试

2.2 动态 SQL 之标签 

2.2.1 持久层 Dao 映射配置

2.3 动态标签之标签 

2.3.1 需求

2.3.1.1 在 QueryVo 中加入一个 List 集合用于封装参数

2.3.2 持久层 Dao 接口

2.3.3 持久层 Dao 映射配置

2.3.3.1 编写测试方法

 2.4 Mybatis 中简化编写的 SQL 片段

2.4.1 定义代码片段

2.4.2 引用代码片段

第3章 Mybatis 多表查询之一对多

3.1 一对一查询(多对一)

3.1.1 方式一

3.1.1.1 定义账户信息的实体类

3.1.1.2 编写 Sql 语句

3.1.1.3 定义 AccountUser 类

3.1.1.4 定义账户的持久层 Dao 接口

3.1.1.5 定义 AccountDao.xml 文件中的查询配置信息

3.1.1.6 创建 AccountTest 测试类

3.1.1.7 小结:

3.1.2 方式二

3.1.2.1 修改 Account 类

在 Account 类中加入 User 类的对象作为 Account 类的一个属性。

3.1.2.2 修改 AccountDao 接口中的方法

3.1.2.3 重新定义 AccountDao.xml 文件

3.1.2.4 在 AccountTest 类中加入测试方法

3.2 一对多查询

3.2.1 编写 SQL 语句

3.2.2 User 类加入 List

3.2.3 用户持久层 Dao 接口中加入查询方法

3.2.4 用户持久层 Dao 映射文件配置

3.2.5 测试方法

第4章 Mybatis 多表查询之多对多

4.1 实现 Role 到 User 多对多

4.1.1 用户与角色的关系模型

4.1.2 业务要求及实现 SQL

4.1.3 编写角色实体类

4.1.4 编写 Role 持久层接口

4.1.5 编写映射文件

4.1.6 编写测试类

4.2 实现 User 到 Role 的多对多

4.2.1 User 到 Role 的多对多

4.2.2 作业:实现 User 到 Role 的一对多查询

 

我们今天的关于插入Mybatis教学mybatis教程视频的分享就到这里,谢谢您的阅读,如果想了解更多关于2、mybatis学习——eclipse中导入mybatis的dtd约束使其配置文件有提示、Fluent Mybatis, 原生Mybatis, Mybatis Plus三者功能对比、Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能对比、java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】的相关信息,可以在本站进行搜索。

本文标签: