Java Spring Boot VS .NetCore (五)MyBatis vs EFCore

耗尽温柔 提交于 2020-07-28 07:34:11

介绍

添加MyBatis先关的依赖包

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
 </dependency>
 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
 </dependency>

MyBatis

有两种配置方式 一种是通过XML来实现 相关操作 解耦性相对较强,第二种则是以注解的方式来实现,这里已第二种方式说明

使用这种方式还需要配置下 指向实体类的包路径

mybatis.type-aliases-package=com.liyouming.demo.domain.Entitys

在 启动入口里面添加注解指向 Mapper操作功能包地址

@MapperScan("com.liyouming.demo.Mapper")

下面的代码是功能类User  直接可以通过注解的方式完成相关方法的操作

public interface UserMapper  {
    @Select("SELECT username,email,newname,nick_name FROM user_model")
    @Results({
            @Result(property = "username",  column = "username"),
            @Result(property = "email",  column = "email"),
            @Result(property = "newname",  column = "newname"),
            @Result(property = "nickName", column = "nick_name")
    })
    List<UserModel> getAll();

    @Select("SELECT * FROM user_model WHERE id = #{id}")
    @Results({
            @Result(property = "username",  column = "username"),
            @Result(property = "email",  column = "email"),
            @Result(property = "newname",  column = "newname"),
            @Result(property = "nickName", column = "nick_name")
    })
    UserModel getOne(Long id);

    @Insert("INSERT INTO user_model(username,email,newname) VALUES(#{username}, #{email}, #{newname})")
    void insert(UserModel user);
//    @SelectProvider(type = CustomSql.class, method = "getList")
//    List<UserModel> getList(UserModel userParam);
}
 

EFCore

其实也有相关配置文件,只是平时都是用的直接根据实体生成的方式,如果需要配置怎么处理,使用查询ORM映射处理后的结果对应放在类里面的哪些字段,可以通过System.ComponentModel.DataAnnotations.Schema 引用下的标签工鞥来完成

当然EFCore 提供了配置处理 在数据库上下文对象中 重写 实现OnModelCreating 其中 ModelBuilder 类提供了添加配置的方法

protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.ApplyConfiguration(new ClassMap());
}

ClassMap 只需要实现 IEntityTypeConfiguration 接口,实现Configure 方法来实现配置映射关系 如下:

public class ClassMap : IEntityTypeConfiguration<ClassModel>
    {
        public void Configure(EntityTypeBuilder<ClassModel> builder)
        {
            builder.ToTable("Express_Class").HasKey(x => x.Id);
            builder.Property(c => c.ClassName).HasColumnName("Class_Name").HasColumnType("varchar").HasMaxLength(200);
           
        }
    }
 

很清楚的可以看出来  实体类与表之间的映射关系 以及字段名称、类型、长度等配置,当然这一步不需要 MyBatis那么复杂 EFCore通过这种关系已经帮我们实现了映射关系,而MyBatis 则需要使用注解的方式指定(@Results)指定属性与字段列之间的关系

 单元测试

 @Test
    public  void testMapper()
    {
       UserModel model= userMapper.getOne((long)1);
       System.out.print(model.getEmail());
    }

可以得到我们想要的结果 Ok ,做完了这些,我们是不是应该处理下界面的问题了,下一章主要说明下thymeleaf模版的使用

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!