2、搭建MyBatis
2.1、开发环境
-
IDE:idea 2019.2
-
构建工具:maven 3.8.4
-
MySQL版本:MySQL 5.7
-
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(编码不默认为utf8,需手动指定):
jdbc:mysql://localhost:3306/ssm
MySQL 8版本的url(编码默认为utf8):
jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
否则运行测试用例报告如下错误:
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or
represents more
2.2、创建Maven工程
2.2.1、创建空项目
2.2.2、设置项目名称和路径
2.2.3、设置项目sdk
2.2.4、项目初始状态
注意需要关闭项目再重新打开,才能看到SSM文件夹
2.2.5、配置maven
2.2.6、创建module
右击SSM文件夹,创建新module
选择maven
配置module名称和路径
module初始状态
设置打包方式
引入依赖
<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>5.1.49</version>
</dependency>
</dependencies>
2.3、创建数据库及表
CREATE TABLE `t_user` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`username` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
2.4、创建实体类
package org.rain.mybatis.pojo;
/**
* @author liaojy
* @date 2023/4/25 - 7:53
*/
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String gender;
private String email;
public User() {
}
public User(Integer id, String username, String password, Integer age, String gender, String email) {
this.id = id;
this.username = username;
this.password = password;
this.age = age;
this.gender = gender;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
'}';
}
}
2.5、创建MyBatis的核心配置文件
-
习惯上(非强制)命名为mybatis-config.xml;将来整合Spring之后,这个配置文件可以省略。
-
核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息
-
核心配置文件存放在src/main/resources目录下
<?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>
<!--配置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--引入mybatis的映射文件-->
<mappers>
</mappers>
</configuration>
2.6、创建Mapper接口
-
Mybatis中的mapper接口相当于之前的dao
-
mapper接口不需要实现类
-
mapper接口命名惯例:表名+mapper
2.7、创建建MyBatis的映射文件
2.7.1、相关概念
ORM(Object Relationship Mapping)对象关系映射。
-
对象:Java的实体类对象
-
关系:关系型数据库
-
映射:二者之间的对应关系
Java概念 | 数据库概念 |
---|---|
类 | 表 |
属性 | 字段/列 |
对象 | 记录/行 |
2.7.2、映射文件的命名规则
表所对应的实体类的类名+Mapper.xml
例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此,一张表,对应一个实体类,对应一个Mapper接口,对应一个映射文件;
Mapper接口中的方法,对应映射文件中的SQL语句。
2.7.3、映射文件的位置
MyBatis映射文件存放的位置是src/main/resources/mappers目录下
<?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="org.rain.mybatis.mapper.UserMapper">
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
</insert>
</mapper>
注意:
mapper接口的全类名和映射文件的命名空间(namespace)保持一致,如org.rain.mybatis.mapper.UserMapper
mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致,如insertUser
2.7.4、在核心配置文件引入映射文件
<!--引入mybatis的映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.XML"/>
</mappers>
2.8、测试添加用户功能
2.8.1、通过接口方法定位SQL
package org.rain.mybatis.test;
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 org.junit.Test;
import org.rain.mybatis.mapper.UserMapper;
import java.io.IOException;
import java.io.InputStream;
/**
* @author liaojy
* @date 2023/5/17 - 23:45
*/
public class MybatisTest {
@Test
public void testInsert() throws IOException {
//读取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接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
//提交事务
//sqlSession.commit();
System.out.println("结果:"+result);
//关闭sqlsession
sqlSession.close();
}
}
2.8.2、通过字符串直接定位SQL
package org.rain.mybatis.test;
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 org.junit.Test;
import org.rain.mybatis.mapper.UserMapper;
import java.io.IOException;
import java.io.InputStream;
/**
* @author liaojy
* @date 2023/5/17 - 23:45
*/
public class MybatisTest {
@Test
public void testInsert() throws IOException {
//读取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);
//通过字符串直接执行Mybatis映射文件中的SQL
int result = sqlSession.insert("org.rain.mybatis.mapper.UserMapper.insertUser");
//提交事务
//sqlSession.commit();
System.out.println("结果:"+result);
//关闭sqlsession
sqlSession.close();
}
}
2.9、使用log4j日志
2.9.1、引入依赖
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.9.2、创建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>
2.9.3、日志效果示例
如图,再次运行测试方法后,控制台打印了详细的日志信息。
本文来自博客园,作者:Javaer1995,转载请注明原文链接:https://www.cnblogs.com/Javaer1995/p/17331944.html