Mybatis 22_MyBatis运行原理初探&项目1mybatisqs

22_MyBatis运行原理初探

  • MyBatis入门
    • MyBatis执行原理:
    • 为MyBatis添加日志
  • 项目1mybatisqs

MyBatis入门

  1. 提供一份配置文件(放在类加载路径下即可),它负责管理与数据库的连接。
    从MyBatis文档中可以拷贝一个样本出来。

  2. 定义Mapper文件。
    Mapper文件:负责管理MyBatis所执行的SQL语句

  3. 编程步骤:
    (1) 创建SqlSessionFactory(应用相关的,应用不退出,它应该一直存在)
    (2) 打开SqlSession(每次数据库操作完成,都应该将其关闭)
    (3) 调用SqlSession的insert、update、delete、selectOne(查询一条)、selectList(查询多条)、selectMap等方法,执行SQL语句。

           第一个参数是标记要执行的sql语句即mapper文件namespace+语句ID
	       第二个参数是为sql语句传参数

(4) SqlSession的commit(提交)或rollback(回滚)处理事务
(5) SqlSession的close(关闭)

MyBatis执行原理:

sqlSession.xxx(“org.itcheng.app.dao.NewsMapper.saveNews”, news)

▲ 第一个参数由两部分组成:

  1. namespace: 决定到哪个mapper文件中去找SQL语句。

  2. SQL语句的id: 该id在mapper文件的的id属性来指定

▲ MyBatis如何为SQL语句中的占位符传值:

通常有两种方式:

【第一种】:只传入单个对象(java对象或Map)作为参数,对象同名的属性值或Map的相同key对应value,就传给同名占位符.

		Map<String, String> news = new HashMap<>();
		news.put("title", "一点寒芒先到");
		news.put("content", "随后枪出入龙");
		sqlSession.insert("org.itcheng.app.dao.NewsMapper.saveNewsa", news);

【第二种】:只传入多个参数,此时参数名和sql语句中占位符的名字对应上。
由于Java默认忽略参数名,因此这种方式必须(有Java 8的-parameters编译选项支持)或(@Param注解来支持)。

▲ MyBatis底层如何执行这条语句

(1) 获取Connection

(2) 将要执行的SQL语句中的#{}占位符替换成?占位符

DEBUG [main] org.itcheng.app.dao.NewsMapper.saveNewsa ==>  Preparing: insert into news_inf values (null, ?, ?) 
DEBUG [main] org.itcheng.app.dao.NewsMapper.saveNewsa ==> Parameters: 美丽新世界1(String), 有一个魅力的新世界1(String)
DEBUG [main] org.itcheng.app.dao.NewsMapper.saveNewsa <==    Updates: 1

(3) 获取PreparedStatement

(4) 为PrreparedStatement传入参数值。

(5) 执行SQL语句

为MyBatis添加日志

在你学习阶段,完整地输出MyBatis的日志,对学习很有帮助。
MyBatis支持各种日志工具,此处以Log4j 2为例。

(1) 添加日志工具的JAR包。(2个)
log4j-api-2.13.0.jar
log4j-core-2.13.0.jar
(2) 为日志工具添加配置文件。文件名不可更改log4j2.xml,放置在文件夹src下。


<Configuration status="WARN">
   
   <Appenders>
   	<Console name="Console" target

你可能感兴趣的:(MyBatis,mybatis)