这里写目录标题
了解mbyatis
1.mybatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2.mybatis特点
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低
3.快速入门
1.编写全局配置文件
2.编写mapper映射文件
3.加载全局配置文件,生成SqlSessionFactory
4.创建SqlSession,调用mapper映射文件中的SQL语句来执行CRUD操作
环境配置
映射器(Mapper)
MyBatis是一个开源的Java持久化框架,它提供了一个简化数据库访问的方法。在MyBatis中,映射器(Mapper)是一种用于定义数据库操作的接口或类。
在MyBatis中,映射器的作用是定义数据库操作的SQL语句以及与之对应的方法。通过映射器,你可以将数据库表的操作映射为Java方法,从而实现对数据库的增删改查操作。
MyBatis提供了两种定义映射器的方式:XML文件和注解。
-
XML文件方式:通过编写XML文件来定义映射器。在XML文件中,你可以定义SQL语句,参数映射,以及结果映射等。XML文件中的SQL语句可以使用动态SQL语句来实现条件判断、循环等逻辑控制。
-
注解方式:通过在接口或类的方法上使用注解来定义映射器。使用注解方式定义映射器相对简单,不需要额外的XML文件,可以直接在Java代码中编写SQL语句。
使用映射器的步骤如下:
-
定义映射器接口或类:创建一个接口或类,用于定义数据库操作的方法。
-
编写映射器配置文件(如果使用XML方式):在XML文件中定义映射器接口或类的路径,并配置数据库连接等相关信息。
-
编写SQL语句:在映射器接口或类的方法中,使用注解或XML方式编写SQL语句。
-
调用映射器方法:通过MyBatis的SqlSession对象获取映射器接口或类的实例,并调用方法执行数据库操作。
以下是一个使用XML方式定义映射器的示例:
<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
<select id="getUserById" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
// UserMapper.java
public interface UserMapper {
User getUserById(int id);
}
// 使用映射器
SqlSession sqlSession = sqlSessionFacotry.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
以上示例中,通过XML方式定义了一个名为UserMapper的映射器,包含了一个名为getUserById的查询方法。在使用时,通过SqlSession对象获取UserMapper的实例,并调用getUserById方法查询用户信息。
动态sql
动态sql详略
MyBatis是一个持久层框架,通过它可以方便地操作数据库。在MyBatis中,动态SQL可以帮助我们根据不同的条件动态生成SQL语句。
一对多(One-to-Many)关系表示一个实体对象与多个相关实体对象之间的关系。在MyBatis中,我们可以使用嵌套查询(Nested Query)来解决一对多关系的查询问题。嵌套查询通过在主查询中引用子查询来获取相关的多个实体对象。
例如,我们有两个实体对象,一个是订单(Order),另一个是订单项(OrderItem),一个订单可以包含多个订单项。我们可以通过以下方式进行查询:
<select id="getOrderWithItems" resultType="Order">
SELECT *
FROM orders o
WHERE o.id = #{orderId}
<collection property="items" ofType="OrderItem">
SELECT *
FROM order_items i
WHERE i.order_id = o.id
</collection>
</select>
上述代码中,我们先查询订单表,然后在查询结果中使用<collection>
标签进行嵌套查询,查询订单项表,并将查询结果设置到订单对象的items
属性中。
多对一(Many-to-One)关系表示多个实体对象与一个相关实体对象之间的关系。在MyBatis中,我们可以使用关联查询(Join Query)来解决多对一关系的查询问题。关联查询通过在主查询中连接关联表来获取相关的一个实体对象。
例如,我们有两个实体对象,一个是订单(Order),另一个是用户(User),一个订单属于一个用户。我们可以通过以下方式进行查询:
<select id="getOrderWithUser" resultType="Order">
SELECT o.id, o.order_number, u.id, u.username
FROM orders o
JOIN users u ON o.user_id = u.id
WHERE o.id = #{orderId}
</select>
上述代码中,我们使用JOIN关键字将订单表和用户表进行连接,并通过WHERE条件限定订单的ID。最后将查询结果设置到订单对象中。
总结来说,MyBatis通过动态SQL提供了便捷的方式来处理一对多和多对一关系的查询问题。通过嵌套查询可以解决一对多关系的查询,通过关联查询可以解决多对一关系的查询。