您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > MyBatis-3-教程
MyBaties第1章MyBatis入门课程地位G1:282CBTHTMLLogicJavaC#/WinFormsCLanguageJavaScriptSQLAdvanceJavaOOPG2:368XHTML.NET/OOPServlet/JSPWeb2.0NTCG3:432ASP.NET/MVCOraclePS/FlashC#AdvanceEnterpriselibWCF/Silverlight.NETPRTLAMPEnterpriseDevelopMyBatisStruts/MVCWeb2.0NTCHibernate/EJBSpringJ2EEPRTJ2EEPMPPRT:B/SB2C.NETPMPSQLBaseADO.NETPRT1:ADO.Net+WinForms+SQLC/S本章内容持久层与持久化介绍MyBatis使用MyBatis操作数据本章目标理解持久层与持久化的概念了解MyBatis框架掌握使用MyBatis操作数据持久层与持久化知识点回顾三层分为哪三层?每一层的作用是什么?持久层所谓“持久层”,是指在系统逻辑层面上,专注于实现数据持久化的一个相对独立的领域(Domain)一个完善的持久化层应该能达到以下目标:代码的可重用性高,能完成所有数据库的访问操作可以支持多种数据库平台具有相对独立性,当持久层的实现发生变化时,不影响上层的实现持久化狭义的理解,“持久化”指将域对象永久保存至数据库中广义的理解,“持久化”包括与数据库相关的各种操作保存:将域对象永久保存至数据库中更新:更新数据库中域对象的状态删除:从数据库中删除一个域对象加载:根据特定的OID,将一个域对象从数据库加载至内存查询:根据特定的查询条件,将符合查询条件的一个或多个域对象从数据库加载至内存JDBC实现查询分析我们先看看我们最熟悉也是最基础的通过JDBC查询数据库数据,一般需要以下七个步骤:①加载JDBC驱动②建立并获取数据库连接③创建JDBCStatements对象④设置SQL语句的传入参数⑤执行SQL语句并获得查询结果⑥对查询结果进行转换处理并将处理结果返回⑦释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)1从JDBC到MyBatis第一步优化:连接获取和释放数据库连接的获取和关闭我们可以使用数据库连接池来解决资源浪费的问题。通过连接池就可以反复利用已经建立的连接去访问数据库了。减少连接的开启和关闭的时间。可以通过DataSource进行隔离解耦,我们统一从DataSource里面获取数据库连接,DataSource具体由DBCP实现还是由容器的JNDI实现都可以,所以我们将DataSource的具体实现通过让用户配置来应对变化。1从JDBC到MyBatis第二步优化:SQL统一存取我们使用JDBC进行操作数据库时,SQL语句基本都散落在各个JAVA类中,这样有三个不足之处:①可读性很差,不利于维护以及做性能调优②改动Java代码需要重新编译、打包部署③不利于取出SQL在数据库客户端执行(取出后还得删掉中间的Java代码,编写好的SQL语句写好后还得通过+号在Java进行拼凑)可以将这些SQL语句统一集中放到配置文件或者数据库里面(以key-value的格式存放)。然后通过SQL语句的key值去获取对应的SQL语句。既然我们将SQL语句都统一放在配置文件或者数据库中,那么这里就涉及一个SQL语句的加载问题。1从JDBC到MyBatis第三步优化:传入参数映射和动态SQLkey-value的Map,解析的时候根据变量名的具体值来判断JSTL中的iftest=””/if标签——SQL解析器1从JDBC到MyBatis第四步优化:结果映射和结果缓存需要返回什么类型的对象。需要返回的对象的数据结构怎么跟执行的结果映射,这样才能将具体的值赋值到对应的数据结构上进而考虑对SQL执行结果的缓存来提升性能1从JDBC到MyBatis第五步优化:解决重复SQL语句问题SQL抽象SQL引用1从JDBC到MyBatis为什么需要MyBatis(1)系统的部分或全部数据来自现有数据库,出于安全性的考虑,只为开发团队提供几条SelectSQL(或存储过程)以获取所需数据,具体的表结构不予公开。(2)开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现(对于金融行业而言,工商银行、中国银行和交通银行,都在开发规范中严格指定)。(3)系统数据处理量巨大,性能要求极为苛刻,这通常意味着我们必须由经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。什么是MyBatisMyBatis是一个运用于持久层的数据操作框架MyBatis是从iBatis升级而来使用MyBatis提供的ORM机制,业务逻辑层实现人员操作的是JAVA对象,该层面与Hibernate机制中的相同。对于具体的数据库操作而言,Hibernate会自动生成SQL并执行,而MyBatis要求开发人员具体编写SQL语句。MyBatis在数据库移植性和SQL开发工作量上进行了让步,从而提升了系统设计的灵活性,扩展了其自由空间。MyBatis的优势支持ORM支持动态SQL外部化SQL语句封装SQL语句MyBatis使用入门准备软件开发环境MyBatis的源代码、所需的jar文件以及学习文档可以在网站上下载,推荐下载mybatis-3.1.1-bundle.zip文件/文件夹说明mybatis-3.1.1.jarmybatis的核心jar包lib文件夹Lib文件夹中包含mybatis所依赖的其他jar文件mybatis-3.1.1.pdfmybatis的用户指南Mybatis-3.1.1-javadoc.jarMybatis的API文档Mybatis-3.1.1-sources.jarMybatis的源代码MyBatis使用入门准备数据列名类型说明约束USER_IDint用户ID主键标识列(自动增长)USER_NAMEvarchar用户名不能为空USER_PASSWORDvarchar用户密码不能为空USER_BIRTHdate用户生日USER_ADDRESSvarchar用户地址USER_PHONEvarchar用户电话USER_STATUSint用户类型0为禁用;1为普通用户(默认);2为管理员使用mybatis操作数据库操作步骤创建项目-导入jar包创建mybatis配置文件创建实体类创建实体类对应的映射器及其配置文件操作数据测试操作创建mybatis配置文件创建mybatis-config.xml文件配置数据源dataSourcetype=POOLED!--数据库JDBC驱动--propertyname=drivervalue=com.microsoft.sqlserver.jdbc.SQLServerDriver/!--数据库URL--propertyname=urlvalue=jdbc:sqlserver://127.0.0.1:1433;database=shop/!--用户名--propertyname=usernamevalue=sa/!--密码--propertyname=passwordvalue=sa//dataSource创建实体类publicclassUserimplementsSerializable{//属性字段privateintuserId;privateStringuserName;privateStringuserPassword;privateDateuserBirth;privateStringuserAddress;privateStringuserPhone;privateintuserStatus;//无参数的构造函数//getter和setter}创建映射器及其配置文件publicinterfaceUserMapper{//新增用户publicvoidinsertUser(Useruser);//根据用户名和密码查询用户publicUserselectUserByNameAndPassword(Useruser);//查询所有的用户publicListUserselectAllUsers();}创建映射器的配置文件?xmlversion=1.0encoding=UTF-8?!DOCTYPEmapperPUBLIC-//mybatis.org//DTDMapper3.0//EN=com.shop.persistence.UserMapper!--添加用户--insertid=insertUserparameterType=useruseGeneratedKeys=trueSQL语句/insert!--根据用户名和密码查询用户--selectid=selectUserByNameAndPasswordparameterType=userresultType=userSQL语句/select/mapper创建映射器的配置文件(1)namespace表示该配置文件对于映射器(UserMapper)接口的完全路径。insert映射插入语句Id表示在命名空间中唯一的标识符,可以被用于引用该语句,与映射器接口中的方法一致时,会在该方法中使用该语句。parameterType表示将会传入该语句的参数类的完全限定名或别名。useGeneratedKeys表示使用JDBC的getGeneratedKeys方法取出由数据库内部生成的主键(实现标识列自动增长)。创建映射器的配置文件(2)select映射查询语句Id表示在命名空间中唯一的标识符,可以被用于引用该语句,与映射器接口中的方法一致时会在该方法中使用该语句。parameterType表示将会传入该语句的参数类的完全限定名或别名。resultType表示从这条语句中返回的期望类型的类的完全限定名或别名,如果返回的是集合,则应是集合中包含元素的类型,而并非集合本身。操作数据步骤读取并解析配置文件,创建SqlSessionFactory。从SqlSessionFactory中获取SqlSession对象。使用SqlSession对象操作数据。提交事务(回滚事务)。关闭SqlSession对象。创建SqlSessionFactory//配置文件的路径(在src下)Stringresource=mybatis-config.xml;//读取配置文件Readerreader=Resources.getResourceAsReader(resource);//创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilderbuilder=newSqlSessionFactoryBuilder();//解析配置,构建SqlSessionFactory对象SqlSessionFactoryfactory=builder.build(reader);获取SqlSession对象SqlSessionsqlSession=factory.openSession();SqlSession的方法TTselectOne(Stringstatement,Objectparameter)EListEselectList(Stringstatement,Objectparameter)K,VMapK,VselectMap(Stringstatement,Objectparameter,StringmapKey)intinsert(S
本文标题:MyBatis-3-教程
链接地址:https://www.777doc.com/doc-4822337 .html