3.3.2 MyBatis 框架

二、MyBatis 框架

1. MyBatis 环境搭建 jar 包详解

(1) 创建项目

java project

(2) 导入 jar 包

1) MyBatis 核心 jar :

mybatis-3.2.7.jar

 

2) MyBatis 依赖的 jar:

asm-3.3.1.jar 字节码解析包, 被 cglib 依赖

cglib-2.2.2.jar 动态代理的实现

commons-logging-1.1.1.jar 日志包

javassist-3.17.1-GA.jar 字节码解析包

log4j-1.2.17.jar 日志包

log4j-api-2.0-rc1.jar 日志

log4j-core-2.0-rc1.jar 日志

slf4j-api-1.7.5.jar 日志

slf4j-log4j12-1.7.5.jar 日志

 

3) 驱动 jar

mysql-connector-java-5.1.30.jar

 

2. MyBatis 核心配置文件

(1) 要求 xml 文 件 , 命 名 无 要 求 , 位 置 无 要 求 , 一 般 叫

mybatis.xml, 放在 src 目录下。

 

(2) dtd

1) MyBatis 官方提供了 dtd 约束, 方便 xml 的编写

<! DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd"

>

 

2) 关联 mybatis 配置文件的 dtd 约束

 

 

(3) 配置文件内容

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

<!--

用于指定使用哪个环境

default: 用于指定使用的环境id

-->

<environments default="dev">

<!--

用于配置开发环境

id: 环境的唯一识别码

-->

<environment id="dev">

<!--

事务管理器

type: 用于设置mybatis采用什么方式管理事务

JDBC表示采用和JDBC一样的事务管理方式

-->

<transactionManager type="JDBC"></transactionManager>

<!--

数据源/连接池, 用于配置连接池和数据库连接的参数

type: 用于设置mybatis是否采用连接池技术

POOLED表示MyBatis采用连接池技术

-->

<dataSource type="POOLED">

<property name="driver" value="com.mysql.jdbc.Driver"/>

<property name="url"

value="jdbc:mysql://localhost:3306/java505"/>

<property name="username" value="root"/>

<property name="password" value="root"/>

</dataSource>

</environment>

</environments>

</configuration>

 

(4) 定义pojo类

public class User implements Serializable {

 

private int id;

private String username;

private String password;

 

...

 

}

 

3. Mapper 映射文件

在 MyBatis 中 , 推荐使用 mapper 作为包名 , 我们只需要写一个映射配置文件即可. UserMapper.xml, 用于定义要执行的 SQL 语句, 同时设定返回结果的类型.

<?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: 命名空间, 可以随意定义, 一般情况下要写全限定路径MyBatis管理SQL语句是通过namespace+id来定位的

-->

<mapper namespace="com.mypack.mapper.UserMapper">

<!--

select标签用于编写查询语句

id: sql语句的唯一标识, 类比为方法名

resultType: 用于设定返回结果的类型( 全限定路径)

如果返回结果是集合, 要写集合泛型的类型

-->

<select id="selAll" resultType="com.mypack.pojo.User">

select * from t_user

</select>

</mapper>

 

在核心配置文件中添加 mapper 扫描

<!-- 扫描mapper文件 -->

<mappers>

<mapper resource="com/mypack/mapper/UserMapper.xml" />

</mappers>

 

4. 编写测试代码

需要先添加 JUnit 支持

package com.mypack.test;

 

import java.io.IOException;

import java.io.InputStream;

import java.util.List;

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 com.mypack.pojo.User;

 

public class TestMyBatis {

@Test

public void testSelAll() throws IOException {

// 加载MyBatis核心配置文件

InputStream is =

Resources. getResourceAsStream("mybatis.xml");

// 构建SqlSessionFactory工厂对象

SqlSessionFactory factory = new

SqlSessionFactoryBuilder().build(is);

// 通过工厂打开SqlSession

SqlSession session = factory.openSession();

// 通过session执行查询操作

List<User> list =

session. selectList("com.mypack.mapper.UserMapper.selAll");

System. out.println(list);

// 关闭资源

session.close();

}

}

 

5. MyBatis 配置文件详解

(1) <configuration>

这是配置文件的根元素, 所有的其他元素都要在这个标签下使用。

 

(2)  <environments>

用于管理所有的环境, 并可以指定默认使用哪个环境。 通过default 属性来指定。

 

(3)  <environment>

用于配置环境。 id 属性用于唯一标识当前环境

 

(4) <transactionManager>

用于配置事务管理器

1) type 属性

用于指定 MyBatis 采用何种方式管理事务

JDBC: 表示 MyBatis 采用与原生 JDBC 一致的方式管理事务

MANAGED: 表示将事务管理交给其他容器进行, 例如 Spring

 

(5)  <DataSource>

用于配置数据源, 设置 MyBatis 是否使用连接池技术, 并且配置数据

库连接的四个参数

1) type 属性

用于设置 MyBatis 是否使用连接池技术

POOLED:表示采用连接池技术

UNPOOLED:表示每次都会开启和关闭连接, 不使用连接池技术

NDI: 使用其他容器(例如 Spring)提供数据源

 

(6) <property>

用于配置数据库连接参数(driver, url, username, password)

 

(7) <mappers>

用于扫描 mapper 信息

 

6. mapper 映射配置文件详解

(1) <mapper>

根元素

1) namespace 属性

用于指定命名空间, mybatis 是通过 namespace+id 的方式来定位 SQL语句的, 所以必须指定 namespace。 通常 namespace 被配置为全限定路径

 

(2) <select>

用于定义查询语句(DQL)

1) id 属性

用于唯一表示 SQL 语句, 类似于方法的方法名

 

2) resultType 属性

用于设定查询返回的数据类型, 要写类型的全限定路径。 如果返回的是集合类型, 要写集合的泛型的类型。

 

7. MyBatis 中常用的三个查询方法

Usrmapper.xml部分内容:

 

...

<mapper namespace="com.mypack.mapper.UserMapper">

<select id="selAll" resultType="user">

select * from t_user

</select>

<select id="selOne" resultType="user">

select * from t_user where id=1

</select>

<!-- parameterType, 参数类型, 用于参数的传递 -->

<select id="selById" resultType="user" parameterType="int">

<!--

#{}用于使用参数

index, 索引, 0开始

param+数字, param1, param2

 -->

select * from t_user where id=#{param1}

</select>

 

<select id="sel" resultType="user" parameterType="map">

<!-- 如果参数是对象, 可以通过#{属性名}来获取 -->

<!-- select * from t_user where username=#{username} and password=#{password} -->

<!-- 如果参数是map, 可以通过#{key}来获取 -->

select * from t_user where username=#{uname} and password=#{upwd}

</select>

</mapper>

 

(1) selectList

用于查询多条数据的情况返回值是一个 list 集合. 如果没有查到任何数据返回没有元素的集合(空集合不是 null)

@Test

public void testSelectList() throws IOException {

InputStream is = Resources. getResourceAsStream("mybatis-cfg.xml");

SqlSessionFactory factory = new

SqlSessionFactoryBuilder().build(is);

SqlSession session = factory.openSession();

List<User> list =

session. selectList("com.mypack.mapper.UserMapper.selAll");

System. out.println(list);

for (User user : list) {

System. out.println(user);

}

session.close();

}

 

(2) selectOne

用于查询单条数据的情况, 返回值是一个对象. 如果没有查到任何数据, 返回null

@Test

public void testSelectOne() throws IOException {

InputStream is = Resources.getResourceAsStream("mybatis-cfg.xml");

SqlSessionFactory factory = new

SqlSessionFactoryBuilder().build(is);

SqlSession session = factory.openSession();

User user =

session. selectOne("com.mypack.mapper.UserMapper.selOne");

System. out.println(user);

session.close();

}

 

(3) selectMap

用于查询多条数据的情况, 多条数据要形成一个 Map 集合. 需要指定哪个属性作为 key. 如果查不到, 返回一个空 map 集合(不是 null)

@Test

public void testSelectMap() throws IOException {

InputStream is = Resources. getResourceAsStream("mybatis-cfg.xml");

SqlSessionFactory factory = new

SqlSessionFactoryBuilder().build(is);

SqlSession session = factory.openSession();

Map<Integer, User> map =

session. selectMap("com.mypack.mapper.UserMapper.selAll", "id");

System. out.println(map);

Set<Integer> set = map.keySet();

for (Integer k : set) {

System. out.println(map.get(k));

}

session.close();

}

posted @ 2019-05-05 13:59  KendyHo  阅读(100)  评论(0编辑  收藏  举报