首页 / 资讯中心 / 文章详情

初始MyBatis(随笔1)

初始MyBatis(随笔1) ★ FEATURED ARTICLE
初始MyBatis(随笔1)框架技术为什么要学习框架技术PTT模板举例做ppt前, 总是会需要找一些模板, 优点;1. 不用考虑布局, 排版等问题, 提高了效率;2. 可以专心于PTT的内容, 使演讲 “质量” 更有保障;3. 新手也可以实现出很好的 PPT;框架也是基于这样的考虑, 当确定使用哪个技术框架后, 就相当于有一个 “半成品” 项目框架, 在编写内部 增删改查代码即可…1. 不用在考虑公共问题, 框架已经帮我们做好了;不同公司,不同的人写代码都会有所不同...2. 可以专心于业务逻辑,保证核心业务逻辑的开发质量;3. 结构统一,便于学习维护4. 框架集成了前人的经验,可以帮助新手写出稳定,性能优良,结构优美的高质量程序;框架的概念框架的强大之处不是它可以让你做什么而是它不能让你做什么; —————— Rickard Oberg一千个人心中有一千个哈姆雷特框架使混乱的东西变大结构化一千个人可以写出一千种 ServletJSPJavaBean…主流框架的介绍SpringSpring框架是一个开源框架, 轻量级框架; 它使现有的JavaEE 技术更容易使用促进良好的编程习惯, 渗透了JavaEE技术的方方面面。它注意依赖注入容器和 AOP实现存在;还提供了声明式事务,对DAO层支持简化开发功能…Spring还可以很方便的与 SpringMvc Sturts2 MyBatis Hibernate 等框架集成使用…后续学习SpringMVCSpringMVC 是Spring 框架提供的构建Web应用程序的全功能MVC模块, 属于SpringFramework的后续产品。是结构最清晰的MVC Model2的实现。并且拥有高度的可配置性,支持多种视图技术,还可以进行定制开发,相当灵活…Spring整合SpringMVC可以说是无缝集成; 是一个高性能的架构模式;MyBatisMyBatis是一个优秀的数据持久层框架在实体类和Sql语句之间建立映射关系;适用于高性能系统开发性能优异 小巧 简单易学是一种半自动化的ORM的实现其封装性要低于Hibernate注意会导致N1 sql性能问题查询1条主数据, 中包含多条从记录 (职位表中, 对应职位可以获取每个职位的员工~)SSM集成框架指的就是 Spring 控制层 SpringMVC 表现层 MyBatis 持久层 技术框架 不同框架表示不同的技术领域MyBatis介绍及环境搭数据持久化概念数据持久化是将数据模型转换成存储模型同时可以存储模式转换为数据模型eg:文件的存储就是,数据读取等数据持久化操作,数据模型可以任何数据结构对象模型, 存储模型也可以是 XML 二进制 …简介MyBatis是一个开源的数据持久层框架, 内部封装 JDBC 访问数据库的操作, 支持普通的sql 数据库操作 存储过程 高级映射 , 几乎消除所有的JDBC代码和参数的手工设置以及结果集检索;MyBatis作为持久层框架,主要思想是将大量的sql语句抛离出来,配置在配置文件中, 实现了Sql 的灵活配置, 这样做的好处是将sql 与程序分离在不修改代码的情况下直接在配置文件中修改Sql 语句MyBatis 前身是iBatis 本是Apace 的开源项目; 2013迁移至GithubMyBatis官网 | http://mybatis.orgGithub 官网 | http://github.com/mybatisORMORM(Object/Relational Mapping) 即对象/关系映射是一种对数据持久化操作对DAO方法进行SQL映射;它在对象模型 和 关系型数据库之间建立起对应关系通过JavaBean对象去操作数据库表中的数据;基于ORM, MyBatis在对象模型 和 关系型数据库的表之间建立一座桥梁, 通过MyBatis建立SQL关系映射 实现增删改查....环境搭建下载Jar包——部署Jar——编写核心配置文件——创建实体类 POJO —(创建接口)—映射文件——测试类实现需要的Jar包主要有mysql-connector-java-5.1.0-bin.jar数据库驱动Jar包mybatis-3.2.2.jarMyBatis Jar包目前官网在国内受限制, 可以在官网中下载;部署Jar复制到Web 项目下lib目录下; Myelicpse会自动部署至项目上;创建MyBatis核心配置文件为了方便管理配置文件, 在工程下新建一个SourceFolder类型的目录 , 目录名称 resources存放配置文件;一般将文件命名为mybatis-config.xml该文件需要配置 MyBatis的参数;MyBatis-config.xml元素节点是有一定顺序节点顺序若不安顺序排位那么xml文件会报错。?xml version1.0 encodingUTF-8 ?!DOCTYPEconfigurationPUBLIC-//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd!-- 通过这个配置文件完成mybatis与数据库的连接 --configuration!--引入database.properties文件 --!-- properties resourcedatabase.properties / --!--resource引用文件属性值的优先级高于property子节点配置的值,两者可以相互使用不会影响或 URL:指定对应文件 (两个只能使用一个不能同时使用)--propertiesresourcedatebase.propertiespropertynameusernamevalueroot/propertynamepasswordvalueok//properties!-- 修改 MyBatis 在运行时的行为方式可选 --settingssettingnamelogImplvalueLOG4J/!-- 设置MyBatis的log日志实现为LOG4J即使用log4j实现日志功能。 --!--设置resultMap的自动映射级别NONE(禁止自动匹配),PARTIAL(默认)自动匹配所有属性,有内部嵌套(association、collection)的除外 且 数据库列与实体类名相同,FULL(自动匹配所有属性)比PARTIAL更强 --settingnameautoMappingBehaviorvalueFULL//settings!--typeAliases元素配置类型,方便在mapper配置文件中的使用起简化作用 --typeAliases!-- typeAlias aliasuser typecom.smbms.pojo.User / 给类型起别名,Mapper.xml文件可以直接使用 alias 获取表示 type的类型; --!--package属性会根据name的包名自动扫描JavaBean的类名更加简化了使用typeAlias属性配置实体类的别名,简化代码; --packagenamecom.wsm.pojo//typeAliases!-- 配置环境 --environmentsdefaultdevelopment!-- 默认的运行环境 ID --environmentiddevelopment!-- 运行环境 ID --!--MyBatis两种事务管理器 JDBC利用java.sql.Connection对象完成对事务的使用; MANAGEDMybatis自身不在去实现事务管理,而是让程序容器(JBOSS,WebLogic)实现事务管理 --transactionManagertypeJDBC/transactionManager!-- 事务管理器配置 --!-- MyBatis数据源 POOLED:mybatis自带连接池的数据源 JNDI:使用JNDl的数据源 UNPOOLED不使用连接池的数据源--dataSourcetypePOOLED!-- 数据源配置:因为前面引用了,所以后面就可以直接使用 ${name} 形势取到值,进行赋值操作... --propertynamedrivervalue${driver}/!-- com.mysql.jdbc.Driver --propertynameurlvalue${url}/!-- jdbc:mysql://localhost:3306/数据库 --propertynameusernamevalue${user}/!-- root --propertynamepasswordvalue${password}/!-- ok --/dataSource/environmentenvironmentidWSM..../environment!-- 根据default 指定对应ID,配置不同的数据库... --/environments!-- 将mapper映射文件加入到配置文件中 resource引入隐射文件; 或使用 URLfile:///引入绝对路径,别忘了前缀 --mappersmapperresource指向映射文件 项目路径如果不好找可以,右击文件选择Copy Qualified Name/mapperresource映射文件Mapper.xml//mappers/configuration!-- configuration配置文件根元素节点 properties通过resource属性引用外部的properties属性文件 database.properties该文件存放连接数据库的基本配置。 setting设置MyBatis运行的行为比如此处设置MyBatis的log日志实现为LOG4J即使用log4j实现日志功能。 typeAliases : 默认名称指定包下JavaBean的非限定类名 environments配置MyBatis多套运行环境将sql映射到多个不同的数据库上该元素节点下可以配置多个environment子节点但是必须指定其中一个默认运行环境通过的default指定 environment配置MyBatis一套运行环境指定运行环境的id事务管理数据源配置信息。 mappers作用告诉MyBatis去哪里找到SQL映射文件该文件内容是开发者定义的映射SQL语句整个项目可以有一个或者多个SQL映射文件 mappers子元素节点具体指定SQL映射文件路径 **MyBatis-config.xml元素节点是有一定顺序节点顺序若不安顺序排位那么xml文件会报错。** --setting功能例子!--是否启用延迟加载--settingssettingnamelazyLoadingEnabledvaluefalse//settingsdatebase.properties配置文件drivercom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/数据库#usernameroot#passwordok#: #表示注释, 注释的不会显示, 配置文件可以和 Mybatis-config.xml 中 properties 节点一起使用不会有影响l#Myelicpse:快速查询类 ctrlshiftt 输入类名Driver可以查看log4j.properties配置文件log4j.rootLoggerDEBUG,CONSOLE,file #log4j.rootLoggerERROR,ROLLING_FILE log4j.logger.cn.smbms.daodebug log4j.logger.com.ibatisdebug log4j.logger.com.ibatis.common.jdbc.SimpleDataSourcedebug log4j.logger.com.ibatis.common.jdbc.ScriptRunnerdebug log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegatedebug log4j.logger.java.sql.Connectiondebug log4j.logger.java.sql.Statementdebug log4j.logger.java.sql.PreparedStatementdebug log4j.logger.java.sql.ResultSetdebug log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilterdebug ###################################################################################### # Console Appender \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e ###################################################################################### log4j.appender.CONSOLEorg.apache.log4j.ConsoleAppender log4j.appender.Thresholderror log4j.appender.CONSOLE.TargetSystem.out log4j.appender.CONSOLE.layoutorg.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern [%p] %d %c - %m%n ###################################################################################### # DailyRolling File \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11 ###################################################################################### log4j.appender.fileorg.apache.log4j.DailyRollingFileAppender log4j.appender.file.DatePatternyyyy-MM-dd log4j.appender.file.Filelog.log log4j.appender.file.Appendtrue log4j.appender.file.Thresholderror log4j.appender.file.layoutorg.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n log4j.logger.com.opensymphony.xwork2error创建持久化类(实体类) 及对应的Sql 映射;在MyBatis不需要POJO类名与与数据库表名一致应为MyBatis是POJO与SQL语句之间的映射机制一般情况下保证POJO对象的属性与数据库表的字段一致即可。SQL映射文件一般相对于POJO所以一般采用POJO名称Mapper的规则命名。当然mapper属于DAO层操作应该放置dao包下。一般命名为实体类名mapper.xml映射文件;?xml version1.0 encodingUTF-8 ?!DOCTYPEmapperPUBLIC-//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmappernamespace命名空间:一般引用对应的接口类地址,也可以随便起名,如果面向接口编程则必须要是对应接口的地址引用...!-- Mybatis框架,底层会自动的实现接口方法; --!-- id: 可以随意,如果是面向接口编程的则需要是对应接口的方法名即可; resultType: 结果类型: result译结果 Type译:类型; 一般只有查询语句会有的,返回结果类型完整类名 或 通过MyBatis-Config.xmltypeAliases 元素设置的别名; parameterType: 参数类型: Sql语句需要传入的参数类型,它支持基本数据类型 和 复杂数据类型 eg String int 或实体类..typeAliases 元素设置的别名映射; 对于许多Java内建类型大小写并不敏感; --!-- 非面向接口 --selectidallresultTypeUserSELECT * FROM smbms_user/select!-- 查询用户表记录数 --selectidcountresultTypeintselect count(1) as count from User/selectinsertidxinzengparameterTypemapINSERT into smbms_user values (null,#{userCode},#{userName},#{userPassword},1,1983-10-10,13688889999,北京市东城区前门东大街9号,2,1,2020-08-18 09:56:31,NULL,NULL);/insert/mapper上面的文件中的 !DOCTYPE ... 文档声明指定的是 url..路径, 一般还需要进行环境的配置..MyelicpseDTD文件引入MyBatis 两种配置文件核心配置文件Mybatis-config.xml 和 Sql映射 mapper.xml这两个配置文件都需要手动引入各自的 DTD文件mybatis-3-config.dtd | mybatis-3-mapper.dtd否则在编写配置文件时候文件元素属性不能自动联想。MyElicpse配置工具栏——window——preferences——输入XML——选择XMLCatalog——单击Add——弹框 Location: FileSystem 选择DTD文件位置——Key 中输入对应的属性;——ok 保存即可;mybatis-3-config.dtdkey属性-//mybatis.org//DTD Mapper 3.0//ENmybatis-3-mapper.dtd *key属性-//mybatis.org//DTD Config 3.0//ENMyelicpse创建对应xml : New——XML(Basic Templates)——起名,不要直接Finish, Next——选择DTD File——选择Select XML…在下面XML_CataLog选择对应的Key…测试类实现核心接口和类每个MyBatis 应用程序都以一个SqlSessionFactory 对象实例为核心;可以根据 XML配置文件或 Configuration类的实例构建 SqlSessionFactoryBulider 对象通过 SqlSessionFactoryBuilder 对象,获取 SqlSessionFactory 对象;有了 SqlSessionFactory 对象后就可以进行获取 SqlSession 实例,SqlSession 对象中完全包含以数据库为背景的所有sql 操作方法;因为经常常用所以建议创建一个类专门用于创建 SqlSession的类MyBatisUtil.Java;privatestaticSqlSessionFactoryfactory;//作用SQLSessionFactory简单理解为SqlSession实例工厂。//SqlSession session sqlSessionFactory.openSession(boolean autoCommit); true关闭事务控制(默认) false开启事务控制//如果是 false,则只能查看 赠删改 需要手动提交; sqlSession.commit();//作用域Application 生命周期与应用的生命周期相同//单例模式 存在于整个应用运行时并且同时只存在一个对象实例// 静态代码块static{try{// 1.获取mybatis-config.xml文件的输入流 读取XML文件构造方式ReaderreaderResources.getResourceAsReader(mybatis-config.xml);//SqlSessionFactoryBuilder 负责构建SqlSessionFactory并提供多个build方法的重载 常用的有↓/* build(InputStream inputStream, String environment, Properties properties) build(Reader reader, String environment, Properties properties) build(Configuration config) 配置信息以三种形式提供给SqlSessionFactory的build方法 InputStream(字节流、Reader字符流、Configuration类 */// 2.创建sqlsessionfactory对象完成对配置文件的读取factorynewSqlSessionFactoryBuilder().build(reader);}catch(IOExceptione){e.printStackTrace();}}// 3.创建SqlSession对象//作用执行持久化操作类似于JDBC中的Connection提供执行Sql命令所需的所有方法可以通过Sqlsession实例直接映射到SQL语句。// •包含了执行SQL所需的所有方法 select(); update(); insert(); delete(); ...多种重载方法;// •对应一次数据库会话会话结束必须关闭 •线程级别不能共享//注意关闭SqlSession非常重要,必须要确保正常关闭,在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建publicstaticSqlSessioncreateSqlSession(){// 参数false表是开启事务控制不传参数表示默认为true(为自动提交事务)returnfactory.openSession(false);}// 关闭Sqlsession对象publicstaticvoidcloseSqlSession(SqlSessionsqlSession){if(null!sqlSession){sqlSession.close();}}核心对象最佳生命周期最佳作用域SqlSessionFactoryBuilder方法体内方法体内(局部变量)SqlSessionFactory从应用服务启动开始一直到应用服务停止—application整个应用内SqlSession一次请求的有效期一次请求的有效期内运行类publicstaticvoidmain(String[]args){}Test//非面向接口形式查询全部;publicvoidall(){// 获取SqlSession 对象;SqlSessionsessionMyBatisUtil.createSqlSession();// 根据SqlSession对象的 selectList(); 方法获取对应用户集合; 参数对应 Mapper.xml文件 命名空间.对应sql id;ListUseruserssession.selectList(com.wsm.dao.UserMapper.all);// 关闭...MyBatisUtil.closeSqlSession(session);for(Useruser:users){System.out.println(user.getId()\tuser.getUserCode()\tuser.getUserName()\tuser.getPhone()\tuser.getAddress());}};Test//非面向接口形式查询全部;publicvoidadd(){//新增需要参数, 而且是多个参数,可以使用 对象 或 Map 或 Param() 注解...这里使用Map;MapString,ObjectmapnewHashMapString,Object();//(null,#{userCode},#{userName},#{userPassword},1,1983-10-10,13688889999,北京市东城区前门东大街9号,2,1,2020-08-18 09:56:31,NULL,NULL);map.put(userCode,lala);map.put(userName,WSM);map.put(userPassword,123123);//根据Sql语句,Map 传对应的 key value; #{xx} 相当于 map.key取对应的value值;SqlSessionsessionMyBatisUtil.createSqlSession();intjgsession.insert(com.wsm.dao.UserMapper.xinzeng,map);//返回影响行数结果;if(jg1){System.out.println(新增成功);}else{System.out.println(新增失败);}};Testpublicvoidcount(){SqlSessionsessionMyBatisUtil.createSqlSession();intcountsession.selectOne(com.wsm.dao.UserMapper.count);//返回结果;MyBatisUtil.closeSqlSession(session);System.out.println(总共count条数据);}}这里只是笔记 代码还需多练—— 实例代码MyBatisDemo笔记还不全后面学习SSM 会继续填补,感谢支持留个心心♥呗~ ^y^
阅读完成 · 觉得有帮助?
咨询建站