Mybatis的基本使用

基本使用

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>

Emp.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.kuro.bean;
import java.util.Date;

public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private Double sal;
private Double common;
private Integer deptno;
//省略构造、toString、getter、Setter方法
}

EmpDao.java

1
2
3
4
5
6
package com.kuro.dao;
import com.kuro.bean.Emp;

public interface EmpDao {
public Emp findEmpByEmpno(Integer empno);
}

mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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/demo?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入每一个接口对应点xml文件-->
<mappers>
<mapper resource="EmpDao.xml"/>
</mappers>
</configuration>

EmpDao.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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:编写接口的全类名,就是告诉要实现该配置文件是哪个接口的具体实现-->
<mapper namespace="com.kuro.dao.EmpDao">
<!--
select:表示这个操作是一个查询操作
id表示的是要匹配的方法的名称
resultType:表示返回值的类型,查询操作必须要包含返回值的类型
#{属性名}:表示要传递的参数的名称
-->
<select id="findEmpByEmpno" resultType="com.kuro.bean.Emp">
select * from emp where empno = #{empno}
</select>
</mapper>

Test.java

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
package com.kuro.test;

import com.kuro.bean.Emp;
import com.kuro.dao.EmpDao;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MyTest {

@Test
public void test01() throws IOException{
// 根据全局配置文件创建出SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// SqlSessionFactory:负责创建SqlSession对象的工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取与数据库相关的会话
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取对应的映射接口对象
EmpDao mapper = sqlSession.getMapper(EmpDao.class);
//执行具体的sql语句
Emp emp = mapper.selectEmpByEmpno(7369);
System.out.println(emp);
//关闭会话
sqlSession.close();
}
}

mybatis-config.xml详解

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
s<?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>
<!--
当需要引入外部的配置文件的时候,可以使用这样的方式
类似于<context:property-placeholder location>
resource:表示从当前项目的类路径中进行加载,如果用的是idea指的是resource资源目录下的配置文件
url:可以从当前文件系统的磁盘目录查找配置,也可以从网络上的资源进行引入
-->
<properties resource="db.properties" ></properties>
<!--可以影响mybatis运行时的行为,包含N多个属性,需要什么引入什么-->
<settings>
<!--开启驼峰标识验证-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--配置懒加载开关-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--配置缓存开关-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!--typeAliases:表示在引入实体类的名称时候,可以使用别名,而不需要写完全限定名-->
<typeAliases>
<!--每一个具体的类都需要单独来写,如果有100个类呢?-->
<!-- <typeAlias type="com.kuro.bean.Emp" alias="aaa"></typeAlias>-->
<!--可以指定具体的包来保证实体类不需要写完全限定名-->
<package name="com.kuro.bean"/>
</typeAliases>

<!--设置定义自己的类型处理器,mybatis中默认内置了很多类型处理器,一般不需要自己来实现-->
<!-- <typeHandlers>-->
<!-- <typeHandler handler="" ></typeHandler>-->
<!-- <package name=""/>-->
<!-- </typeHandlers>-->
<!--当需要自定义对象工厂的时候实现此标签,完成结果集到java对象实例化的过程-->
<!-- <objectFactory type=""></objectFactory>-->

<!--在项目开发过程中,会包含开发环境,测试环境,生产环境,有可能会使用不同的数据源进行连接操作,
在此配置文件中可以指定多个环境
default:表示选择哪个环境作为运行时环境
-->
<environments default="development">
<!--配置具体的环境属性
id:表示当前环境的名称
-->
<environment id="development">
<!--事务管理器,每一种数据源都需要配置具体的事务管理器
type:表示事务管理器的类型
jdbc:使用jdbc原生的事务控制
managed:什么都没做
-->
<transactionManager type="JDBC"/>
<!--配置具体的数据源的类型
type:表示数据源的类型
pooled:使用数据库连接池
unpooled:每次都打开和关闭一个链接
-->
<dataSource type="POOLED">
<!--链接数据的时候需要添加的必备的参数,一般是四个,如果是连接池的话,可以设置连接最大个数等相关信息-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--提供了不同的数据库厂商的标识,当有数据库移植的需求的时候,可以根据不同的数据库来执行不同的sql语句
用来扩展数据库的移植性
-->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="SQL Server" value="sqlserver"/>
<property name="Oracle" value="oracle"/>
</databaseIdProvider>
<!--是来将mapper映射文件引入到配置文件中,方便程序启动的时候进行加载
每次在进行填写的时候需要注意,写完xml映射之后一定要添加到mybatis-config文件中

resource:从项目的类路径下加载对应的映射文件
url:从本地磁盘目录或者网络中引入映射文件
class:可以直接引入类的完全限定名,可以使用注解的方式进行使用,
如果不想以注解的方式引入呢?
如果想要class的方式引入配置文件,可以将xml文件添加到具体的类的同级目录下
1、 如果是maven的项目的话,需要添加如下配置,因为maven默认只会编译java文件,需要把xml文件也添加到指定目录中
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
2、在resource资源目录下,创建跟dao层一样的同级目录即可,将配置文件放到指定的目录
-->
<mappers>
<!-- <mapper resource="EmpDao.xml" />-->
<!-- <mapper resource="UserDao.xml"/>-->
<!-- <mapper class="com.kuro.dao.UserDaoAnnotation"></mapper>-->
<!-- <mapper class="com.kuro.dao.UserDao"></mapper>-->
<!--如果需要引入多个配置文件,可以直接定义包的名称
resource目录下配置的映射文件必须要具体相同的目录
-->
<package name="com.kuro.dao"/>
</mappers>
</configuration>

db.properties

1
2
3
4
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://192.168.85.111:3306/demo?serverTimezone=UTC
username=root
password=123456

最后更新: 2020年11月12日 09:50

原始链接: https://midkuro.gitee.io/2020/11/09/mybatis-config/

× 请我吃糖~
打赏二维码