目录
四:编写数据源参数文件(路径:src/main/resources/config.properties)
五:编写核心配置文件(路径:src/main/resources/mybatis/mybatis-config.xml)
六:编写映射配置文件(路径:src/main/resources/mapper/PersonMapper.xml)
一:新建maven项目并导入依赖
1. 可以使用图形化构建maven项目。
2.也可以使用命令行构建maven项目。
mvn archetype:generate
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lihaozhe</groupId>
<artifactId>mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<name>mybatis</name>
<packaging>jar</packaging>
<properties>
<jdk.version>17</jdk.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
<maven.compiler.encoding>utf-8</maven.compiler.encoding>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.test.failure.ignore>true</maven.test.failure.ignore>
<maven.test.skip>true</maven.test.skip>
<junit.version>5.8.2</junit.version>
<fastjson.version>2.0.6</fastjson.version>
<gson.version>2.9.0</gson.version>
<hutool.version>5.8.0.M3</hutool.version>
<jackson.version>2.13.3</jackson.version>
<lombok.version>1.18.24</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!--commons-->
<!--commons-lang3-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
<!--commons-io-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!--json-->
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--gson-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
</dependencies>
<build>
<!--项目打包文件名-->
<!--<finalName>news</finalName>-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
<!-- 编译级别 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!-- 设置编译字符编码 -->
<encoding>UTF-8</encoding>
<!-- 设置编译jdk版本 -->
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<!-- 打包的时候跳过测试junit begin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
二:根据数据表生成对应的POJO类
(也就是将数据库中的表和生成的POJO类逐个对应起来(形成映射关系))。
三:编写接口(这里使用了一张用户表,并采用两种方式查询)
1. resultType查询用户列表
2. resultMap查询用户列表
package com.lihaozhe.mapper;
import com.lihaozhe.pojo.Person;
import java.util.List;
public interface PersonMapper {
/**
* 查询用户列表 resultType
*
* @return
*/
List<Person> selectAll4t();
/**
* 查询用户列表 resultMap
*
* @return
*/
List<Person> selectAll4m();
}
四:编写数据源参数文件(路径:src/main/resources/config.properties)
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///mybatis?useUnicode=true&characterEncoding=UTF8&useSSL=false&useServerPrepStmts=false&rewriteBatchedStatements=true&cachePrepStmts=true&allowMultiQueries=true&serverTimeZone=Aisa/Shanghai
username=root
password=Xxx!!@@6633
五:编写核心配置文件(路径:src/main/resources/mybatis/mybatis-config.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
这些属性可以在外部进行配置,并可以进行动态替换。
你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置
-->
<properties resource="config.properties" />
<!--
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。
例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
-->
<!--默认使用的环境 ID(比如:default="development")。-->
<environments default="development">
<!--每个 environment 元素定义的环境 ID(比如:id="development")。-->
<environment id="development">
<!--事务管理器的配置(比如:type="JDBC")。-->
<!--
事务管理器(transactionManager)
在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用 TransactionFactory 接口实现类的全限定名或类型别名代替它们。
-->
<transactionManager type="JDBC"/>
<!--数据源的配置(比如:type="POOLED")-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。
但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。
在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。
你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。
-->
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<!--单独加载某个映射配置文件-->
<!--<mapper resource="mybatis/mapper/PersonMapper.xml"/>-->
<!-- 使用完全限定资源定位符(URL) -->
<!--<mapper url="file:///home/lhz/ideaproject/mybatis/src/main/resources/mybatis/mapper/PersonMapper.xml"/>-->
<!--加载某包下所有的映射配置文件-->
<!--<package name="com.lihaozhe.mapper"/>-->
<package name="mybatis.mapper"/>
</mappers>
</configuration>
六:编写映射配置文件(路径:src/main/resources/mapper/PersonMapper.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 命名空间 对应接口的名字
-->
<mapper namespace="com.lihaozhe.mapper.PersonMapper">
<!--
select 用于查询
id 与接口中方法的名字同名 即调用接口中方法的时候 该方法会找到该配置文件中对应的SQL
resultType 返回值数据类型 或 泛型为该数据类型的集合
-->
<!--查询用户列表 resultType-->
<select id="selectAll4t" resultType="com.lihaozhe.pojo.Person">
SELECT `id`, `uuid`, `mobile`, `nickname`, `id_card`
FROM `person`
</select>
</mapper>
七:测试数据库的连通性
@Test
public void testConetion() throws IOException {
// 核心配置文件classpath路径
String resource = "mybatis/mybatis-config.xml";
// 加载配置文件
Reader reader = Resources.getResourceAsReader(resource);
// 构建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 从SqlSessionFactory对象中获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
System.out.println(sqlSession.getConnection());
// 归还连接给数据源
sqlSession.close();
}
八:编写方法获取SqlSession对象
private SqlSession sqlSession;
// JUnit5 @BeforeAll和@BeforeEach注解替换了 JUnit4 中的@Before注解。
// 它⽤于表⽰应在当前类中的每个@Test⽅法之前执⾏注解⽅法。
// 注意:@BeforeAll注解的⽅法必须为静态⽅法,否则它将引发运⾏时错误。
// 注意:@BeforeEach注解的⽅法不得为静态⽅法,否则它将引发运⾏时错误。
@BeforeEach
public void SqlSession() throws IOException {
// 核心配置文件classpath路径
String resource = "mybatis/mybatis-config.xml";
// 加载配置文件
Reader reader = Resources.getResourceAsReader(resource);
// 构建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 从SqlSessionFactory对象中获取SqlSession
sqlSession = sqlSessionFactory.openSession();
}
九:测试
@Test
public void selectAll4t(){
// 获取该接口的代理对象
PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
// 执行接口中的方法
List<Person> people = mapper.selectAll4t();
// 释放SqlSession资源
sqlSession.close();
// 遍历集合
people.forEach(System.out::println);
}
测试结果发现idCard属性获取到的值为null,这是由于查询字段中没有idCard字段,
换而言之就是idCard属性没有 与id_card字段形成映射关系。
解决方法有两种:
1. 使用ResultMap做结果映射集,不再使用ResultType做结果映射集。
2.在核心配置文件中设置 mapUnderscoreToCamelCase值为true。
十:解决驼峰命名和下划线映射关系
1.使用ResultMap
在映射配置文件中编写resultMap
<!--描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。-->
<!--
resultMap
id 在命名空间中唯一的标识符
type 结果集映射的javabean 或者 泛型为该类型的集合
-->
<resultMap id="PersonMap" type="com.lihaozhe.pojo.Person">
<!--
id 主键映射
result 非主键映射
property javabean 中的 filed
column datatable 中的 filed
-->
<id property="id" column="id"/>
<result property="id" column="id"/>
<result property="uuid" column="uuid"/>
<result property="mobile" column="mobile"/>
<result property="nickname" column="nickname"/>
<result property="idCard" column="id_card"/>
</resultMap>
修改select id="selectAll4m" 的属性resultType="com.lihaozhe.pojo.Person"为resultMap="PersonMap"
<select id="selectAll4m" resultMap="PersonMap">
SELECT `id`, `uuid`, `mobile`, `nickname`, `id_card`
FROM `person`
</select>
2.配置 mapUnderscoreToCamelCase值为true
在核心配置文件中配置参数如下:
<settings>
<!-- 驼峰命名与下划线自动转换 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
十一:在控制台显示程序执行的log日志
在核心配置文件中设置logImpl的值为 STDOUT_LOGGING
<settings>
<!-- log日志 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
这样MyBatis快速入门就结束了