0%

Mybatis两种开发方式-Mybatis

Mybatis两种开发方式

Mybatis两种开发方式

1.xml开发:

1.全局配置文件

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
<?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>

<!-- 加载属性文件 -->
<properties resource="config.properties">
<!--properties中还可以配置一些属性名和属性值 -->
<!-- <property name="jdbc.driver" value=""/> -->
</properties>

<!-- 全局配置参数,需要时再设置 -->
<!-- <settings> </settings> -->

<typeAliases>
<!-- 别名定义 -->
<!-- 针对单个别名定义 type:类型的路径 alias:别名,类名不能写错
别名可以随便起,但最好规范-->
<typeAlias type="xiaoruiit.mybatis_introduction.pojo.User" alias="user" />
<!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->
<package name="xiaoruiit.mybatis_introduction.pojo" />
</typeAliases>

<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis -->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>


<!-- 加载映射文件 -->
<mappers>
<!--通过resource方法一次加载一个映射文件 -->
<!--注意这里的路径和xml文件 -->
<mapper resource="UserMapper.xml" />

<!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 -->
<!-- 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 -->
<!-- 中上边规范的前提是:使用的是mapper代理方法
<package name="...." />-->

</mappers>

</configuration>

properties配置数据库属性,可覆盖property,dataSource中的value需要增加jdbc前缀,否则可能读取到windows系统的配置

typeAliases配置别名

mappers配置mapper.xml所在位置

2.***Mapper接口,即dao

1
2
3
public interface UserMapper {
User findUserById(int id);
}

3.***Mapper.xml

namespace对应***Mapper接口所在路径

​ id对应Mapper接口方法名

parameterType对应Mapper接口的参数类型

resultType对应Mapper接口的返回值类型,可以使用全局配置文件的别名typeAliases

1
2
3
4
5
6
7
8
9
<?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="xiaoruiit.mybatis_introduction.dao.UserMapper">
<select id="findUserById" parameterType="int" resultType="user">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
  1. 输入映射parameterType

    • 简单类型,java

    • pojo类型、map类型,两种类型一样的处理

    • List类型,List里边是什么类型就放什么类型

    • pojo包装pojo类型

  2. 输出映射resultTyperesultMap

    • ``resultType`可映射简单类型、pojo类型、Map类型
    • resultMap可实现,查询列和属性不一致、关联关系,延迟加载

resultMap:需要单独写resultMap标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- 定义resultMap:将查询的列名和映射的pojo的属性名做一个对应关系 -->
<!--
type:指定查询结果要映射的pojo的类型
id:指定resultMap的唯一标示
-->
<resultMap type="user" id="userListResultMap">
<!--
id标签:映射查询结果的唯一列(主键列)
column:查询sql的列名
property:映射结果的属性名
-->
<id column="id_" property="id"/>
<!-- result标签:映射查询结果的普通列 -->
<result column="username_" property="username"/>
<result column="birthday_" property="birthday"/>
</resultMap>
<!-- resultMap入门 -->
<select id="findUserListResultMap" resultMap="userListResultMap">
SELECT id id_,username username_,birthday birthday_ FROM user
</select>

4.测试

加载全局配置文件

获取sqlSessionFactory对象,通过sqlSessionFactory的getMapper获取业务对象mapper,

mapper对象执行Mapper接口的实际业务相关的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private SqlSessionFactory sqlSessionFactory;

@Before
public void init() throws Exception {
// 加载全局配置文件(同时把映射文件也加载了)
String resource = "phase02/SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// sqlsessionFactory需要通过sqlsessionFactoryBuilder读取全局配置文件信息之后
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() {
//创建UserMapper对象
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper对象的API
User user = mapper.findUserById(1);
System.out.println(user);
}

2.注解开发

1.全局配置文件

和XML方式一样,不需要配置mappers属性

2.***Mapper接口

接口方法

接口方法上写注解,不需要xml文件

1
2
3
// 查询
@Select("SELECT * FROM user WHERE id = #{id}")
public User findUserById(int id);

3.测试

和XML方式一样