mybatis入门-写自己的第一个mybatis程序
环境
- jdk 8
- Mysql 8.0
- maven 3.6.3
- IDEA 2020.1.3
- navicate 12
具体步骤
1.创建测试需要的mysql表
创建一个数据库名为mybatis,新建一张表名为user,三列分别为id,name,pwd,其中id是主键
sql语句
CREATE DATABASE `mybatis`;
USE `mybatis`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`name`,`pwd`) values (1,'小p','123456'),(2,'小周','abcdef'),(3,'小胡','987654'),(4,'小黄','123456');
下图为测试所需的数据库表
2.创建maven项目
- 小tips,新建一个maven项目在file->setting->maven中检查项目的maven,setting,以及仓库是否是自己建立的,有时候可能会是idea默认
3.导入项目所需依赖
需要三个核心包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
如果是spring项目的话还需要导入另外一个包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
4.创建项目包
在src-main-java文件夹下创建com.xxx包
在xxx包下创建三个包dao pojo utils
5.idea连接mysql数据库
我使用的是mysql数据库,所以勾选mysql具体操作如下图所示
由于idea和mysql版本问题,可能会出现需要设置时区的问题,所以我们按照图片操作来
将箭头中的选项框设置为GMT既可
点击Schemas选择我们之前创建好的mybatis数据库
点击ok我们可以在idea右侧看到数据库连接成功
6.编写Mybatis核心配置文件
在resource文件夹下创建 mybatis-config.xml 的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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
7.编写Mybatis的工具类
在utils包下创建MybatisUtils类
工具类源码
这边注意下包名
package com.pc.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;
//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 命令所需的所有方法。
// 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
8.创建实体类
在pojo包下创建User类
对应我们的数据库表创建实体类,有参无参构造方法,get set方法,以及tostring方法。
实体类代码
package com.pc.pojo;
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 + '\'' +
'}';
}
}
9.编写mapper接口类
在dao包下创建UserDao接口,我们通过查询功能测试,所以只写了select放法
接口代码
package com.pc.dao;
import com.pc.pojo.User;
import java.util.List;
public interface UserDao {
//查询全部用户
List<User> getUserList();
}
10.编写UserMapper.xml文件
在dao包下创建UserMapper.xml 的xml文件
UserMapper.xml的编写特别重要也是特别容易出错的地方
注意点!!!!!!!!
namespace是对应实体类的接口,一定不能写错
select id 是namespace对应得实体类中得方法名,实现select得方式是getUserList那么id就是getUserList,建议复制!!不然容易出错
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.pc.dao.UserDao">
<select id="getUserList" resultType="com.pc.pojo.User">
select * from mybatis.user;
</select>
</mapper>
11.编写测试类
在test文件夹下创建测试类Mytest
我们通过sqlsession得getMapper方法可以拿到我们实体类接口,通过实体类接口得方法进行增删检查
测试类代码
import com.pc.dao.UserDao;
import com.pc.pojo.User;
import com.pc.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class MyTest {
@Test
public void Test(){
//获得sqlSession
SqlSession sqlSession = MybatisUtils.getSqlSession();
//执行
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
12.配置maven静态资源过滤
!!!!!重点必须配置,maven默认只能读取resource文件夹下的xml文件,所以我们在dao层得mapper映射不会被maven加载到targe中,所以我们必须在maven得pom.xml配置文件中配置静态资源过滤
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
13.在Mybatis核心配置文件中,注册dao层mapper映射
在mybatis-config.xml文件中给我们dao曾得UserMapper.xml注册,这边根据自己得项目结构填写
<mappers>
<mapper resource="com/pc/dao/UserMapper.xml"/>
</mappers>
14运行
这时我们整个项目的结构如图所示
运行我们的测试类可以看到数据库中表的信息被读了出来,并且打印在了cmd中
体会
的确,自学的过程是痛苦的,突然面对一个陌生且庞大的知识体系,能清楚的感觉到自己的渺小。当学习的过程中遇到苦难,又没有人帮忙的时候是无助的。因为你有些问题你甚至无法用言语去形容,甚至想去放弃,也无数次起过放弃的念头。但是成长就是在一次次挫折和绝望中涅槃,学习不能急功近利。有时候往往因为自己学习的目的太过功利,太过急躁,所以在遇到困难止步不前的时候会陷入无尽的低谷。不妨静下心来,慢慢来,结局会回报我们颠沛流离和无数次挣扎的瞬间,我们要做的就是坚持下去不要放弃。
最不应该做的就是放弃,哪怕是生起放弃的念头都不行。编译运行成功那一刻的喜悦,是无法用言语形容的,不要看到爆红就怀疑自己,我们要感谢报错,因为只有爆红才能推进我们的成长,而编译成功的绿色见证我们的成功。
每个年龄都有自己应该做的事情,我们现在该做的就是不要避难就易,而要迎难而上,好好学,不停滴提高自己。