




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、J2EE 持久层框架MybatisJ2EE简介o 什么是J2eeo 为什么要有J2EE课题收集系统代码分析o 代码行数分析o 模型层bean分析o 服务层分析o 控制层分析o 展示层分析服务层代码分析o 获取数据库连接o 执行sql语句o 结果与bean绑定o 返回执行结果理想的服务层代码o 只关注核心(即:sql指令)o 数据库连接、代码执行、结果绑定最好自动完成Java反射技术介绍o JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Jav
2、a反射技术介绍o 反射技术演示o 获取对象的属性n o.getClass().getDeclaredFields()o 获取对象的方法n Method methods = o.getClass().getMethods();o 执行对象的方法o 综合演示,将map绑定到bean对象课堂练习o 使用反射技术实现Map和javaBean对象的动态绑定并使用jsp展示出来我们自己数据库持久层框架示意图常见数据库持久层框架介绍o Mybatisn 学习曲线低n 运行性能好o Hibernaten 学习曲线高n 使用简单o activeRecordn 学习曲线低n 普及率低Mybatis初始化o 使用x
3、ml初始化n 编写mybatis.xmln 编写bean文件n 编写具体的mapper文件n 编写mapper对应的接口n 初始化mybatisn 获取SqlSessionFactoryn 获取SqlSessionn 执行对应方法获取数据第一个mybatis程序o 实现项目类别管理模块o 使用mybatis重构原有部分代码Mybatis中的关键对象o SqlSessionFactoryBuildern 该类用于创建sqlSessionFactoryo sqlSessionFactoryn 该类用于创建sqlSessiono sqlSessionn 该类用于执行sql代码常用对象的生命周期oSq
4、lSessionFactoryBuildern这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 实例的最佳范围是方法范围(也就是局部方法变量)。你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在以保证所有的 XML 解析资源开放给更重要的事情。osqlSessionFactorynSqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 Sql
5、SessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。osqlSessionn每个线程都应该有它自己的 SqlSession 实例。所以它的最佳的范围是请求或方法范围。Mybatis配置文件详解o configuration 配置o properties 属性o settings 设置o typeAliases 类型命名o typeHandlers 类型处理
6、器o objectFactory 对象工厂o plugins 插件configurationo Mybatis配置文件的根节点,其它节点均应包含在该节点内propertieso 这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递o settingso 用于设置mybatis的基本参数。不指定该参数时均使用默认值。n 建议:使用mybatis的默认值typeAliaseso 类型别名,用于mapper文件中的输入输出nn n n n n n ntypeHandlerso 类型处理。无论是 MyBatis 在预处理语句
7、(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型类型处理器类型处理器Java 类型类型JDBC 类型类型BooleanTypeHandlerjava.lang.Boolean, boolean数据库兼容的 BOOLEANByteTypeHandlerjava.lang.Byte, byte数据库兼容的 NUMERIC 或 BYTEShortTypeHandlerjava.lang.Short, short数据库兼容的 NUMERIC 或 SHORT INTEGERIntegerTypeHandle
8、rjava.lang.Integer, int数据库兼容的 NUMERIC 或 INTEGER自定义typeHandlerso 对于一些特殊类型可实现自己的typeHandlers以取代mybatis默认的typeHandlers行为。(了解)pluginso MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括(高级部分详细讲解):nExecutor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)nP
9、arameterHandler (getParameterObject, setParameters)nResultSetHandler (handleResultSets, handleOutputParameters)nStatementHandler (prepare, parameterize, batch, update, query)配置环境(environments)o MyBatis 的数据库连接参数配置,mybatis可以连接多个不同的数据库(POOLED):n 配置环境(environments)o MyBatis 的数据库连接参数配置,mybatis可以连接多个不同的数据
10、库(JNDI):n 映射器(mappers)o 告诉mybatis在哪里寻找sql映射语句:n单个引入n n批量引入o o oMapper映射文件详解o 查询(select)o 更新(insert, update and delete)o 参数(Parameters)o 结果集(Result Maps)o 自动映射(Auto-mapping)o cacheselectSelect属性表属性属性描述描述id在命名空间中唯一的标识符,可以被用来引用这条语句。parameterType将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过 TypeHandler
11、 推断出具体传入语句的参数,默认值为 unset。parameterMap这是引用外部 parameterMap 的已经被废弃的方法。使用内联参数映射和 parameterType 属性。resultType从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用 resultType 或 resultMap,但不能同时使用。resultMap外部 resultMap 的命名引用。结果集的映射是 MyBatis 最强大的特性,对其有一个很好的理解的话,许多复杂映射的情形都能迎刃而解。使用 resultMap 或 resultTyp
12、e,但不能同时使用。flushCache将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:false。Select属性表useCache将其设置为 true,将会导致本条语句的结果被二级缓存,默认值:对 select 元素为 true。statementTypeSTATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。resultSets 这个设置仅对多结果集的情况适用,它将列出语句执行后
13、返回的结果集并每个结果集给一个名称,名称是逗号分隔的。insertupdatedelete参数说明useGeneratedKeys(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。keyProperty(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey
14、 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。keyColumn(仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。自动增长字段设置oo insert into Author (username,password,email,bio)o values (#username,#password,#email,#bio)o自动增长字段设置oo o SELECT MAX
15、(IFNULL(id,0)+1 from tb01 o insert into Authoro (id, username, password, email,bio, favourite_section)o valueso (#id, #username, #password, #email, #bio, #favouriteSection,jdbcType=VARCHAR)osqlo 这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。它可以被静态地(在加载参数) 参数化. o $alias.id,$alias.username,$alias.password oo sel
16、ecto ,o o from some_table t1o cross join some_table t2oSql中的参数o 简单类型基本写法n Select * from tb01 where id=#ido 绑定原理n 将输入的参数(int,string等)转换为与id相匹配的类型。Sql中的参数o 复合类型处理过程nn insert into users (id, username, password)n values (#id, #username, #password)no 绑定原理n 使用#username等方式可访问参数类型为”User”的对象的属性值,如一个bean对象。Sq
17、l中参数的高级写法o 显式指定参数类型n#property,javaType=int,jdbcType=NUMERICo 指定参数的处理器n#age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandlero 指定小数位数n #height,javaType=double,jdbcType=NUMERIC,numericScale=2Sql中字符串替换的写法o 基本写法nORDER BY $columnNameo 字符串替换注意事项n勿使用客户端提交的参数作为字符串替换以防止sql注入o 指定小数位数n #height,javaType=d
18、ouble,jdbcType=NUMERIC,numericScale=2Sql中like的写法o SELECT o * o FROM o user o WHERE o name like CONCAT(%,#name,%) ResultMapoconstructor - 类在实例化时,用来注入结果到构造方法中nidArg - ID 参数;标记结果作为 ID 可以帮助提高整体效能narg - 注入到构造方法的一个普通结果oid 一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能oresult 注入到字段或 JavaBean 属性的普通结果oassociation 一个复杂的类型关联;许
19、多结果将包成这种类型ocollection 复杂类型的集odiscriminator 使用结果值来决定使用哪个结果映射ncase 基于某些值的结果映射n嵌入结果映射 这种情形结果也映射它本身,因此可以包含很多相 同的元素,或者它可以参照一个外部的结果映射。ResultMapo注意:在select中使用resultMap时需要将resultType换成resultMapResultMap示例(一)o ResultMap示例(二)o SELECT a.id AS subject_id,a.title AS subject_title,b.news_id,c.title AS news_title
20、FROMSUBJECT a LEFT JOIN subject_news b ON a.id=b.subject_id LEFT JOIN news c ON b.news_id=c.id Mybatis动态sqlo 什么是动态sql?o Mybatis下动态sql指令n Ifn choose, when, otherwisen trim, where, setn Foreachn Bindifo 根据指定的条件拼接sqloo SELECT * FROM BLOG WHERE state = ACTIVE o o AND title like #titleo o o AND author_name like #o ochooseo 根据指定的条件拼接sqloo SELECT * FROM BLOG WHERE state = ACTIVEo o o AND title like #titleo o o AND author_name like #o o o AND featured = 1o o owhereo 问题的产生oo SELECT * FROM BLOG o WHERE o o state = #stateo o o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业运营效率与策略研究
- 三农村危房改造工作指南
- 综合农业可研报告
- 三农产品品牌打造作业指导书
- 软件行业项目可行性分析报告
- 装配式建筑设计规范
- 农业产业链延伸发展策略手册
- 光伏发电太阳能工程
- 环保产业园区可行性研究报告
- 项目筹备及执行计划书
- 智能化仓储冷库项目可行性研究报告
- 缺血性视神经病变课件
- 第二课 让美德照亮幸福人生(课时3)(课件)-【中职专用】中职思想政治《职业道德与法治》高效课堂课件+教案(高教版2023·基础模块)
- 《工程建设标准强制性条文电力工程部分2023年版》
- 《混凝土板桩支护技术规程》
- 2024年重庆市公安局辅警招聘笔试参考题库附带答案详解
- 2024低温液化气体气瓶充装站安全技术条件
- 人教版六年级数学下册全册课时练分层作业
- 2021年10月自考00150金融理论与实务试题及答案含解析
- TCALC 003-2023 手术室患者人文关怀管理规范
- 设备管理制度的规范标准和流程
评论
0/150
提交评论