第一章:Mybatis 入门步骤

  • 创建一张测试表。
  • 创建对应的 JavaBean 。
  • 创建 Mybatis 配置文件和 SQL 映射文件。
  • 测试。

第二章:Mybatis-HelloWorld

  • sql 脚本:
  1. DROP TABLE IF EXISTS `employee`;
  2. CREATE TABLE `employee` (
  3. `id` int(11) NOT NULL,
  4. `last_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  5. `gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  6. `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  7. PRIMARY KEY (`id`) USING BTREE
  8. ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
  9. INSERT INTO `employee` VALUES (1, 'tom', '男', 'tom@qq.com');
  • 导入 Mybatis 相关 jar 包的 Maven 坐标:
  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis</artifactId>
  4. <version>3.5.5</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>log4j</groupId>
  8. <artifactId>log4j</artifactId>
  9. <version>1.2.17</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>mysql</groupId>
  13. <artifactId>mysql-connector-java</artifactId>
  14. <version>8.0.21</version>
  15. </dependency>
  • Employee.java
  1. package com.sunxiaping.domain;
  2. public class Employee {
  3. private Integer id;
  4. private String lastName;
  5. private String email;
  6. private String gender;
  7. public Integer getId() {
  8. return id;
  9. }
  10. public void setId(Integer id) {
  11. this.id = id;
  12. }
  13. public String getLastName() {
  14. return lastName;
  15. }
  16. public void setLastName(String lastName) {
  17. this.lastName = lastName;
  18. }
  19. public String getEmail() {
  20. return email;
  21. }
  22. public void setEmail(String email) {
  23. this.email = email;
  24. }
  25. public String getGender() {
  26. return gender;
  27. }
  28. public void setGender(String gender) {
  29. this.gender = gender;
  30. }
  31. @Override
  32. public String toString() {
  33. return "Employee{" +
  34. "id=" + id +
  35. ", lastName='" + lastName + '\'' +
  36. ", email='" + email + '\'' +
  37. ", gender='" + gender + '\'' +
  38. '}';
  39. }
  40. }
  • 新建 log4j.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  4. <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
  5. <param name="Encoding" value="UTF-8" />
  6. <layout class="org.apache.log4j.PatternLayout">
  7. <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
  8. </layout>
  9. </appender>
  10. <logger name="java.sql">
  11. <level value="debug" />
  12. </logger>
  13. <logger name="org.apache.ibatis">
  14. <level value="info" />
  15. </logger>
  16. <root>
  17. <level value="debug" />
  18. <appender-ref ref="STDOUT" />
  19. </root>
  20. </log4j:configuration>
  • 新建 EmployeeMapper.java
  1. package com.sunxiaping.mapper;
  2. import com.sunxiaping.domain.Employee;
  3. public interface EmployeeMapper {
  4. Employee findById(Integer id);
  5. }
  • 新建映射文件 EmployeeMapper.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. <mapper namespace="com.sunxiaping.mapper.EmployeeMapper">
  6. <select id="findById" resultType="com.sunxiaping.domain.Employee">
  7. SELECT id,last_name as lastName,email,gender
  8. FROM employee
  9. WHERE id = #{id,jdbcType=INTEGER}
  10. </select>
  11. </mapper>
  • 新建全局配置文件 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://192.168.134.100:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=GMT%2B8&amp;allowPublicKeyRetrieval=true"/>
  12. <property name="username" value="root"/>
  13. <property name="password" value="123456"/>
  14. </dataSource>
  15. </environment>
  16. </environments>
  17. <mappers>
  18. <!-- 将写好的SQL映射文件注册到全局配置文件中 -->
  19. <mapper resource="com/sunxiaping/mapper/EmployeeMapper.xml"/>
  20. </mappers>
  21. </configuration>
  • 测试:
  1. package com.sunxiaping;
  2. import com.sunxiaping.domain.Employee;
  3. import com.sunxiaping.mapper.EmployeeMapper;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. /**
  11. * ①接口式编程
  12. * ②SqlSession代表和数据库的一次会话,用完必须关闭。
  13. * ③SqlSession和Connection一样,都是线程不安全的。每次使用都应该去获取新的对象。
  14. * ④Mapper接口没有实现类,但是Mybatis会为这个接口生成一个代理对象。
  15. * EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
  16. * ⑤两个重要的配置文件:
  17. * Mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等系统运行环境
  18. * Mybatis的SQL映射文件:保存每一个SQL语句的映射信息。
  19. *
  20. */
  21. public class EmployeeTest {
  22. /**
  23. * ①根据XML配置文件(全局配置文件)创建一个SqlSessionFactory对象(有数据源等一些运行的环境信息)
  24. * ②sql映射文件:配置了每一个SQL,以及SQL的封装规则等。
  25. * ③将sql映射文件注册在全局配置文件中
  26. * ④写代码:
  27. * - 根据全局配置文件获取SqlSessionFactory对象。
  28. * - 使用SqlSessionFactory工厂,获取sqlSession对象,使用其来进行CRUD。
  29. * - 一个sqlSession对象代表一次数据库的会话,用完关闭。
  30. * - 使用sql的唯一标识来告诉Mybatis执行哪个SQL
  31. *
  32. * @param args
  33. * @throws IOException
  34. */
  35. public static void main(String[] args) throws IOException {
  36. String resource = "mybatis-config.xml";
  37. InputStream inputStream = Resources.getResourceAsStream(resource);
  38. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  39. SqlSession sqlSession = sqlSessionFactory.openSession();
  40. EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
  41. Employee employee = employeeMapper.findById(1);
  42. System.out.println("employee = " + employee);
  43. sqlSession.close();
  44. }
  45. }