手把手搭建mybatis入门程序

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 手把手搭建mybatis入门程序

准备数据库表

1. CREATE TABLE `t_car` (
2.   `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
3.   `car_num` varchar(100) DEFAULT NULL COMMENT '汽车编号',
4.   `brand` varchar(100) DEFAULT NULL COMMENT '品牌',
5.   `guide_price` decimal(10,0) DEFAULT NULL COMMENT '指导价',
6.   `produce_time` varchar(10) DEFAULT NULL COMMENT '生成时间',
7.   `car_type` varchar(100) DEFAULT NULL COMMENT '汽车类型',
8. PRIMARY KEY (`id`)
9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

搭建工程

 创建Project:建议创建Empty Project,设置Java版本以及编译版本等。

创建Module:普通的Maven Java模块

打包方式:jar(不需要war,因为mybatis封装的是jdbc。)

1. <groupId>com.study</groupId>
2. <artifactId>mybatis001</artifactId>
3. <packaging>jar</packaging>
4. <version>1.0-SNAPSHOT</version>

引入依赖(mybatis依赖 + mysql驱动依赖)

1. <dependencies>
2. <!--mybatis核心依赖-->
3. <dependency>
4. <groupId>org.mybatis</groupId>
5. <artifactId>mybatis</artifactId>
6. <version>3.5.10</version>
7. </dependency>
8. <!--mysql驱动依赖-->
9. <dependency>
10. <groupId>mysql</groupId>
11. <artifactId>mysql-connector-java</artifactId>
12. <version>8.0.30</version>
13. </dependency>
14. </dependencies>

在resources根目录下新建mybatis-config.xml配置文件

1. <?xml version="1.0" encoding="UTF-8" ?>
2. <!DOCTYPE configuration
3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
5. <configuration>
6. <environments default="development">
7. <environment id="development">
8. <transactionManager type="JDBC"/>
9. <dataSource type="POOLED">
10. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
11. <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
12. <property name="username" value="root"/>
13. <property name="password" value="newroot"/>
14. </dataSource>
15. </environment>
16. </environments>
17. <mappers>
18. <!--sql映射文件创建好之后,需要将该文件路径配置到这里-->
19. <mapper resource=""/>
20. </mappers>
21. </configuration>

注意1:mybatis核心配置文件的文件名不一定是mybatis-config.xml,可以是其它名字。

注意2:mybatis核心配置文件存放的位置也可以随意。这里选择放在resources根下,相当于放到了类的根路径下。

在resources根目录下新建CarMapper.xml配置文件

1. <?xml version="1.0" encoding="UTF-8" ?>
2. <!DOCTYPE mapper
3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5. <!--namespace先随意写一个-->
6. <mapper namespace="car">
7. <!--insert sql:保存一个汽车信息-->
8. <insert id="insertCar">
9.         insert into t_car
10.             (id,car_num,brand,guide_price,produce_time,car_type)
11.         values
12.             (null,'102','丰田mirai',40.30,'2014-10-05','氢能源')
13. </insert>
14. </mapper>
  • 注意1:sql语句最后结尾可以不写“;”
  • 注意2:CarMapper.xml文件的名字不是固定的。可以使用其它名字。
  • 注意3:CarMapper.xml文件的位置也是随意的。这里选择放在resources根下,相当于放到了类的根路径下。
  • 注意4:将CarMapper.xml文件路径配置到mybatis-config.xml:

编写MyBatisIntroductionTest代码

1. /**
2.  * @author 风轻云淡
3.  */
4. public class MybatisIntroductionTest {
5. public static void main(String[] args) {
6. //1.创建sqlSessionFactorBuilder对象
7. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
8. //2.创建sqlSessionFactor对象
9. InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("mybatis-config.xml");
10. SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
11. //3.创建sqlSession对象
12. SqlSession sqlSession = sqlSessionFactory.openSession();
13. //4.执行sql语句
14. //insertCar为执行sql语句的id
15. int count = sqlSession.insert("insertCar");
16.         System.out.println("插入数据条数:"+count);
17. //5.提交(mybatis默认采用的事务管理器为JDBC,默认是不提交的,需要手动提交)
18.         sqlSession.commit();
19. //6.关闭资源
20.         sqlSession.close();
21. 
22.     }
23. }

注意1:默认采用的事务管理器是:JDBC。JDBC事务默认是不提交的,需要手动提交。

核心配置文件的名字是随意的,因为以下的代码:

1. // 文件名是出现在程序中的,文件名如果修改了,对应这里的java程序也改一下就行了。
2. InputStream is = Thread.currentThread().getContextClassLoader()
3.             .getResourceAsStream("mybatis-config.xml");

mybatis核心配置文件的名字是随意的,存放路径也是随意的。

虽然mybatis核心配置文件的名字不是固定的,但通常该文件的名字叫做:mybatis-config.xml

虽然mybatis核心配置文件的路径不是固定的,但通常该文件会存放到类路径当中,这样让项目的移植更加健壮。

  • 在mybatis中提供了一个类:Resources【org.apache.ibatis.io.Resources】,该类可以从类路径当中获取资源,我们通常使用它来获取输入流InputStream,代码如下
1. // 这种方式只能从类路径当中获取资源,也就是说mybatis-config.xml文件需要在类路径下。
2. InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

运行程序,查看运行结果,以及数据库表中的数据:

完整规范写法

1. public class MyBatisCompleteCodeTest {
2. public static void main(String[] args) {
3. SqlSession sqlSession = null;
4. try {
5. // 1.创建SqlSessionFactoryBuilder对象
6. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
7. // 2.创建SqlSessionFactory对象
8. SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
9. // 3.创建SqlSession对象
10.             sqlSession = sqlSessionFactory.openSession();
11. // 4.执行SQL
12. int count = sqlSession.insert("insertCar");
13.             System.out.println("更新了几条记录:" + count);
14. // 5.提交
15.             sqlSession.commit();
16.         } catch (Exception e) {
17. // 回滚
18. if (sqlSession != null) {
19.                 sqlSession.rollback();
20.             }
21.             e.printStackTrace();
22.         } finally {
23. // 6.关闭
24. if (sqlSession != null) {
25.                 sqlSession.close();
26.             }
27.         }
28.     }
29. }

引入日志框架lockback

  • 引入日志框架的目的是为了看清楚mybatis执行的具体sql。
  • 启用标准日志组件,只需要在mybatis-config.xml文件中添加以下配置:【可参考mybatis手册】

mybatis-config.xml修改增加:

1. <settings>
2.   <setting name="logImpl" value="STDOUT_LOGGING" />
3. </settings>

标准日志也可以用,但是配置不够灵活,可以集成其他的日志组件,例如:log4j,logback等。

  • logback是目前日志框架中性能较好的,较流行的,所以我们选它。
  • 引入logback的步骤:
  • 第一步:引入logback相关依赖
1. <dependency>
2. <groupId>ch.qos.logback</groupId>
3. <artifactId>logback-classic</artifactId>
4. <version>1.2.11</version>
5. </dependency>
  • 第二步:引入logback相关配置文件(文件名叫做logback.xml或logback-test.xml,放到类路径当中)
1. <?xml version="1.0" encoding="UTF-8"?>
2. 
3. <configuration debug="false">
4. <!-- 控制台输出 -->
5. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
6. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
7. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
8. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
9. </encoder>
10. </appender>
11. <!-- 按照每天生成日志文件 -->
12. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
13. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
14. <!--日志文件输出的文件名-->
15. <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
16. <!--日志文件保留天数-->
17. <MaxHistory>30</MaxHistory>
18. </rollingPolicy>
19. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
20. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
21. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
22. </encoder>
23. <!--日志文件最大的大小-->
24. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
25. <MaxFileSize>100MB</MaxFileSize>
26. </triggeringPolicy>
27. </appender>
28. 
29. <!--mybatis log configure-->
30. <logger name="com.apache.ibatis" level="TRACE"/>
31. <logger name="java.sql.Connection" level="DEBUG"/>
32. <logger name="java.sql.Statement" level="DEBUG"/>
33. <logger name="java.sql.PreparedStatement" level="DEBUG"/>
34. 
35. <!-- 日志输出级别,logback日志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR -->
36. <root level="DEBUG">
37. <appender-ref ref="STDOUT"/>
38. <appender-ref ref="FILE"/>
39. </root>
40. 
41. </configuration>

再次执行main方法

SqlSessionUtil工具类封装

  • 每一次获取SqlSession对象代码太繁琐,封装一个工具类
1. 
2. /**
3.  * @author 风轻云淡
4.  */
5. public class SqlSessionUtil {
6. private static SqlSessionFactory sqlSessionFactory;
7. 
8. /**
9.      * 类加载时初始化sqlSessionFactory对象
10.      */
11. static {
12. try {
13. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
14.             sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
15.         } catch (Exception e) {
16.             e.printStackTrace();
17.         }
18.     }
19. 
20. /**
21.      * 每调用一次openSession()可获取一个新的会话,该会话支持自动提交。
22.      *
23.      * @return 新的会话对象
24.      */
25. public static SqlSession openSession() {
26. return sqlSessionFactory.openSession(true);
27.     }
28. }


相关文章
|
6月前
|
SQL Java 数据库连接
MyBatis 框架入门理论与实践
MyBatis 框架入门理论与实践
73 6
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
288 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
5月前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
71 6
|
5月前
|
Java 关系型数据库 数据库连接
MyBatis入门(1)
MyBatis入门(1)
68 2
|
1月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
41 0
Mybatis入门(select标签)
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
6月前
|
Java 数据库连接 测试技术
MyBatis-Plus入门
MyBatis-Plus入门
|
3月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
170 0
|
5月前
|
Java 关系型数据库 数据库连接
技术好文共享:第一讲mybatis入门知识
技术好文共享:第一讲mybatis入门知识
34 6
|
5月前
|
Java 关系型数据库 MySQL
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
Mybatis入门之在基于Springboot的框架下拿到MySQL中数据
50 4