文章目录
- 大纲
- 定义类、创建表
- 添加相关依赖
- 五件套
- 5.1 mybatis-config.xml
- 5.2 MybatisUtils.java
- 5.3 \**Mapper.xml
- 5.4 \**Mapper.java
- 5.5 \**Dao.java
- 测试类
大纲
- 在Java中定义类、在数据库汇总创建表
- 添加依赖
- 编写5件套
- 测试
定义类、创建表
import java.time.LocalDate;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private int uid; // 用户IDprivate String email; // 邮箱private String password; // 密码private String nickname; // 昵称private String uname; // 用户名private LocalDate birthday; // 生日private String gender; // 性别
}
CREATE TABLE User (uid INT AUTO_INCREMENT PRIMARY KEY,email VARCHAR(50) NOT NULL,password VARCHAR(100) NOT NULL,nickname VARCHAR(30),uname VARCHAR(30) NOT NULL,birthday DATE,gender CHAR(1),CONSTRAINT chk_gender CHECK (gender IN ('M', 'F', 'O'))
);-- 解释:
-- uid: 自增主键
-- email: 邮箱,最长50个字符,不允许为空
-- password: 密码,最长100个字符,不允许为空
-- nickname: 昵称,最长30个字符
-- uname: 用户名,最长30个字符,不允许为空
-- birthday: 生日,使用DATE类型
-- gender: 性别,单个字符,只能是 'M', 'F' 或 'O',分别表示男性、女性和其他
模拟数据
INSERT INTO User (email, password, nickname, uname, birthday, gender) VALUES
('john.doe@example.com', 'password123', 'John', 'johndoe', '1990-01-01', 'M'),
('jane.smith@example.com', 'securepass456', 'Jane', 'janesmith', '1985-05-15', 'F'),
('alex.jones@example.com', 'mypassword789', 'Alex', 'alexjones', '1992-07-22', 'O');
添加相关依赖
<!--lombok-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<!--junit-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version>
</dependency>
<!--mysql-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
<!--mybatis-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version>
</dependency>
五件套
5.1 mybatis-config.xml
mybatis的配置文件
有几个地方需要你做修改
- 数据库名称,在3306后边,请修改成你自己的数据库的名称。如果数据库不在本地,比如在云服务器上,那还需要你把localhost修改为云服务器的ip地址。
- 用户名和密码,修改为自己的用户名和密码。
- mapper映射文件的文件名。记者修改成自己的mapper的文件名。(如果想简单写,就把mybatis-config.xml 和 **mapper.xml 写在同级目录,这样在配的时候,就不用考虑文件路径的问题了。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration><!-- 环境配置,定义了应用运行的环境,默认为development --><environments default="development"><!-- development环境的详细配置 --><environment id="development"><!-- 事务管理器配置,这里使用JDBC事务管理器 --><transactionManager type="JDBC"/><!-- 数据源配置,使用连接池管理数据库连接 --><dataSource type="POOLED"><!-- 数据库驱动类路径 -->防止你忘改,我特意加的中文报错<property name="driver" value="com.mysql.cj.jdbc.Driver"/><!-- 数据库连接URL,这里配置的是一个MySQL数据库的连接 --><property name="url" value="jdbc:mysql://localhost:3306/mine2024?useSSl=trur&sueUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/><!-- 数据库用户名 -->防止你忘改,我特意加的中文报错<property name="username" value="root"/><!-- 数据库密码 --><property name="password" value="123456"/></dataSource></environment></environments><!-- 定义mapper映射文件位置 --><mappers><!-- 指向具体的mapper映射文件 -->防止你忘改,我特意加的中文报错<mapper resource="TagMapper.xml"/></mappers></configuration>
5.2 MybatisUtils.java
你同样需要对这个文件做一些修改:
你需要修改将String resource = "mybatis-config4tag.xml";
修改成你自己在5.1里建的配置文件的名字
package com.example.demo.tree.learn1.dao;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.IOException;
import java.io.InputStream;//sqlSessionFactory -->sqlSession
public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;//使用mybatis第一步,获取sqlSessionFactory对象static {try {String resource = "mybatis-config4tag.xml";防止你忘改,我特意加的中文报错InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}//既然有了sqlSessionFactory,顾名思义,我们就可以从中获得sqlSession的实例了//sqlSession 完全包含了面向数据库执行SQL命令所需的所有方法public static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}
}
5.3 **Mapper.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="com.example.demo.user.dao.mapper.UserMapper">防止忘改类名<!-- 查询所有用户信息 --><select id="getAllUsers" resultType="com.example.demo.user.pojo.User">防止忘改类名SELECT uid, email, password, nickname, uname, birthday, gender FROM User</select><insert id="insert" parameterType="com.example.demo.user.pojo.User">防止忘改类名INSERT INTO User (email, password, nickname, uname, birthday, gender)VALUES (#{email}, #{password}, #{nickname}, #{uname}, #{birthday}, #{gender})</insert></mapper>
5.4 **Mapper.java
package com.example.demo.user.dao.mapper;import com.example.demo.user.pojo.User;
import java.util.List;public interface UserMapper {List<User> getAllUsers();int insert(User user);
}
5.5 **Dao.java
package com.example.demo.user.dao;import com.example.demo.user.dao.mapper.UserMapper;
import com.example.demo.user.pojo.User;
import org.apache.ibatis.session.SqlSession;import java.util.List;public class UserDao {SqlSession sqlSession ;UserMapper userMapper;public UserDao() {sqlSession = MybatisUtils.getSqlSession();userMapper = sqlSession.getMapper(UserMapper.class);}public List<User> getAllUsers() {return userMapper.getAllUsers();}public int insert(User user) {int res=userMapper.insert(user);sqlSession.commit();return res;}}
测试类
package com.example.demo.user;import com.example.demo.user.dao.UserDao;
import com.example.demo.user.pojo.User;
import org.junit.jupiter.api.Test;import java.time.LocalDate;public class UserDaoTest {@Testvoid testGetAllUsers() {UserDao userDao = new UserDao();System.out.println(userDao.getAllUsers());}@Testvoid testInsert() {UserDao userDao = new UserDao();// 创建一个模拟的 User 对象User user = new User();user.setEmail("test.user@example.com");user.setPassword("TestPassword123");user.setNickname("TestUser");user.setUname("testuser");user.setBirthday(LocalDate.of(2000, 1, 1));user.setGender("M");userDao.insert(user);System.out.println(userDao.getAllUsers());}
}