MyBatis从入门到入土(1)

1.介绍MyBatis

1.MyBatis是优秀的持久层(DAO)框架

2.MyBatis使用XML将SQL与应用程序解耦,便于维护

3.是JDBC的延伸,快速上手

MyBatis开发流程:

  • 引入MyBatis依赖
  • 创建核心配置文件
  • 创建实体(Entity)类
  • 创建Mapper映射文件
  • 初始化SessionFactory
  • 利用SqlSession对象操作数据

2.MyBatis的环境配置

  1. mybatis-config.xml (这是核心配置文件)

    • 用来配置数据库信息
    • 环境用标签
    • 标签包含各种子标签
    • mybatis-config.xml (这里直接套模板吧)
  2. pom.xml(配置依赖)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.20</version>
    </dependency>
  3. SqlSessionFactory(会话工厂)

    • SqlSessionFactory是MyBatis的核心对象
    • 用于创建SQLSession对象
    • 保证SqlSessionFactory在应用中全局唯一
  4. SqlSession

    • SqlSession是MyBatis操作数据库的核心对象
    • SqlSession使用JDBC与数据库交互
    • SqlSession对象提供了数据表增删改查对应方法
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MybatisTester {
@Test
public void testSqlSessionFactory() throws IOException {
//读取配置文件
Reader resource = Resources.getResourceAsReader("mybatis-config.xml");
//创建会话工厂
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resource);
//创建会话
SqlSession sqlSession = build.openSession();
//关闭会话
sqlSession.close();
}
}
  1. 初始化工具类MyBatisUtils(这就是个工具类,创建全局唯一SqlSessionFactory,用来读取配置文件+创建会话工厂,简化操作)

    • 创建Module com.mzdora.com.utils

      MybatisUtils.java (直接拿来用)

    • 然后我们只需要 SqlSession sqlSession = MybatisUtils.getSqlSession(); 就可以用了。

  2. MyBatis数据查询

    • 创建实体类(Entity)

      • 要和数据库中的名称类型保持一致
    • 创建Mapper XML

      • mapper.xml (直接拿来用),namespace要和DAO层的Interface名称一致。
    • 编写 select SQL标签(mapper.xml)

      • 在mapper中写查询语句
    • 开启驼峰命名映射(mybatis-config.xml)

      1
      2
      3
      <settings>
      <setting name="mapUnderscoreToCamelCase" value="true"/>
      </settings>
    • 在MyBatis-Config中添加 mapper 声明

    • 在SqlSession执行SQL

3.参数传递

  1. 单参数传递(使用原始对象):

    1
    2
    3
    <select id="selectById" parameterType="Integer" resultType="com.mzdora.mybatis.entity.Goods">
    SELECT * FROM t_goods WHERE goods_id = #{value}
    </select>
  1. 多参数传递(使用Map):
1
2
3
<select id="selectByRange" parameterType="java.util.Map" resultType="com.mzdora.mybatis.entity.Goods">
SELECT * FROM t_goods WHERE goods_id BETWEEN #{min} AND #{max}
</select>

以及他们的java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   @Test
//单参数传递
public void test1() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
Goods list = sqlSession.selectOne("selectById", 777);
System.out.println(list);
sqlSession.close();
}

@Test
//多参数传递
public void test2() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
Map<String,Integer> map = new HashMap<>();
map.put("min",555);
map.put("max",888);
List<Goods> selectByRange = sqlSession.selectList("selectByRange", map);
for (Goods goods : selectByRange) {
System.out.println(goods);
}
sqlSession.close();
}

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2bfoe1oyt36sc