Java基础 - Mybatis

本文详细介绍了Mybatis的概念,包括ORM技术和Mybatis的定义。接着,阐述了Mybatis的工作流机制,包括配置加载、SqlSession获取及执行查询的过程,并分析了事务管理和配置选项。此外,还探讨了Mybatis的API,包括配置方式、数据源、事务管理以及ResultMap的使用,最后提到了Mybatis内置的连接池配置及其参数详解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis

1、概念

 1)ORM( Object/Relation Mapping 对象关系映射)

      持久化类与数据库表之间的映射关系,即 对持久化对象的操作自动转换成对关系数据库操作。

      ROM

 2)Mybatis ( Object/Relation Mapping 对象关系映射)

      对象操作方法到SQL语句间的映射技术。

      使用XML或注解配置。能够映射基本数据元素、接口、Java对象到数据库。

2、工作流机制

  1) 工作流

        加载配置文件

            --应用配置文件、关联映射文件

        获取sqlSession

           --生成SqlSessionFactory,获取SqlSession

        执行查询操作

          --Session执行SQL

          mybatis-逻辑基点   

    2)具体实现

    (a)创建配置config.xml/映射userMapper文件

    (b)构造User对象和操作数据接口GetUserInfo.java

    (c)完成数据库操作查询

            mybatis 工作流

           mybatis流程原理解析

            mybatis 流程原理图解析

           :(1)Environment环境类,是单例类,在MyBatis运行开启后只会存在一个唯一的环境实例。

                   虽然在Configuration配置文件中配置多个环境,但是项目运行中只会存在其中的一个,一般项目会存在开发环境和测                     试环境、生产环境三大环境,其是否可以设置到配置文件中,在开发时使用开发环境,测试时使用测试环境,正式运                     营时可以使用生产环境

                 (2)jdbc默认事务关闭(自动提交),需手动开启(事务手动提交)。

                          Mybatis默认事务开启(事务手动提交),设置为true(数据库操作自动提交)。

3、API

       mybatis组件:mybatis-3.2.3..jar   mysql-connector-java-5.1.12.jar 

(1)加载配置方式 -xml、注解

       xml文件

         config.xml

         config.xml

         userMapper.xml

         userMapper.xml

       注解方式

         config.xml

         config.xml

         userMapper

         userMapper

(2)配置 config.xml-SqlSessionFactory

         获取session(对象操作转换为数据库操作)

         sqlsessionfactory

        session - 通过sqlSessionFactory获取session(对象操作转换为数据库操作)

        dataSource- 数据源,使用连接池

        transactionManager - 事务管理器,type=jdbc,managed

            type=jdbc: 表示mybatis的事务控制直接使用jdbc的提交回滚设置的,

                             mybatis依赖从数据库源获得的数据库连接来管理事物的范围。实际使用jdbc实现事务控制

           type=managed: mybatis事务控制其本身不做任何控制,不会调用jdbc事务控制,事务控制交给外部容器,比如spring方式

           MyBatis的事务模块采用的是工厂模式

           org.apache.ibatis.transaction

               --org.apache.ibatis.transaction.jdbc

               --JdbcTransaction.java

           org.apache.ibatis.transaction.managed

               --ManagedTransaction.java

               --ManagedTransactionFactory.java

               --Transaction.java

               --TransactionException.java

               --TransactionFactory.java

           具体参照:https://www.cnblogs.com/V1haoge/p/6634151.html

(3)事务

         commit()-事务提交

    rollBack()-事务回滚

   close()-关闭数据库连接

   getConnection()-获取数据库连接

4、ResultMap - 复杂数据库操作

      ResultMap可实现复杂查询结果到复杂对象关联关系的转换

(1)复杂E-R图

       E-R图

    (2)Java对象配置

//User对象

public class User {
	
	private Integer id;
	private String userName;
	private String corp;
	private List<Course> courses;
	
	public User() {}
	
	public User(Integer id,String userName,String corp) {
		this.id=id;
		this.userName=userName;
		this.corp=corp;
	}
}

//Course
public class Course {
	private Integer id;
	private String courseName;
	private Teacher teacher;
}

//Teacher
public class Teacher{
	private Integer id;
	private String teacherName;	
}

    (3)映射文件userMapper.xml 

       标签:Constructor、Collection、Association

       Constructor:类在实例化时,用来注入结果到构造方法中

           idArg - ID参数,标记结果作为ID可以帮助提高整体效能

           arg - 注入到构造方法的一个普通结果

       Collection:实现一对多的关联  

          id - 一个ID结果;标记结果作为ID可以提高整体效能  

          result - 注入到字段或JavaBean 属性的普通结果 

       Association:复杂类型间的关联  

         id - 一个ID结果;标记结果作为ID可以提高整体效能  

         result - 注入到字段或JavaBean 属性的普通结果

       userMapp.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.micro.profession.mybatis.UserOp">
	<select id="getUser" parameterType="int"
		resultMap="UserMap">
		select 
		  u.id as userId,u.username as userName,u.corp as corp,
		  c.id as courseId,c.coursename as couserName,
		  t.id as teacherId,t.teachername as teacherName
		from user u 
		left join usercourse uc
		on u.id=uc.user_id
		left join course c
		on uc.course_id=c.id
		left join teacher t
		on c.teacher_id=t.id
		where u.id=#{id}
	</select>
	
	<resultMap type="com.micro.profession.mybatis.User" id="UserMap">
		<constructor>
			<idArg column="userId" javaType="int"/>
			<arg column="userName" javaType="String"/>
			<arg column="corp" javaType="String"/>
		</constructor>
		<collection property="courses" ofType="com.micro.profession.mybatis.Course">
			<id property="id" column="courseId"/>
			<result property="courseName" column="couserName"/>
			<association property="teacher" column="teacher_id" 
			 javaType="com.micro.profession.mybatis.Teacher">
			 	<id property="id" column="teacherId"/>
				<result property="teacherName" column="teachername"/>
			 </association>
		</collection>
	</resultMap>
</mapper>

    (4)数据库操作

       mybatis 数据库操作

5、mybatis 内置数据库 - Mybatis 3.0

     config.xml   dataSource type=POOLED  启用连接池

     连接池常用参数:

    1)poolMaximumActiveConnections    

          - 数据库最大活跃连接数  

          - 考虑到随着连接数增加,性能可能达到拐点,不建议设置过大

    2)poolMaximumIdleConnections    

         - 最大空闲连接数    

         - 经验值建议=poolMaximum

    3)poolMaximumActiveCheckoutTime    

         - 获取连接时若没有idleConnection同时activeConnection达到最大值,则从activeConnections列表第一个开始,检查是否超过poolMaximumCheckoutTime,若超过则强制使其失效,返回该连接。    

        - 由于SQL执行时间受服务器配置、表结构不同,建议设置为预期最大SQL执行时间。

    4)poolTimeToWait    

        - 获取服务器端数据库连接的超时时间,若超过该时间则打印日志同时重新获取。    

        - 建议使用默认值20s。

    5)poolPingEnabled  

         - 启用连接侦测,检查连接池中连接是否有效。    

         - 默认关闭,建议启用,防止服务器端异常关闭导致客户端错误。

    6)poolPingQuery  

         - 侦测SQL,建议使用select 1 ,开销小。

    7)poolPingConnectionsNotUsedFor    

        - 侦测时间,建议小于服务端超时时间,MySQL默认超时时间8小时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值