第一个mybatis程序

对于mybatis的学习应该尽量参考他的中文官方文档

文档地址: MyBatis中文网

mybatis是对永久层进行简化的几个框架,也就是说,它能够方便对数据库的操作

因此需要先创建一个数据库

用sql语句创建数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE DATABASE `mybatis`;

USE `mybatis`;


CR`mybatis``student`EATE TABLE `student`(
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(20) DEFAULT NULL,
`password` VARCHAR(20) DEFAULT NULL
)ENGINE = INNODB DEFAULT CHARSET = utf8;

`student`INSERT INTO `student`(`id`,`name`,`password`)VALUES
(1,'张三','welcome'),
(2,'李四','welcome'),
(3,'王五','welcome')

创建数据库的样式

mybatis框架

mybatis是一个框架,是对数据库进行操作的,也需要创建测试类

因此需要导入的依赖有:mybatis、mysql、junit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!--对于mybatis需要 mysql mybatis Junit 等的依赖-->
<dependencies>
<!--mybatis依赖-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!--mysql依赖-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<!--junit依赖-->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>

编写第一个mybatis程序

准备工作

  1. 创建一个空的maven项目
  2. 删除src文件夹
  3. 导包(这样就获得了父项目)
  4. 创建module,maven(这样就获得了子程序)

创建pojo层

以及与数据库中表格对应的映射类 以及get、set方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.dwx.pojo;

//创建与数据库映射的类
public class student {
private int id;
private String name;
private String password;

//无参构造
public student() {
}

//有参构造
public student(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}

//get和set方法
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 getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

编写Dao层

使用mybatis编写的Dao层,也可以称为Mapper层包括一个抽象的类 以及实现他的XML

抽象的UserDao

1
2
3
4
5
6
7
8
9
10
11
12
package com.dwx.dao;

import com.dwx.pojo.student;

import java.util.List;

//编写一个抽象的DAO接口
public interface UserDao {
//编写这个接口需要的方法
List<student> getList();
}

UserMapper.xml实现抽象类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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">
<!--这里是我们需要更改的地方 namespace表示 我们的Dao层在哪里(抽象类)-->
<mapper namespace="com.dwx.dao.UserDao">
<!--与Dao类的实现类一样 这里是写sql语句-->
<!--id指的是我们调用这个sql使用的名字,可以理解为BaseDaoImp的方法名-->
<!--resultType表示返回的数据的类型 如果是自己创建的类 需要填写整个路径-->
<select id="getList" resultType="com.dwx.pojo.student">
select * from student
</select>
</mapper>

这个xml里上边的是文件参数,不需要更改

需要更改的我都加有注释,可以看注释理解

编写untils层

untils层包括使用MyBatis进行操作的类以及方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.dwx.untils;

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;

//固定的格式
public class MyBatisUtils {
//直接读取resources文件夹下的配置文件
String resource = "mybatis-config.xml";
//将这个文件转换成输入流
InputStream inputStream;

{
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
}
//将这个转化好的输入流设计为SqlSession工厂 通过工厂模式来创造SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获得SqlSession的方法
public SqlSession getSqlSession(){
//通过SqlSession工厂直接获得sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}

}

这里使用的是工厂模式,来实现实例化对象.

这个类中的方法都是固定的,不需要进行更改

在这个类中可以看到一个mybatis-config.xml的文件被使用了,这个xml文件中包含着所有的与数据库相连的配置,在Jdbc里,我们使用的是driver、getConnection等等方法进行联结。

编写mybatis-config.xml文件

这个文件必须在main文件夹下的resources文件夹下,这样才容易进行调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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/mybatis?useUnicode=true&amp;characterEnconding=utf8&amp;useSSL=true"/>
<property name="username" value="dwx"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--我们每一个xml文件都要在这里进行配置-->
<mappers>
<mapper resource="com/dwx/dao/UserMapper.xml"/>
</mappers>
</configuration>

这个配置文件也是固定的格式

不过需要注意这个<mappers></mappers>这个标签对

这个标签对里包括的数据是:在整个程序(子程序)中,凡是创建的使用的xml文件都需要在这里进行配置。否则将会报错

没有配置mapper时报的错

文件分层

编写测试类来进行测试

需要注意的是,这个文件测试类写在与main文件夹同级的test文件夹下的绿色java文件夹中

需要测试哪个,就把哪个对应的全部包等等都创建出来

测试类的编写规范

编写UserDaoTest类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.dwx.dao;

import com.dwx.pojo.student;
import com.dwx.untils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserDaoTest {
@Test
public void test(){
//调用我们的myBatisUtils来获得是SqlSession
MyBatisUtils myBatisUtils = new MyBatisUtils();
SqlSession sqlSession = myBatisUtils.getSqlSession();
//sqlSession进行操作
//通过反释来获得UserMapper
UserDao mapper = sqlSession.getMapper(UserDao.class);
//获得的mapper对象就能调用“id”,来实现操作了
List<student> list = mapper.getList();
for (student student : list) {
System.out.print(student.getId());
System.out.print(student.getName());
System.out.println(student.getPassword());
}
sqlSession.close();

}
}

必须注意的是,因为我们使用的是xml,但是这个xml并不会出现在target文件夹中,会出错。

这个错误指的是“数据冲突”错误

解决数据冲突错误

方法一:直接把缺少的xml文件夹复制到target中去

方法二:在pom.xml配置文件中添加如下<bulid></build>标签对

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<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>

这个是固定格式 不用修改

在父项目的pom.xml中添加可以作用到每一个子程序

在子项目的pom.xml中添加只能作用到这个子程序

程序运行结果

通过使用mybatis,在大量使用sql语句时方便了SQL语句的编写。

运行结果

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信