目录结构
创建user表,添加数据
mysql> create database mybatis;
Query OK, 1 row affected (0.02 sec)
mysql> create table tb_user(
-> id int primary key auto_increment,
-> username varchar(20),
-> password varchar(20),
-> gender char(1),
-> addr varchar(30)
-> )engine = innodb;
Query OK, 0 rows affected (0.06 sec)
mysql> insert into tb_user(username,password,gender,addr) values('zhangsan','123','m','Beijing'),('lisi','234','f','tianjing'),('wangwu','111','m','Shanghai');
Query OK, 3 rows affected (0.03 sec)
创建模块,导入坐标
创建模块
导入MyBatis坐标
mvnrepository.com中查找mybatis
<dependency>
<!--MyBatis依赖-->
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<!--mysql驱动-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.2</version>
</dependency>
<dependency>
<!--logback日志框架-->
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.14</version>
<scope>test</scope>
</dependency>
<dependency>
<!--logback日志框架核心包-->
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.4.14</version>
</dependency>
resources中创建logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- CONSOLE:表示当前日志信息可以输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="local.content" level="debug" additivity="false">
<appender-ref ref="CONSOLE"/>
</logger>
</configuration>
编写Mybatis核心配置文件-解决硬编码
用于替换数据库的连接url,username,password等连接信息
在resources中创建mybatis-config.xml
将${}中的值进行替换
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<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://x.x.x.x:3306/mybatis?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="mybatis_rw"/>
<property name="password" value="xxxx"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--映射待执行的sql文件路径-->
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
编写SQL映射文件
在resources中创建sql映射文件,文件命名:"表名Mapper.xml",这里我的表名是tb_user,则命名为Tb_userMapper.xml,配置如下信息:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--名称空间-->
<mapper namespace="local.content.User">
<select id="selectAll" resultType="local.content.pojo.User">
select * from tb_user;
</select>
</mapper>
核心编码
- 定义POJO类
在PoJo中创建User类,该类要配置在Mapper.xml中的resultType
package local.content.pojo;
import lombok.*;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
//Alt+鼠标左键可以编辑整列
public class User {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
}
- 加载核心配置文件,获取SqlSessionFactory对象
- 获取SqlSession对象,执行SQL语句
- 释放资源
package local.content.mybatis;
import local.content.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;
// MyBatis快速入门
public class MyBatisDemo {
public static void main(String[] args) throws Exception {
// 1. 加载配置文件
String resource = "mybatis-config.xml";
// 2. 创建SqlSessionFactory
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3. 创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4. 执行sql
//sqlSession.selectList("namespace.id");
List<User> users = sqlSession.selectList("local.content.User.selectAll");
System.out.println(users);
// 5. 释放资源
sqlSession.close();
}
}
报错处理
1,No SLF4J providers were found
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.8.0-beta4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.8.0-beta4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2, org.apache.ibatis.exceptions.PersistenceException:
mybatis-config.xml中,第一行将
<?xml version="1.0" encoding="UTF-8" ?>
改为
<?xml version="1.0" encoding="UTF8" ?>
3, SQLNonTransientConnectionException: Could not create connection to database server.
<property name="url" value="jdbc:mysql://192.168.10.129:3358/mybatis?useSSL=false/>
改为
<property name="url" value="jdbc:mysql://192.168.10.129:3358/mybatis?useSSL=false&serverTimezone=UTC"/>
4, log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
参考这个解决:
log4j:WARN No appenders could be found for logger 解决办法-CSDN博客