1.mybatis优秀的持久层框架,使开发者注重sql而不是注册驱动、创建connection、创建statement等繁琐操作。
2.Mybatis通过xml或注解的方式将要执行的各种(statment、preparestatement,callableStatement)配置起来。将duix和statement中的sql进行映射生成sql语句。最后由框架运行sql并将结果映射成java对象并返回。
3.Jdbc编程步骤:
注册驱动-获取数据库连接-创建statement对象-设置sql语句-设置sql的参
数-preparestatement执行sql语句并获得结果-处理结果集-释放资源
(resultset-preparestatement-connention)。
Class.forName(“”)-driverManager.getConnection-conn.getpreparestatement()...
4.sqlMapConfigure.xml是mybatis的全局配置文件,配置了mybatis的配置信息。
Mapper.xml是sql映射文件,此文件需要在sqlMapperConfigure.xml中加载。
通过mybatis环境等配置信息构造sqlsessionfactory即会话工厂。
由sqlsessionfactory创建sqlsession即会话。操作数据库需要sqlsession执行。
Mybatis底层定义了Executor执行器接口操作数据库。Executor有两个实现,一个是基本执行器,一个是缓存执行器。
MapperStatement是mybatis底层封装的一个对象。他包装了mybatis配置信息以及sql映射信息。Mapper.xml文件中一个sql对应一个mapperStatement对象,sql的id即是
mappersatement的id。
Mapperedstatement对sql执行输入参数进行定义,包括hashmap,基本类型,pojo。
Executor通过MapperedStatement在执行sql前将输入的java对象映射到sql中,(输入参数映射就是jdbc编程中对preparestatement进行参数设置)。
MapperedStatement对sql执行输出结果进行定义,包括hashmap、基本类型、pojo,Executor通过MapperStatement对执行sql后输出的结果映射到java对象里面(这个过程相当于jdbc编程中对结果集进行解析)。
5.mybatis-3.2.7.jar mybatis的核心包。lib文件夹 mybatis的依赖包
6.Mybatis搭建:
导入mybatis核心包,依赖包,数据库驱动包。
创建config文件夹,加入log4j和SqlMapConfig.xml配置文件。(mybatis默认使用log4j作为日志输出)。
SqlMapConfig.xml是mybatis的核心配置文件,内容为数据源和事务管理。
7.pojo类作为mybatis进行sql映射使用,pojo类与数据库表相对应。
8.在SqlMapConfig.xml中加载映射文件。
9.映射文件跟标签是mapper 有namesapce名空间。
#{}:输入参数的占位符,相当于jdbc的?
自动进行java类型和jdbc类型转换。如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
测试步骤:
1. 创建new SqlSessionFactoryBuilder对象
2. 加载SqlMapConfig.xml配置文件
3. 创建SqlSessionFactory对象
4. 创建SqlSession对象
5. 执行SqlSession对象执行查询,获取结果User
6. 打印结果
7. 释放资源(sqlsession)
10.parametertype指定入参,mybatis通过ognl表达式从输入对象中获得参数拼接在sql中。
Resulttype:出参,映射为对象,如果有多条则放入list集合中。
11.selectone和selectList如果使用selectone查询多条记录则抛出异常。
12.自增朱健返回:
修改映射文件,可以实现自增朱健返回。
SELECT LAST_INSERT_ID()
INSERT INTO `user`
(username,birthday,sex,address) VALUES
(#{username},#{birthday},#{sex},#{address})
当mysql使用uuid做主键时获取主键需要做以下更改:
Order=“BEFORE” resulttype=“string”
13.执行增删改差都是sqlsession执行。
14.spring-jdbc.jar提供自带的连接池
15.sqlSession封装了对数据库的操作,增删改差。(创建过程:
sqlsessionFactoryBuilder(创建完工厂即无用了)-sqlsessionfactory-sqlsession)
sqlsessionFactory是一个接口:其中定义了opensession的不同重载方法,通常它的使用范围是整个应用运行期间,单例模式存在。
Sqlsession是操作数据库的,每个线程都应该有自己的sqlsession实例,sqlsession不能共享,同样它也是线程不安全的。最佳范围是请求或方法范围。绝不能放在类的静态字段或实例字段中。(sqlsession使用完毕需要关闭,放在finally中)
16.Mybatis的Dao开发方法两种:
原始dao需要自己开发dao接口和dao实现类。
动态代理开发:
Mapper的动态代理开发只需要声明接口,mybatis根据接口创建动态代理对象,该代理对象的方法体同该接口的实现类方法。
Mapper开发需要遵循一下规范:
1.mapper.xml文件中的namespace与mapper接口的类路径相同。
2.Mapper接口的方法名和mapper.xml文件定义的statement的id相同。
3.Mapper接口方法的出参和入参和mapper.xml定义的相同
步骤:从spring容器获得sqlsession,获得接口的代理对象
sqlsession.getMapper(“UserMapper.class”);
动态代理开发调用selectOne和selectList是根据配置文件的返回值指定。
入参可以使用pojo包装。
17.
Sqlmapconfig.xml中节点的顺序中properties在最上面
sqlmapconfig.xml文件中可以引用java属性文件的配置信息(db.properties)。
18.
19.Properties元素内部的首先会先辈读取,然后读取resource或url,他会覆盖已经读取的同名属性。
<typeAliases>
<typeAlias alias="user" type="cn.itcast.mybatis.pojo.User" />
<package name="cn.itcast.mybatis.pojo" />
<package name="其它包" />
typeAliases>
别名定义写在
20.
Mappers映射