对mybatis的了解

1.什么是 MyBatis?

​ 是对jdbc的轻量级封装,是一个orm对象关系映射框架,(通过xml或注解的方式,把实体类与表之间做映射关系),目的是为了
简化开发,达到以OOP的方式来操作数据库(不写sql)。
​ dbutils是一个jdbc组件;
​ mybatis–>mybatis-plus(大大提高开发效率)
​ mybatis是一个半自动的orm框架,还要写sql.

2.使用mybatis

2.1 安装环境:

​ mybatis的核心jar包;数据库驱动包

2.2 创建xml文件:

​ xml配置文件mybatis-config.xml,一般这个文件放src根目录
​ xml映射文件blog-mapper.xml,这个文件放dao包下;
​ 把映射文件放在配置文件中;

2.3 从xml文件构建SqlsessionFactory对象

​ 该对象的创建,需要依赖数据源;需要映射文件信息
​ 2.4 获取 SqlSession
​ 2.5 执行操作

3.核心对象:

​ SqlSessionFactoryBuilder:
​ 用来加载文件,创建Facotyr,用完即销毁。
​ SqlSessionFactory:
​ 该对象全局唯一。
​ openSession()
​ SqlSession:
​ 执行数据库操作,openSession创建对象,执行操作,操作完成后关闭对象。
​ Object obj = selectOne(“映射文件的namespace.标签id”,查询参数)
​ List selectList(“namesapce.id”,查询参数)
​ T t = getMapper(Class clz)

4.mapper映射文件中的注意点:

​ namespace:必须唯一,不同文件不能同名的namesapce
​ 查询语句的标签必须是select,id在同一个mapper文件中不能同名,paramterType:表示参数类型;resultType:返回值类型,表示对数据库表单行记录的封装类型。
​ 在sql语句中获取参数的语法:#{简单类型的随便写,对象类型的写成员变量名,}

5.SqlSession的getMapper方法:

​ 映射文件的namespace必须是接口的全名称
​ id必须是接口中的方法名

6.如何多参数传递

​ 5.1 封装实体
​ 5.2 封装map,适合于多参数不属于同一个实体
​ 5.3 加注解@Param,加到mapper接口的方法形参上。

7.别名配置:别名忽略大小写。注意类名绝对不能重复,mybatis提供了常见的简单类型的内建别名。Map-map,String-string,Date-date

   <typeAliases>
        <package name="com.javasm"></package>
    </typeAliases>

8.settings标签:

​ 在运行过程中把sql语句打印。

  <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>


​ mybatis支持驼峰映射,把下划线分割的字段映射成实体类驼峰命名

      <setting name="mapUnderscoreToCamelCase" value="true"></setting>

9.跟踪源码:

​ XMLConfigBuilder:xml配置文件解析对象,构建器build模式,用来构建对象。
​ Configuration configuration
​ parse(),返回Configuration配置对象。

XMLMapperBuilder:xml映射文件的解析对象,最重要的是得到mappedStatements集合
    parse(),解析mapper.xml,重点在于解析SELECT|INSERT|UPDATE|DELETE四类标签

Configuration:配置对象,把xml配置文件数据读取到该对象
    Environment:数据库环境,数据库连接信息
    TypeAliasRegistry:类型别名注册,别名信息
    Map<String, MappedStatement> mappedStatements:sql映射结果集,key:namespace.id,value:MappedStatement(操作类型,sqlResource)
    variables:properties资源配置信息。

DefaultSqlSessionFactory implements SqlSessionFactory
    Configuration configuration

MappedStatement:相当于一个select|update|delete|insert标签的解析结果

DefaultSqlSession implements SqlSession
    Configuration configuration;

Executor:执行器对象。
    用来执行具体的数据库操作

总结:
    SqlsessionFactoryBuilder.build()
        XMLConfigBuilder与XMLMapperBuilder是为了解析xml配置与xml映射文件,得到Configuration对象
        创建出SqlsessionFactory对象,持有Configuration对象对象:new DefaultSqlSessionFactory(Configuration config)
    opensession()
        得到Executor执行器对象。打开Connection连接
    selectOne或selectList的时候:
        根据传递进去的String(namespace.id)去Configuration得到一个具体的MappedStatement对象,执行query方法进行数据库查询,结果集封装。
    getMapper方法:
        该方法传入接口的类对象,返回代理对象。

10.代理模式:proxy

​ 作用:当一个已经存在的对象中的某个方法不满足需求,此时需要代理模式。
​ 静态代理:
​ 创建代理类,必须与被代理对象同类型;代理对象必须持有被代理对象。

动态代理:
    代理类不再手工创建,在程序运行期间动态的在jvm内创建的代理类,并编译。

11.#{}与${}:

​ 写在映射文件中,sql语句获取参数.
​ #{} sql语句使用?占位符,PreparedStatement.
不 使 用 占 位 符 , S t a t e m e n t , 平 常 不 用 , 但 是 如 果 参 数 是 表 名 , 字 段 名 等 s q l 语 句 的 语 法 部 分 。 必 须 使 用 {} 不使用占位符,Statement,平常不用,但是如果参数是表名,字段名等sql语句的语法部分。必须使用 使Statementsql使{}
​ select ${} from blogs where bid=#{} order by ${} ${}

12.注意点:

​ 以后建数据库表,起码create_time与update_time必须有,查询排序使用。
​ Date:日期类型。数据库使用timestamp类型,可以设置CURRENT_TIMESTAMP默认日期,可以设置根据时间戳更新。
​ 实体类使用Date,String,建议使用String,如果使用Date到springMVC框架会带来麻烦。
​ 在命名(类名,成员变量名,包名,数据库字段名)的时候,不允许出现单个单词。
​ 在实体类,方法形参出现变量建议都使用包装类对象。
​ private String bName;首字母小写,紧跟字母大写
​ private String isOk;//不允许成员变量名is开头

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值