第一个Mybatis程序

旧城等待, 2023-01-23 08:53 83阅读 0赞

最近再跟着B站狂神学习Mybits,跟着做了一个程序,记录下学习过程。

1、搭建环境

1.1 创建数据库

  1. CREATE DATABASE `mybatis`;
  2. USE `mybatis`;
  3. DROP TABLE IF EXISTS `user`;
  4. CREATE TABLE `user`(
  5. `id` INT(20) NOT NULL PRIMARY KEY,
  6. `name` VARCHAR(30) DEFAULT NULL,
  7. `pwd` VARCHAR(30) DEFAULT NULL
  8. )ENGINE=INNODB DEFAULT CHARSET=utf8;
  9. INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
  10. (1,'狂神','123456'),
  11. (2,'张三','123456'),
  12. (3,'李四','123456')

1.2 新建maven项目,并导入maven项目

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <!--父工程-->
  7. <groupId>com.kuang</groupId>
  8. <artifactId>Mybatis-Study</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <!--导入依赖-->
  11. <dependencies>
  12. <!--mysql驱动-->
  13. <dependency>
  14. <groupId>mysql</groupId>
  15. <artifactId>mysql-connector-java</artifactId>
  16. <version>8.0.22</version>
  17. </dependency>
  18. <!--Mybatis-->
  19. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  20. <dependency>
  21. <groupId>org.mybatis</groupId>
  22. <artifactId>mybatis</artifactId>
  23. <version>3.5.2</version>
  24. </dependency>
  25. <!--junit-->
  26. <dependency>
  27. <groupId>junit</groupId>
  28. <artifactId>junit</artifactId>
  29. <version>4.12</version>
  30. </dependency>
  31. </dependencies>
  32. </project>

2、在resources文件下创建一个.xml文件用来编写mybatis的核心配置文件(连接数据据库)

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <!--核心配置文件-->
  4. <configuration>
  5. <environments default="development">
  6. <environment id="development">
  7. <transactionManager type="JDBC"/>
  8. <dataSource type="POOLED">
  9. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  10. <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf8"/>
  11. <property name="username" value="root"/>
  12. <property name="password" value="123456"/>
  13. </dataSource>
  14. </environment>
  15. </environments>
  16. </configuration>

编写mybatis工具类

  1. package com.kuang.utils;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. //sqlSessionFactory -->sqlSession
  9. public class MybatisUtils {
  10. private static SqlSessionFactory sqlSessionFactory;
  11. static {
  12. try {
  13. //第一步:获取sqlSessionFactory对象
  14. String resource = "mybatis-config.xml";
  15. InputStream inputStream = Resources.getResourceAsStream(resource);
  16. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. //既然有了sqlSessionFactory,顾名思义,我们就可以从中获得sqlSession的实例了。
  22. //sqlSession完全包含了面向数据库执行SQL命令的所有方法
  23. //创建一个能执行sql的对象
  24. public static SqlSession getSqlSession(){
  25. return sqlSessionFactory.openSession();
  26. }
  27. }

3、编写代码

  • 实体类

    package com.kuang.pojo;

    //实体类
    public class User {

    1. private int id;
    2. private String name;
    3. private String ped;
    4. public User() {
    5. }
    6. public User(int id, String name, String ped) {
    7. this.id = id;
    8. this.name = name;
    9. this.ped = ped;
    10. }
    11. public int getId() {
    12. return id;
    13. }
    14. public void setId(int id) {
    15. this.id = id;
    16. }
    17. public String getName() {
    18. return name;
    19. }
    20. public void setName(String name) {
    21. this.name = name;
    22. }
    23. public String getPed() {
    24. return ped;
    25. }
    26. public void setPed(String ped) {
    27. this.ped = ped;
    28. }
    29. @Override
    30. public String toString() {
    31. return "User{" +
    32. "id=" + id +
    33. ", name='" + name + '\'' +
    34. ", ped='" + ped + '\'' +
    35. '}';
    36. }

    }

  • Dao接口(操作实体类的接口)

    public interface UserDao {

    1. List<User> getUserList();

    }

  • 接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件

    <?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">





4、测试

junit测试:

  1. package com.kuang.dao;
  2. import com.kuang.pojo.User;
  3. import com.kuang.utils.MybatisUtils;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.junit.Test;
  6. import java.util.List;
  7. public class UserDaoTest {
  8. @Test
  9. public void test(){
  10. //第一步:获得sqlSession对象
  11. SqlSession sqlSession = MybatisUtils.getSqlSession();
  12. //方式一:geMapper
  13. UserDao userDao = sqlSession.getMapper(UserDao.class);
  14. List<User> userList = userDao.getUserList();
  15. for (User user : userList) {
  16. System.out.println(user);
  17. }
  18. //关闭SqlSession
  19. sqlSession.close();
  20. }
  21. }

补充:再跟着视频做测试的时候,发现使用@Text需要安装 JUnitGenerator V2.0插件,然后出现插件安装不上的问题,如果有遇到同样问题的小伙伴可以看看IDEA使用@Test注解报错

注意:
错误提示(绑定接口错误)

  1. org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.

解决方法
在mybatis的核心文件中进行注册

  1. <!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册!-->
  2. <mappers>
  3. <mapper resource="com/kuang/dao/UserMapper.xml"/>
  4. </mappers>

错误提示(找不到resources里的xml文件)
就是导出资源问题:在build中配置resources , 来防止我们资源导出失败的问题

  1. java.lang.ExceptionInInitializerError
  2. Caused by: org.apache.ibatis.exceptions.PersistenceException:
  3. ### Error building SqlSession.
  4. ### The error may exist in com/kuang/dao/UserMapper.xml
  5. ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/kuang/dao/UserMapper.xml

解决方法

  1. <!--在build中配置resources,来防止资源导出失败问题-->
  2. <build>
  3. <resources>
  4. <resource>
  5. <directory>src/main/resources</directory>
  6. <includes>
  7. <include>**/*.properties</include>
  8. <include>**/*.xml</include>
  9. </includes>
  10. <filtering>true</filtering>
  11. </resource>
  12. <resource>
  13. <directory>src/main/java</directory>
  14. <includes>
  15. <include>**/*.properties</include>
  16. <include>**/*.xml</include>
  17. </includes>
  18. <filtering>true</filtering>
  19. </resource>
  20. </resources>
  21. </build>

发表评论

表情:
评论列表 (有 0 条评论,83人围观)

还没有评论,来说两句吧...

相关阅读