学习Mybatis的day2

一.sql映射的xml文件        

在使用MyBatis进行SQL映射时,可以使用XML文件进行配置。XML文件通常包含以下几个部分:

  1. 命名空间(namespace):用于声明XML文件的命名空间,避免冲突。

  2. 结果映射(resultMap):用于将查询结果映射到Java对象。可以通过定义元素来配置。

  3. 参数映射(parameterType):用于将Java对象映射到SQL语句中的参数。可以通过定义元素来配置。

  4. SQL语句(select、insert、update、delete):用于定义具体的SQL语句。可以通过定义、、、元素来配置。 SQL语句中的参数映射(#{…}):用于将SQL语句中的参数与Java对象中的属性进行绑定。可以通过在SQL语句中使用#{…}来进行参数映射。 动态SQL:用于根据不同的条件生成不同的SQL语句。可以通过使用、、、等元素来实现动态SQL的配置。 其他配置:还可以在XML文件中配置一些其他的属性,如缓存、延迟加载等。  以上是SQL映射的XML文件的一般结构,通过配置XML文件,可以将Java对象与数据库表之间进行映射,实现数据的读取、插入、更新和删除等操作。

二.SQl映射文件中的几个顶级元素

  1. mapper元素:用于定义一个映射器(mapper),它是MyBatis的核心元素之一。mapper元素包含了一组SQL语句的映射定义,通过映射器可以实现数据库操作的CRUD(增删改查)功能。

  2. resultMap元素:用于定义一个结果映射,它描述了如何将数据库查询结果映射到Java对象。resultMap元素包含了一组result元素,每个result元素定义了一个数据库字段和Java对象属性之间的映射关系。

  3. select元素:用于定义一个查询语句。select元素包含了SQL语句和可选的参数映射、结果映射等信息。通过select元素可以执行数据库查询操作,并将查询结果映射到Java对象。

  4. insert元素:用于定义一个插入语句。insert元素包含了SQL语句和可选的参数映射信息。通过insert元素可以执行数据库插入操作。

  5. update元素:用于定义一个更新语句。update元素包含了SQL语句和可选的参数映射信息。通过update元素可以执行数据库更新操作。

  6. delete元素:用于定义一个删除语句。delete元素包含了SQL语句和可选的参数映射信息。通过delete元素可以执行数据库删除操作。

这些顶级元素是SQL映射文件中常用的元素,通过它们可以定义各种数据库操作,并实现数据库和Java对象之间的映射。

三、MyBatis自动映射

MyBatis是一个优秀的持久层框架,它可以将Java对象与数据库中的记录进行自动映射。

在MyBatis中,通过配置文件和注解来实现自动映射。首先,需要在配置文件中指定Java对象和数据库表之间的映射关系。这可以通过使用resultMap元素来定义。resultMap元素可以指定Java对象的属性与数据库表的列之间的对应关系。

在resultMap元素中,可以使用id元素来指定Java对象的属性名,使用result元素来指定数据库表的列名。使用property元素来指定Java对象的属性与数据库表的列之间的映射关系。

除了配置文件,还可以使用注解来实现自动映射。在Java对象的类上使用@Results注解,可以指定Java对象的属性与数据库表的列之间的映射关系。在注解中,可以使用@Result注解来指定属性与列之间的对应关系。

通过配置文件或注解来实现自动映射后,就可以在编写SQL语句时直接使用Java对象的属性名,而不需要指定具体的列名。MyBatis会根据配置文件或注解中的映射关系,自动将查询结果映射到Java对象的属性上。这样可以简化代码的编写,提高开发效率。

总的来说,MyBatis的自动映射功能可以帮助开发人员快速、方便地将Java对象与数据库表进行映射,减少手动编写映射代码的工作量。这使得开发人员可以更专注于业务逻辑的实现,提高开发效率。

四.如何使用Mybatis实现多条件查询

在使用Mybatis进行多条件查询时,可以通过在Mapper接口中定义方法,并使用注解的方式来传递查询条件。

首先,在Mapper接口中定义一个方法,使用@Select注解来指定查询语句,同时使用@Param注解来指定查询条件的参数名。例如:

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE username = #{username} AND age = #{age}")
    List<User> findByUsernameAndAge(@Param("username") String username, @Param("age") int age);
}

上述代码中,findByUsernameAndAge方法接收两个参数,分别是usernameage,通过@Param注解来指定参数名。在@Select注解中,使用#{}来引用参数值。

然后,在调用该方法时,可以直接传递参数值进行查询。例如:

@Autowired
private UserMapper userMapper;

public List<User> getUserByUsernameAndAge(String username, int age) {
    return userMapper.findByUsernameAndAge(username, age);
}

上述代码中,通过userMapper.findByUsernameAndAge(username, age)来调用Mapper接口中定义的方法,并传递参数值进行查询。

需要注意的是,如果有多个查询条件,可以使用AND或者OR来连接条件,在SQL语句中使用#{}来引用参数值。同时,也可以使用@SelectProvider注解来动态生成查询语句,以适应更复杂的查询条件。

五.什么是mapper

Mapper是Hadoop中的一个组件,用于将输入数据切分为若干个键值对,并按照指定的逻辑对每个键值对进行处理。Mapper的主要作用是将输入数据转换为中间数据,以供后续的处理使用。

Mapper的输入可以是Hadoop的输入源,如文件、HDFS等,也可以是其他的输入源。Mapper将输入数据切分为多个键值对,其中键是数据的某个特征或标识,值是与该特征或标识相关的数据。

Mapper的处理逻辑由开发人员自定义,可以根据具体需求编写不同的Mapper。在处理过程中,Mapper会对每个键值对进行逻辑处理,生成中间数据作为输出。

Mapper的输出会作为Reducer的输入,用于后续的处理。通常情况下,Mapper的输出键值对会根据键进行分组,以便Reducer对相同键的数据进行聚合处理。

总之,Mapper是Hadoop中用于将输入数据切分为若干个键值对,并按照自定义的逻辑对每个键值对进行处理的组件。它的主要作用是将输入数据转换为中间数据,以供后续的处理使用。

六.使用association解决多对一的映射关系

在关系型数据库中,可以使用association来解决多对一的映射关系。多对一的映射关系指的是一个实体可以与多个其他实体关联,而其他实体只能与该实体关联。

在数据库中,可以创建一个中间表来存储这种多对一的关系。该中间表包含两个外键,一个指向多的一方的实体,另一个指向一的一方的实体。通过这个中间表,可以实现多对一的关联。

例如,假设有两个实体表A和B,其中B是多的一方。可以创建一个中间表C,包含两个外键,一个指向A,一个指向B。这样,每个B实体可以与多个A实体关联,而每个A实体只能与一个B实体关联。

在查询时,可以通过关联中间表C,来获取多对一的关系。例如,可以通过C表中的B外键,找到与B关联的所有A实体。

这种使用association解决多对一的映射关系的方法,在关系型数据库中是常见且有效的做法。

七.​通过collection解决一对多的映射关系

在Java中,可以使用Collection接口的实现类来解决一对多的映射关系。常见的Collection实现类有ListSetMap

如果一对多的关系是有序的,可以使用List来解决。List是一个有序集合,可以按照元素的添加顺序进行访问。每个元素可以是一个对象,可以包含多个属性。通过将多个对象添加到一个List中,可以表示一对多的关系。

如果一对多的关系是无序的且不允许重复,可以使用Set来解决。Set是一个无序集合,不允许重复元素。每个元素可以是一个对象,可以包含多个属性。通过将多个对象添加到一个Set中,可以表示一对多的关系。

如果一对多的关系是键值对的形式,可以使用Map来解决。Map是一个键值对的集合,可以根据键快速查找对应的值。每个键值对可以表示一对多的关系,其中键表示一的一方,值表示多的一方。

例如,假设有一个学生和课程的关系,一个学生可以选择多门课程。可以定义一个Map,其中键是学生的姓名,值是一个List,表示该学生选择的课程列表。通过向List中添加课程对象,可以表示学生和课程的一对多关系。

Map<String, List<Course>> studentCourses = new HashMap<>();

// 添加学生和课程的关系
String studentName = "张三";
List<Course> courses = new ArrayList<>();
courses.add(new Course("数学"));
courses.add(new Course("英语"));
studentCourses.put(studentName, courses);

// 获取学生选择的课程
List<Course> selectedCourses = studentCourses.get(studentName);

以上是使用Map解决一对多关系的一个示例,可以根据具体的需求选择适合的Collection实现类来解决一对多的映射关系。

八 .MyBatis自动映射

MyBatis是一个优秀的持久层框架,它提供了自动映射功能来简化开发过程。自动映射是指将数据库中的数据自动映射到Java对象的过程,无需手动编写SQL语句和结果映射规则。

在MyBatis中,使用自动映射可以大大简化开发工作。首先,我们需要在配置文件中配置自动映射的规则。可以通过<resultMap>元素来定义结果映射,也可以通过<autoMapping>元素开启自动映射功能。

在配置文件中,可以通过<id>元素来指定主键字段,通过<result>元素来指定其他字段。MyBatis会根据数据库表的列名和Java对象的属性名进行自动映射。

当执行查询操作时,MyBatis会自动将查询结果映射到Java对象中。如果查询结果中的列名和Java对象的属性名一致,MyBatis会自动将查询结果映射到对应的属性上。如果查询结果中的列名和属性名不一致,可以通过在配置文件中定义映射规则来进行映射。

通过使用自动映射,我们可以省去编写大量的SQL语句和结果映射规则的工作,提高开发效率。同时,自动映射也提供了灵活性,可以根据需要进行配置和调整。

总之,MyBatis的自动映射功能是一个非常有用的特性,可以简化开发工作并提高开发效率。

九.缓存

MyBatis缓存

MyBatis是一种Java持久层框架,它提供了一种简化数据库访问的方式。在MyBatis中,缓存是一种提高性能的机制。

MyBatis提供了两级缓存:一级缓存和二级缓存。

一级缓存是默认开启的,它是指在同一个SqlSession中,如果多次执行相同的SQL语句,那么MyBatis会将第一次查询的结果缓存起来,后续的查询会直接从缓存中获取结果,而不再去执行SQL语句。一级缓存的范围是SqlSession级别的,也就是说,只有在同一个SqlSession中才能共享缓存。

二级缓存是可选的,它是指在多个SqlSession中共享缓存。当多个SqlSession执行相同的SQL语句时,如果开启了二级缓存,那么MyBatis会将查询结果缓存到二级缓存中,后续的SqlSession可以直接从二级缓存中获取结果,而不再去执行SQL语句。二级缓存的范围是Mapper级别的,也就是说,同一个Mapper的不同SqlSession可以共享缓存,但不同Mapper之间的SqlSession不能共享缓存。

MyBatis的缓存机制可以提高查询性能,减少数据库的访问次数。但是需要注意的是,缓存机制也会带来一些问题,比如数据一致性的问题,因此在使用缓存时需要谨慎考虑。可以通过合理配置缓存的刷新策略、缓存的失效策略等来解决这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值