游侠的博客 游侠的博客
首页
  • 论文笔记
  • 一些小知识点

    • pytorch、numpy、pandas函数简易解释
  • 《深度学习500问》
开发
技术
更多
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Ranger

一名在校研究生
首页
  • 论文笔记
  • 一些小知识点

    • pytorch、numpy、pandas函数简易解释
  • 《深度学习500问》
开发
技术
更多
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Vue

  • SpringBoot2

  • JavaWeb

  • SSM

    • Spring

    • Mybatis

      • 一、MyBatis详解
      • 二、搭建MyBatis
        • 2.1、开发环境
        • 2.2、创建maven工程
        • 2.3、创建MyBatis的核心配置文件
        • 2.4、创建mapper接口
        • 2.5、创建MyBatis的映射文件
        • 2.6、MyBatis具体使用
          • 通过sqlSession对象直接执行接口方法
          • 底层方法调用
        • 2.7、加入log4j日志功能
          • ①加入依赖
          • ②加入log4j的配置文件
      • 三、MyBatis的增删改查
      • 四、核心配置文件详解
      • 五、MyBatis参数值获取
      • 六、MyBatis的各种查询方式
      • 七、特殊SQL语句的执行
      • 八、自定义映射resultMap
      • 九、动态SQL
      • 十、MyBatis的缓存
      • 十一、MyBatis的逆向工程
      • 十二、分页插件
    • SpringMVC

    • SSM整合
  • SpringBoot3

  • 技术
  • SSM
  • Mybatis
yangzhixuan
2023-03-29
目录

二、搭建MyBatis

# 2.1、开发环境

IDE:idea 2019.2

构建工具:maven 3.5.4

MySQL版本:MySQL 8

MyBatis版本:MyBatis 3.5.7

MySQL不同版本的注意事项

1、驱动类driver-class-name

MySQL 5版本使用jdbc5驱动,驱动类使用:com.mysql.jdbc.Driver

MySQL 8版本使用jdbc8驱动,驱动类使用:com.mysql.cj.jdbc.Driver

2、连接地址url

MySQL 5版本的url:

jdbc:mysql://localhost:3306/ssm(需要手动设置编码格式)

MySQL 8版本的url:

jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC(默认支持中文编码)

否则运行测试用例报告如下错误:

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or

represents more

# 2.2、创建maven工程

①打包方式:jar

②引入依赖

<dependencies>
   <!-- Mybatis核心 -->
   <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.5.7</version>
   </dependency>
    
<!-- junit测试 -->
   <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.12</version>
       <scope>test</scope>
   </dependency>
    
<!-- MySQL驱动 -->
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.16</version>
   </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 2.3、创建MyBatis的核心配置文件

习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring

之后,这个配置文件可以省略,所以大家操作时可以直接复制、粘贴。

核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

核心配置文件存放的位置是src/main/resources目录下

<?xml version="1.0" encoding="UTF-8" ?><!--约束声明,当前版本号为1.0,字符编码为utf-8-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd"><!--xml约束,规定我们能使用哪些标签-->
<configuration>
    
	<!--设置连接数据库的环境-->
	<environments default="development"><!--能够设置多个环境,根据自己需要更换环境-->
		<environment id="development"><!--开发环境-->
			<transactionManager type="JDBC"/><!--事务管理器-->
			<dataSource type="POOLED"><!--数据源,管理数据库的连接-->
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/><!--驱动类-->
				<property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
<!--引入mybatis的映射文件-->
<mappers>
	<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 2.4、创建mapper接口

MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要

提供实现类。

public interface UserMapper {
    
    /**
    * 添加用户信息
    */
    int insertUser();
}
1
2
3
4
5
6
7

# 2.5、创建MyBatis的映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射。

  • 对象:Java的实体类对象
  • 关系:关系型数据库
  • 映射:二者之间的对应关系
Java概念 数据库概念
类 表
属性 字段/列
对象 记录/行

1、映射文件的命名规则:

表所对应的实体类的类名+Mapper.xml

例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml

因此一个映射文件对应一个实体类,对应一张表的操作

MyBatis映射文件用于编写SQL,访问以及操作表中的数据

MyBatis映射文件存放的位置是src/main/resources/mappers目录下

2、 MyBatis中可以面向接口操作数据,要保证两个一致:

a>mapper接口的全类名和映射文件的命名空间(namespace)保持一致

b>mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

<?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.atguigu.mybatis.mapper.UserMapper">
    
	<!--int insertUser();-->
	<nsert id="insertUser">
		<insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
	</insert>
</mapper>
1
2
3
4
5
6
7
8
9
10
11

# 2.6、MyBatis具体使用

//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactoryBuilder对象,工厂对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
//SqlSession sqlSession = sqlSessionFactory.openSession();
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象,能够自己找到所对应的SQL语句执行并返回结果
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配
映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
//sqlSession.commit();
System.out.println("结果:"+result);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)

  • SqlSessionFactory:是“生产”SqlSession的“工厂”。

  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的

相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

  • sqlSession.commit():在没有配置自动提交事务时,需要使用这段代码去提交。

# 通过sqlSession对象直接执行接口方法

// 提供sql以及的唯一标识找到sql并执行,唯一标识是namespace.sqlId
int result = sqlSession.insert("com.atguigu.mybatis.mapper.UserMapper.insertUser")
1
2

# 底层方法调用

// 首先调用方法
int result = userMapper.insertUser();

// 本质执行下面这段代码
return Object.class.equals(method.getDeclaringClass()) ? method.invoke(this, args) : this.cachedInvoker(method).invoke(proxy, method, args, this.sqlSession);

// 在最后的底层中代码如下
switch (this.command.getType()) {
            case INSERT:
                param = this.method.convertArgsToSqlCommandParam(args);
                result = this.rowCountResult(sqlSession.insert(this.command.getName(), param));
                break;
            case UPDATE:
        		........
// command中包括这次请求的类型(SELECT、INSERT等),且最后本质上还是使用sqlSession.xxx方法执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.7、加入log4j日志功能

# ①加入依赖

<!-- log4j日志 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
1
2
3
4
5
6

# ②加入log4j的配置文件

log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
		<param name="Encoding" value="UTF-8" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}%m (%F:%L) \n" />
		</layout>
	</appender>
	<logger name="java.sql">
		<level value="debug" />
	</logger>
	<logger name="org.apache.ibatis">
		<level value="info" />
	</logger>
	<root>
		<level value="debug" />
		<appender-ref ref="STDOUT" />
	</root>
</log4j:configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

日志的级别

FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

从左到右打印的内容越来越详细,因为例如DEBUG级别日志出错,一定会打印对应的报错信息

编辑 (opens new window)
上次更新: 2024/05/30, 07:49:34
一、MyBatis详解
三、MyBatis的增删改查

← 一、MyBatis详解 三、MyBatis的增删改查→

最近更新
01
tensor比较大小函数
05-30
02
Large Language Models can Deliver Accurate and Interpretable Time Series Anomaly Detection
05-27
03
半监督学习经典方法 Π-model、Mean Teacher
04-10
更多文章>
Theme by Vdoing | Copyright © 2023-2024 Ranger | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式