idea+maven搭建Mybatis框架
步骤:
1、创建maven项目
2、导入相关jar包
3、创建数据库、表、数据
4、创建类和配置mybatis-config配置文件
5、测试
6、解决报错
一、创建maven项目
1、创建项目
2、保存路径和项目名
3、导入maven相关的包
4、maven项目创建完成
二、导入Mybatis相关的jar包
1、找到<dependencies>标签导包`
2、导包 注意mysql的版本
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
创建数据库
在mysql新建 demo01的库,user的表
# 键库 库名demo01
CREATE DATABASE demo01;
# 键表 表名user
create table user(
id int primary key auto_increment not null comment '主键 自增长',
username varchar(20) not null comment '姓名不能为空',
password varchar(20) not null comment '密码不能为空'
)comment '用户表';
# 插入数据
insert into user(username,password) value
("张三","123456"),
("哈哈","12346"),
("李四","1234"),
("王二","123");
四、创建类 ( 这一项细心注意事项,踩的坑都在这了)
1、创建java文件夹、resources文件夹,分别标记为源文件和资源文件。如下图
2、创建目录结构如下,下标对应,后面附上源码
2、UserDao.java
package com.ytg.Dao;
import com.ytg.entity.User;
import java.util.List;
public interface UserDao {
//实现查询全部用户的功能
public List<User> getUserList();
}
3、UserMapper.xml
注意:
1、namespace=“UserDao接口”
2、select id = “接口里面的getUserList方法”
3、select * from demo01.User (sql语句,demo01是库名)
4、resultType=“返回参数的类型是User类的类型"
<?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.ytg.Dao.UserDao">
<select id="getUserList" resultType="com.ytg.entity.User">
select * from demo01.User
</select>
</mapper>
5、User.java 用户的实体类
package com.ytg.entity;
public class User{
private Integer id;
private String username,password;
User(){}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
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;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
8、Mybatils.java 工具
注意Mybatis-config.xml位置
package com.ytg.utils;
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;
/*
* mybatis工具类
* 返回sqlsession
* 1、xml通过配置文件获取到SqlSessionFactron
* 2、返回Sqlsession (用来执行sql语句)
* */
public class Mybatils {
private static SqlSessionFactory build;
static {
try {
String resources = "Mybatis-config.xml";
InputStream ra = Resources.getResourceAsStream(resources);
build = new SqlSessionFactoryBuilder().build(ra);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return build.openSession();
}
}
10、 Mybatis-conig.xml 核心配置文件
注意:我的mysql版绷是8.0以上的,8.0 以下的把
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
这行 改为(没有cj)
<property name="driver" value="com.mysql.jdbc.Driver"/>
-------
<mapper>的resource指向对应Dao的“实现类”这里是路径用“/”
------<property name="url" 这行
jdbc:mysql://localhost:3306/demo01 的demo01是刚刚键的库名
<?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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo01?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 每一个mapper.xml都需要在mybatis核心配置文件中注册(当前文件中)! -->
<mappers>
<mapper resource="com/ytg/Dao/UserMapper.xml" />
</mappers>
</configuration>
五、测试
在test测试类里面新建一个test.java测试方法
test.java 测试
package com.ytg.test;
import com.ytg.Dao.UserDao;
import com.ytg.entity.User;
import com.ytg.utils.Mybatils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class test {
public static void main(String[] args) {
//获取到工具类的Session对象
SqlSession sqlSession = Mybatils.getSqlSession();
//执行UserMapper里面的sql语句
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
for (User u : userList){
System.out.println(u);
}
//关闭sqllSession减少资源开销
}
}
最后右键运行
六、解决报错
1、找不到资源文件
报错信息如下:
### Error building SqlSession.
### The error may exist in com/ytg/Dao/UserMapper.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/ytg/Dao/UserMapper.xml
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.ytg.test.test.main(test.java:14)
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in com/ytg/Dao/UserMapper.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/ytg/Dao/UserMapper.xml
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
at com.ytg.utils.Mybatils.<clinit>(Mybatils.java:23)
... 1 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/ytg/Dao/UserMapper.xml
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:121)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:98)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78)
... 3 more
Caused by: java.io.IOException: Could not find resource com/ytg/Dao/UserMapper.xml
at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114)
at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:100)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:371)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:119)
... 5 more
因为maven的默认资源文件夹是我们申明的resources文件夹,所以我们写在Dao层的资源文件UserMapper.xml被过滤掉了
解决办法在maven项目下的pom.xml 里面添加
添加类容
<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>
结果