2022.5.13 第一个Mybatis程序
2、第一个Mybatis程序
思路:搭建环境-->导入Mybatis-->编写代码-->测试!
2.1、搭建环境
搭建数据库
1 CREATE DATABASE `mybatis` 2 USE `mybatis` 3 4 CREATE TABLE `user`( 5 `id` INT(20) NOT NULL, 6 `name` VARCHAR(30) NOT NULL, 7 `pwd` VARCHAR(30) NOT NULL, 8 PRIMARY KEY(`id`) 9 )ENGINE=INNODB DEFAULT CHARSET=utf8; 10 11 INSERT 12 INTO `user`(`id`,`name`,`pwd`) 13 VALUES(1,'小明','123456'),(2,'小红','123456'),(3,'小蓝','123457')
新建普通maven项目
1、新建一个普通的maven项目
2、删除src目录
3、导入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.xing</groupId> 8 <artifactId>Mybatis-Study</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <properties> 12 <maven.compiler.source>8</maven.compiler.source> 13 <maven.compiler.target>8</maven.compiler.target> 14 </properties> 15 16 <dependencies> 17 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> 18 <dependency> 19 <groupId>mysql</groupId> 20 <artifactId>mysql-connector-java</artifactId> 21 <version>8.0.27</version> 22 </dependency> 23 24 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> 25 <dependency> 26 <groupId>org.mybatis</groupId> 27 <artifactId>mybatis</artifactId> 28 <version>3.5.7</version> 29 </dependency> 30 31 <!-- https://mvnrepository.com/artifact/junit/junit --> 32 <dependency> 33 <groupId>junit</groupId> 34 <artifactId>junit</artifactId> 35 <version>4.12</version> 36 </dependency> 37 38 </dependencies> 39 40 </project>
2.2、创建一个模块
-
编写mybatis的核心配置文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <!--configuration核心配置文件--> 6 <configuration> 7 8 <environments default="development"> 9 <environment id="development"> 10 <transactionManager type="JDBC"/> 11 <dataSource type="POOLED"> 12 <property name="driver" value="com.mysql.jdbc.Driver"/> 13 <!-- mybatis自己创建的数据库--> 14 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> 15 <!-- 自己的用户名与密码--> 16 <property name="username" value="root"/> 17 <property name="password" value="123456"/> 18 </dataSource> 19 </environment> 20 </environments> 21 22 </configuration>
-
编写mybatis工具类
1 package com.xing.utils; 2 3 import org.apache.ibatis.io.Resources; 4 import org.apache.ibatis.session.SqlSession; 5 import org.apache.ibatis.session.SqlSessionFactory; 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 8 import java.io.IOException; 9 import java.io.InputStream; 10 11 //工具类 SqlSessionFactory-> SqlSession 12 public class MybatisUtils { 13 //提升作用域 14 private static SqlSessionFactory sqlSessionFactory; 15 //加载配置文件 16 static{ 17 try { 18 //获取SqlSessionFactory对象 19 String resource = "mybatis-config.xml"; 20 InputStream inputStream = Resources.getResourceAsStream(resource);//转变成流 21 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 } 26 27 //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 28 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 29 // 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。 30 public static SqlSession getSqlSession() { 31 return sqlSessionFactory.openSession(); 32 // SqlSession sqlSession = sqlSessionFactory.openSession(); 33 // return sqlSession; 34 } 35 36 37 }
2.3、编写代码
-
实体类
1 package com.xing.pojo; 2 3 //实体类 4 public class User { 5 private int id; 6 private String name; 7 private String pwd; 8 9 public User() { 10 } 11 12 public User(int id, String name, String pwd) { 13 this.id = id; 14 this.name = name; 15 this.pwd = pwd; 16 } 17 18 public int getId() { 19 return id; 20 } 21 22 public void setId(int id) { 23 this.id = id; 24 } 25 26 public String getName() { 27 return name; 28 } 29 30 public void setName(String name) { 31 this.name = name; 32 } 33 34 public String getPwd() { 35 return pwd; 36 } 37 38 public void setPwd(String pwd) { 39 this.pwd = pwd; 40 } 41 42 @Override 43 public String toString() { 44 return "User{" + 45 "id=" + id + 46 ", name='" + name + '\'' + 47 ", pwd='" + pwd + '\'' + 48 '}'; 49 } 50 }
-
Dao接口
1 package com.xing.dao; 2 3 import com.xing.pojo.User; 4 5 import java.util.List; 6 7 public interface UserDao { 8 List<User> getUserList(); 9 }
接口实现类由原来的UserDaolmpl转变为一个Mapper配置文件.
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!--namespace=绑定一个对应的Dao(Mapper)接口--> 6 <mapper namespace="com.xing.dao.UserDao"> 7 <!-- id对应接口中的方法名 resultType返回的结果集类型(写集合中的范型类型)--> 8 <select id="getUserList" resultType="com.xing.pojo.User"> 9 select * from mybatis.user; 10 </select> 11 </mapper>
2.4、测试
1 package com.xing.dao; 2 3 import com.xing.pojo.User; 4 import com.xing.utils.MybatisUtils; 5 import org.apache.ibatis.session.SqlSession; 6 import org.junit.Test; 7 8 import java.util.List; 9 10 public class UserDaoTest { 11 @Test 12 public void test() { 13 SqlSession sqlSession = MybatisUtils.getSqlSession(); 14 //方式一:执行 得到接口对象调用其中方法 接口的class对象 15 UserDao userDao = sqlSession.getMapper(UserDao.class); 16 List<User> userList = userDao.getUserList(); 17 18 for (User user : userList) { 19 System.out.println(user); 20 } 21 22 //关闭SqlSession 23 sqlSession.close(); 24 } 25 }
运行报错
注意:
org.apache.ibatis.binding.BindingException: Type interface com.xing.dao.UserDao is not known to the MapperRegistry.
修改mybatis的核心配置文件,添加mappers资源路径
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <!--configuration核心配置文件--> 6 <configuration> 7 8 <environments default="development"> 9 <environment id="development"> 10 <transactionManager type="JDBC"/> 11 <dataSource type="POOLED"> 12 <property name="driver" value="com.mysql.jdbc.Driver"/> 13 <!-- mybatis自己创建的数据库--> 14 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> 15 <!-- 自己的用户名与密码--> 16 <property name="username" value="root"/> 17 <property name="password" value="123456"/> 18 </dataSource> 19 </environment> 20 </environments> 21 22 <!--每一个Mapper.XML都需要在Mybatis核心配置文件中注册!--> 23 <mappers> 24 <mapper resource="com/xing/dao/UserMapper.xml"></mapper> 25 </mappers> 26 </configuration>
在运行报错
由于maven约定大于配置,生成的target文件中没有导出UserMapper.xml
在pom文件中添加
1 <!--buiLd中配置resources,来防止我们资源导出失败的问题,例java目录中只能导出java文件--> 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>false</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>false</filtering> 19 </resource> 20 </resources> 21 </build>
你们可以能会遇到的问题:
1.配置文件没有注册
2.绑定接口错误。
3.方法名不对
4.返回类型不对
5.Maven导出资源问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术