mybatis学习(一)基础入门

Mybatis架构

这里写图片描述

SqlMapConfig.xml 核心配置文件。
mapper.xml 实体的映射配置文件,书写sql。
SqlSessionFactory session的工厂。
SqlSession 核心操作对象。

一、使用方法

1、导入jar包,依赖包和核心包都导入。并且需要导入mysql驱动jar包connection。
这里写图片描述
2、配置核心配置文件SqlMapConfig.xml
写入头(约束)后Configuration–environments(与sping整合后将废除,用于连接数据库)

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

这里写图片描述

3、pojo映射文件,catalog.xml
写入头,mapper中写入sql语句。在主配置中告知位置。可以在mapper配置命名空间区分其他xml。
这里写图片描述
这里写图片描述

4、创建工厂 任意名称
1、加载核心配置文件
2、创建工厂
3、创建session
这里写图片描述

  • 根据用户名模糊查询
    这里写图片描述

  • 添加用户 必须让sqlSession.commit
    这里写图片描述
    这里写图片描述

  • 添加并且同时返回ID(SQL是先保存数据后生成ID)

  • 这里写图片描述
  • 修改
    这里写图片描述
  • 删除
    这里写图片描述

(二)Mybatis的优点

1、在xml配置了连接池,使用连接池管理连接。
2、传参,自动映射实体,获得实体里的值。(动态sql,不用想怎么拼接)
3、Sql语句写在配置文件xml中,易维护。
4、自动将执行结果映射到java对象(pojo),通过resultType指定返回类型。
(jdbc写在代码中,通过statement.query方法传入sql语句以及返回类型,且解析前需要遍历)

(三)Mybatis和Hibernate的区别

不同:

MyBatis需要程序员自己编写Sql语句,通过xml或注解灵活运行。通过实体对象和sql合成成最终的sql。执行结果再映射成java对象。
不完全是一个ORM框架,mybatis需要程序员自己写SQL语句。mybatis可以通过XML或注解的方式灵活配置要运行的SQL语句。

Mybatis优点:

门槛低,容易学,灵活sql,适合对关系数据模型要求不高的软件开发。
注意:无法做到数据库无关性,变换数据库则需要定义多套sql映射。

Hibernate优点:

对象/关系映射能力强,数据库无关性好,适用关系模型要求高的软件。节省代码,提高效率。但门槛高,如何设计映射麻烦。不好维护。

(四)框架开发设计的方法

使用mybatis通常有两种方法,原始Dao或者mapper动态代理。

原始Dao设计方法

弊端:冗余太多,硬编码。
Dao层
这里写图片描述
Junit模拟service层
这里写图片描述

Mapper动态代理:写接口,自动帮我生成好对象并执行。

原则1:mapper接口的方法名与XML定义的statement的id相同。
原则2:输出,返回类型相同。
原则3:输入,参数类型相同。
原则4:XML的namespace与mapper接口的类路径相同。
优点:节省代码,防止硬编码。冗余少
写catalog mapper接口如下,满足4个原则
这里写图片描述
并于原catalog(mapper).xml配置
这里写图片描述
便可以直接调用方法。
这里写图片描述

(五)其他注意事项

核心SqlMapConfig.xml的其他配置

SqlMapConfig.xml中配置的内容和顺序如下:

properties(属性) 可以加载其他配置信息文件
settings(全局配置参数)
typeAliases(类型别名)(给某个类取别名,甚至可以直接别名一个包)
这里写图片描述
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
—environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
这里写图片描述

其他注意事项:

1、在xml写sql语句的时候
#{vv} 相当于变量并且两边加单引号。
${value}不加单引号
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

2、resultType 自动映射,resultMap 手动映射
3、selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常
动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。

猜你喜欢

转载自blog.csdn.net/cairuojin/article/details/81169976