Mybatis 2.第一个MyBatis程序
第一个MyBatis程序
思路:搭建环境-->导入mybatis-->编写代码-->测试
1.1 搭建环境
- 搭建数据库
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user`(
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'ls','123456'),
(2,'张三','123456'),
(3,'李四','123890')
- 新建项目
-
新建一个普通的maven项目【注意maven环境】
-
删除src目录【搭建父工程】
-
导入maven依赖
按照目前需求,有mysql驱动、mybatis、junit 共3个依赖。
<!--导入依赖-->
<dependencies>
<!--MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
1.2 创建一个模块
- 编写mybatis的核心配置文件【src/resources/mybatis-config.xml】
<?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核心配置文件-->
<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://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
- 编写mybatis工具类
//sqlSessionFactory --> sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
try {
//使用Mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-config.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();
}
}
1.3 编写代码
- 实体类
package com.pojo;
// 实体类--User
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
- Dao接口
package com.dao;
import com.pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
}
- 接口实现类由 UserDaoImpl 转变为 一个xml形式的 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">
<!--Mapper配置文件-->
<!--namespace= 绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.dao.UserDao">
<!--select查询语句-->
<select id="getUserList" resultType="com.pojo.User">
select * from mybatis.user
</select>
</mapper>
1.4 测试
-
junit测试
@Test public void test(){ //第一步:获得SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //方式一:getMapper UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); for (User user : userList) { System.out.println(user); } //关闭SqlSession sqlSession.close(); }
可能遇到的问题:
- 配置文件没有注册 【问题存在于 mybatis-config.xml】 解决方案如 注意点①
- 绑定接口错误。 【2、3、4问题存在于 UserMapper.java】
- 方法名不对
- 返回类型不对
- Maven导出资源问题 【问题存在于 pom.xml】解决方案如 注意点②
注意点:
①org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.
MapperRegistry是什么?
原因:核心配置文件中注册 mappers。即在 mybatis-config.xml 文件中注册:
<?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">
<!--头部声明,用来验证xml文档的正确性-->
<!--configuration核心配置文件-->
<configuration>
<!--可配置多套环境,此处默认是 development 开发环境,还可配置如,test 测试环境等-->
<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://49.234.197.183:3306/mysql"/>
<property name="username" value="root"/>
<property name="password" value="zhou2020"/>
</dataSource>
</environment>
</environments>
<!--注意路径!!!-->
<mappers>
<mapper resource="com/dao/UserMapper.xml"/>
</mappers>
</configuration>
②
原因:maven “ 约定大于配置 ” ,写的配置文件,可能出现无法被导出或生效的问题,解决方案:插入父工程、子工程的pom.xml中分别作为
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
流程总结
1.maven :pom.xml 【父工程、子工程】
2.mybatis xml 配置文件:mybatis-config.xml
3.mybatis的工具类:MybatisUtils.java
4.实体类:User.java
5.Dao接口: UserDao.java
6.Mapper配置文件:UserMapper.xml 【通过xml定义】一个语句既可以通过 XML 定义,也可以通过注解定义。
7.测试文件 :UserDaoTest.java
Tip
后续操作 实体类和utils不需要变动,只需修改dao层即可。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步