value="jdbc:mysql://localhost:3306/mybatis?char" />

Mybatis入门文档

Mybatis入门文档
Mybatis入门文档

Mybatis介绍:

是一个持久层框架

使用:

1,导入jar包

2,全局配置文件SqlMapConfig.xml,配置DB,事务等运行环境,加载mapper.xml映射文件.

PUBLIC "-//https://www.360docs.net/doc/1e2511029.html,//DTD Config 3.0//EN"

"https://www.360docs.net/doc/1e2511029.html,/dtd/mybatis-3-config.dtd">

value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />

3,Mapper.xml映射文件.命名:表名Mapper.xml

PUBLIC "-//https://www.360docs.net/doc/1e2511029.html,//DTD Mapper 3.0//EN"

"https://www.360docs.net/doc/1e2511029.html,/dtd/mybatis-3-mapper.dtd">

具体参数:

1,resultType:将sql查询结果集映射成java对象,规则是sql查询列名和java 对象到属性名须一致才行.

resultMap:当列名和pojo属性名不一致时,可以通过resultMap定义列名和属性名的一个对应关系,完成映射。(可完成一些高级映射:一对一/一对多) 2,${}是拼接符号,无法防止sql注入攻击,#{}是占位符,开发中推荐使用,可防止注入攻击.

#{}:表示一个占位符号,很好去避免sql注入

原理:将占位符位置的整个参数和sql语句两部分提交给数据库,数据库去执行sql语句,去表中匹配所有的记录是否和整个参数是否一致。

#{}要获取输入参数的值:

如果输入参数是简单类型,#{}中可以写value或其它名称

如果是pojo对象类型,#{]通过OGNL方式去获取,表达式就是:属性.属性.属性。。。方式

${}表示一个sql 拼接符号

原理:是在向数据库发出sql之前去拼接好sql再提交给数据库执行。

${}要获取输入参数的值:

如果输入参数是简单类型,${}中只能写value

如果是pojo对象类型,${]通过OGNL方式去获取,表达式就是:属性.属性.属性。。。方式

3,SqlSessionFactory作为会话工厂,创建sqlSession,以单例方式出现

SqlSession是一个面向程序员接口,操作数据库.此对象线程不安全,因此其最佳使用场合是在方法体内作为局部变量使用.

4,全局配置文件:加载属性文件

配置mabatis 运行参数

定义单个别名

批量定义别名

加载类路径下映射文件

通过mapper.java加载映射文件:要求mapper.java和映射文件同名且在同一路径

class=”https://www.360docs.net/doc/1e2511029.html,erMapper”/>

指定mapper接口所在包来加载映射文件:要求mapper.java和映射文件同名且在同一路径

5,映射文件:

动态sql:

Sql片段:

Foreach:

添加用户主键返回:

1,数据库自增主键到返回:

2,uuid生成主键:

Mapper代理开发方法:

开发规范:

1,映射文件中namespace等于mapper接口类路径

2,映射文件中statement的id和mapper接口中方法名一致.

3,映射文件中parameterType指定到参数类型和mapper接口中方法输入参数类型一致.

4,映射文件中resultType指定到类型与mapper接口方法返回值类型一致.

疑问解答:

动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单

个对象则调用selectOne方法。

selectOne如果返回多条记录报错:TooManyResultsException.

延时加载:

需求:查询订单关联查询用户信息,对关联查询用户进行延迟加载。

实现思路:定义两个mapper:

1、查询订单列表(只从订单表查询),单表查询

2、根据用户id查询用户信息。

实现步骤:1,在全局配置文件中配置打开延迟加载开关:

2,映射文件中:

3,定义resultMap:

4,定义接口:

5,测试延迟加载:

延迟加载总结:resultMap提供延迟加载,通过association可以延迟加载一个对象,通过collection可以延迟加载多个对象即集合对象

延迟加载要注意实现的方法多种多样,主要目的是提高查询性能,减轻数据库压力,先查询简单数据,按需查询关联数据。

Mybatis二级缓存:

mybatis对一级缓存是默认支持,对二级缓存需要开启。mybatis支持使用第三方缓存框架实现二级缓存数据的存储,要求对象必须实现序列化。

开启二级缓存:

1,打开总开关:

在核心配置文件SqlMapConfig.xml中加入

2,在映射文件中打开mapper的二级缓存开关:

测试代码:

// 二级缓存测试

@Test

public void testCache2() throws Exception {

//二级缓存是跨sqlsession的是基于mapper级别的缓存,sqlsession可以使用多个对象,多个对象必须要访问同一个mapper下的sql语句

SqlSession sqlSession1 = sqlSessionFactory.openSession();

SqlSession sqlSession2 = sqlSessionFactory.openSession();

SqlSession sqlSession3 = sqlSessionFactory.openSession();

SqlSession sqlSession4 = sqlSessionFactory.openSession();

// 生成代理对象

UserMapper mapper1 = sqlSession1.getMapper(UserMapper.class); UserMapper mapper2 = sqlSession2.getMapper(UserMapper.class); UserMapper mapper3 = sqlSession3.getMapper(UserMapper.class); UserMapper mapper4 = sqlSession4.getMapper(UserMapper.class); // 第一次查询,查询id为1的用户

// 调用mapper

User user = mapper1.findUserById(1);

System.out.println(user);

//第一次查询用户列表

List list = mapper4.findUserByName("张");

System.out.println(list);

//关闭sqlsession1,此时将数据写入二级缓存

sqlSession1.close();

sqlSession4.close();

// 中间执行commit,清空缓存,将userMapper下手所有缓存数据全部

user.setUsername("张明明");

mapper3.updateUser(user);

https://www.360docs.net/doc/1e2511029.html,mit();

sqlSession3.close();

// 第二次查询,查询id为1的用户,两次查询使用相同的sqlsession

user = mapper2.findUserById(1);

System.out.println(user);

List list2 = mapper2.findUserByName("张");

System.out.println(list2);

sqlSession2.close();

sqlSession3.close();

}

可以针对每一个statement进行测试是否二级缓存,默认值是true,进行二级缓存。useCache=false时,查询该statement不进行二级缓存,针对那些查询非常频繁的语句,信息的变化性较高,可以将useCache设置false不进行二级缓存。

刷新缓存

针对insert、update、delete这些statement设置flushCache="true" 表示执行commit就清空二级缓存,如果设置flushCache="false",执行操作也不清空缓存默认flushCache="true" ,为了避免查询出脏数据。

其他参数:

flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。

size(引用数目)可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024。

readOnly(只读)属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false。

如下例子:

这个更高级的配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会导致冲突。可用的收回策略有, 默认的是 LRU:

1.LRU –最近最少使用的:移除最长时间不被使用的对象。

2.FIFO –先进先出:按对象进入缓存的顺序来移除它们。

3.SOFT –软引用:移除基于垃圾回收器状态和软引用规则的对象。

4.WEAK –弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

mybatis整合ehcache前戏:

mybaits是一个持久框架,对缓存数据处理没有第三方专门做缓存框架优秀。mybatis提供一个Cache接口供第三方框架整合。

建议使用第三方缓存框架和mybatis整合,比如:ehcache、redis、memcache。mybatis提供二级缓存Cache接口,如下:

它的默认实现类:

mybatis整合ehcache实现:

第一步:引入ehcache缓存的依赖包

第二步,配置ehcache的配置文件

第三步,开启ehcache缓存

实现让echcache托管mybaits二级缓存数据的存取。

修改mapper.xml文件,在cache中指定EhcacheCache。

配置如下:

根据需求调整缓存参数:

mybatis二级缓存应用场景

对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。

mybatis二级缓存局限性

mybatis二级缓存对细粒度的数据级别的缓存实现不好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为mybaits的二级缓存区域以mapper为单位划分,当一个商品信息变化会将所有商品信息的缓存数据全部清空。解决此类问题需要在业务层根据需求对数据有针对性缓存。

mybatis面试题

1、Mybatis基础: #{...} 和${...} 的区别 MyBatis将#{…} 解释为JDBC prepared statement 的一个参数标记。而将${…} 解释为字符串替换。理解这两者的区别是很有用的, 因为在某些SQL语句中并不能使用参数标记(parameter markers)。 比如,我们不能在表名(table name)的位置使用参数标记。 假设有下面的代码: 01.Mapparms = new HashMap(); 02.parms.put("table", "foo"); // 表名 03.parms.put("criteria", 37); // 查询过滤条件 04.List rows = mapper.generalSelect(parms); 01. MyBatis生成的SQL语句(prepared statement)如下所示: 01.select * from foo where col1 = ? 重要提示: 请注意,使用$ {…} (字符串替换)时可能会有SQL注入攻击的风险。另外,字符串替换在处理复杂类型也可能常常发生问题,如日期类型。由于这些因素,我们建议您尽可能地使用#{…} 这种方式。 要使用LIKE语句该怎么写? 2、有两种使用LIKE的方法。(推荐使用)第一种方法是,在Java代码中添加SQL通配符。 示例一: 01.StringwildcardName = "%Smi%"; 02.List names = mapper.selectLike(wildcardName); 01.

企业级JAVA高级开发技术实战

关于举办企业级JAVA高级开发技术实战 培训班的通知 一、培训收益 通过此次课程培训,可使学习者获得如下收益: 1.掌握JavaSE的异常处理方法; 2.掌握多线程基础知识; 3.掌握IO系统、网络编程、Java反射机制、JVM性能调优; 4.理解JavaEE,EJB、JMS,Java语言的高级特征; 5.了解GoF的设计模式、Spring AOP、WebService与CXF。 二、培训特色 1.理论与实践相结合、案例分析与行业应用穿插进行; 2.专家精彩内容解析、学员专题讨论、分组研究; 3.通过全面知识理解、专题技能和实践结合的授课方式。

四、授课专家 刘老师有15年JAVA开发经验,9年授课经验. 精通J2EE多层架构和多种设计模式,熟悉Struts、MyBatis、Hibernate、Spring、Spring MVC、Android、H5、Jquery Mobile、AngularJS、Bootstrap等多种开源框架, 对源码有一定的理解. 熟悉 WebLogic, JBoss 容器并发集群的使用, 熟悉WebService、CXF、RESFul、UML、SVN、EasyUI、Flex、Lucene 等技术。长期专注于J2EE系统的分析与设计,亲身参与多个J2EE项目研发和应用系统升级,并主导系统架构设计,有着丰富的系统分析设计工作经验 张老师天津大学软件工程硕士,10多年的IT领域相关技术研究和项目开发工作,在长期软件领域工作过程中,对软件企业运作模式有深入研究,熟悉软件质量保障标准ISO9003和软件过程改进模型CMM/CMMI,在具体项目实施过程中总结经验,有深刻认识。通晓多种软件设计和开发工具。对软件开发整个流程非常熟悉,能根据项目特点定制具体软件过程,并进行项目管理和监控,有很强的软件项目组织管理能力。对C/C++ 、HTML 5、Hadoop、java、java EE、android、IOS、大数据、云计算有比较深入的理解和应用,具有较强的移动互联网应用需求分析和系统设计能力,熟悉Android框架、IOS框架等技术,了解各种设计模式,能在具体项目中灵活运用。 龚老师企业级J2EE专家,博士,北京理工大学软件研究所计算机应用技术专业。在软件行业工作近二十年,近50多个大中型项目的主持、管理、开发经验。主要学术成果: 近年来先后在国内外重要刊物发表论文20多篇,多篇被EI收录,出版著作4部。参与完成自然科学基金项目2项,参与纵向课题5项,主持横向科研项目5项。

mybatis中文版教程

MyBatis Spring1.0.0-RC3 参考文档 MyBatis 社区(https://www.360docs.net/doc/1e2511029.html,) Copyright ? 2010 本文档的拷贝仅允许您个人使用或分发给其他用户,但是不能收取任何费用,后期的发布无论是印刷版或电子版,也会进行版权声明。 本文档由南磊(nanlei1987@https://www.360docs.net/doc/1e2511029.html,)翻译

目录 第一章介绍 (3) 1.1 整合动机 (3) 1.2 要求 (3) 1.3 感谢 (3) 第二章入门 (4) 2.1 安装 (4) 2.2 快速创建 (4) 第三章SqlSessionFactoryBean (6) 3.1 创建 (6) 3.2 属性 (6) 第四章事务 (8) 4.1 标准配置 (8) 4.2 容器管理事务 (8) 第五章使用SqlSession (9) 5.1 SqlSessionSupport (9) 5.2 SqlSessionTemplate (9) 第六章MapperFactoryBean (11) 6.1 创建 (11) 6.2 注入映射器 (11) 6.3 自动配置 (12) 第七章使用MyBatis API (13) 第八章示例代码 (14)

第一章介绍 1.1 整合动机 正如第二版,Spring仅支持iBatis2。那么我们就想将MyBatis3的支持加入到Spring3.0(参考Spring的Jira的问题)中。不幸的是,Spring 3.0的开发在MyBatis 3.0官方发布前就结束了。因为Spring开发团队不想发布一个基于非发行版的MyBatis的整合支持,那么Spring 官方的支持就不得不等到至少3.1版本了。要在Spring中支持MyBatis,MyBatis社区认为现在应该是自己团结贡献者和有兴趣的人一起来开始进行Spring和MyBatis整合的时候了。 这个小类库就来创建丢失的粘贴Spring和MyBtatis这两个流行框架的胶水。减少用户不得不来配置MyBatis和Spring 3.X上下文环境的样板和冗余代码。它还透明地增加了Spring 对MyBatis事务的支持。 1.2 要求 在开始阅读本手册之前,很重要的一点是你要熟悉Spring和MyBatis这两个框架还有和它们有关的术语,本手册不会提供二者的背景内容,基本安装和配置教程。 和MyBatis一样,MyBatis-Spring也需要Java 5或更高版本。 1.3 感谢 非常感谢那些使得本项目成为现实的人们(按字母顺序排序)。Eduardo Macarron,Hunter Presnall和Putthibong Boonbong的编码工作,测试和文档修改;Andrius Juozapaitis,Giovanni Cuccu,Raj Nagappan和Tomas Pinos的贡献;而Simone Tripodi发现了这些人并把他们带入项目之中。没有他们的努力,这个项目是不可能存在的。

MyBatis学习 之三动态SQL语句

MyBatis学习之三动态SQL语句 三、动态SQL语句 MyBatis学习之一、MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习之二、SQL语句映射文件(1)resultMap MyBatis学习之二、SQL语句映射文件(2)增删改查、参数、缓存 MyBatis学习之三、动态SQL语句 MyBatis学习之四、MyBatis配置文件 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息。使用Oracle的序列、mysql的函数生成Id。这时我们可以使用动态sql。 下文均采用mysql语法和函数(例如字符串链接函数CONCAT)。 3.1 selectKey 标签 在insert语句中,在Oracle经常使用序列、在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键。使用myBatis的selectKey标签可以实现这个效果。 下面例子,使用mysql数据库自定义函数nextval('student'),用来生成一个key,并把他设置到传入的实体类中的studentId属性上。所以在执行完此方法后,边可以通过这个实体类获取生成的key。 select nextval('student') INSERT INTO STUDENT_TBL(STUDENT_ID, STUDENT_NAME, STUDENT_SEX, STUDENT_BIRTHDAY, STUDENT_PHOTO, CLASS_ID, PLACE_ID) V ALUES (#{studentId}, #{studentName}, #{studentSex}, #{studentBirthday}, #{studentPhoto, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler}, #{classId}, #{placeId}) 调用接口方法,和获取自动生成key StudentEntity entity = new StudentEntity(); entity.setStudentName("黎明你好"); entity.setStudentSex(1); entity.setStudentBirthday(DateUtil.parse("1985-05-28")); entity.setClassId("20000001"); entity.setPlaceId("70000001"); this.dynamicSqlMapper.createStudentAutoKey(entity); System.out.println("新增学生ID: " + entity.getStudentId()); selectKey语句属性配置细节: 属性描述取值keyProper ty selectKey 语句生成结果需要设置的属性。 resultTyp e 生成结果类型,MyBatis 允许使用基本的数据类型,包括String 、int 类型。 order 1:BEFORE,会先选择主键,然后设置keyProperty,再执行insert 语句; 2:AFTER,就先运行insert 语句再运行selectKey 语句。 BEFORE AFTER

黑马程序员mybatis教程第二天:延迟加载

延迟加载 什么是延迟加载 resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。 需求: 如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。 延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。 使用association实现延迟加载 需求 查询订单并且关联查询用户信息 mapper.xml 需要定义两个mapper的方法对应的statement。 1、只查询订单信息 SELECT * FROM orders 在查询订单的statement中使用association去延迟加载(执行)下边的satatement(关联查询用户信息) 2、关联查询用户信息 通过上边查询到的订单信息中user_id去关联查询用户信息

使用UserMapper.xml中的findUserById 上边先去执行findOrdersUserLazyLoading,当需要去查询用户的时候再去执行findUserById,通过resultMap的定义将延迟加载执行配置起来。 延迟加载resultMap 使用association中的select指定延迟加载去执行的statement的id。

mybatis教程从入门到精通

mybatis教程从入门到精通 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到sessionfactory. 2. 由sessionfactory 产生session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为MyBaits 的dynamic web project 1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将mybatis- 3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到web工程的lib 目录. 3. 创建mysql 测试数据库和用户表,注意,这里采用的是utf-8 编码 创建用户表,并插入一条测试数据 程序代码程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'); 到此为止,前期准备工作就完成了。下面开始真正配置mybatis项目了。 1. 在MyBatis 里面创建两个源码目录,分别为src_user,test_src, 用如下方式建立,鼠标右键点击JavaResource. 2. 设置mybatis 配置文件:Configuration.xml, 在src_user目录下建立此文件,内容如下:

MyBatis基础知识

1、#{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换。 #{}是sql的参数占位符,Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; ${}是Properties文件中的变量占位符,Mybatis在处理${}时,就是把${}替换成变量的值。使用#{}可以有效的防止SQL注入,提高系统安全性。 2、MyBatis是如何进行分页的? Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。 分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 3、在mapper中如何传递多个参数? 第一种:使用#{0},#{1}... mapper层: public selectUser(String username, String password); mapper.xml层: //对应的xml,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。 第二种:使用@param注解: mapper层: public selectUser(@param("username")String username,@param("password")String password); mapper.xml层: 4、Mybatis都有哪些Executor执行器?它们之间的区别是什么? Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。 SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。

mybatis-3-mapper

>

SSM基础框架搭建(SpringMVC+Spring+Mybatis)

SSM基础框架搭建(SpringMVC+Spring+Mybatis) SSM框架简述 到现在用了SSM框架也有一段时间了,对于基础的使用已经基本习惯,这段时间也多多少少搭了很多遍基础框架,当然每一次的搭建都会比原先搭建的东西更多些,也会更加完善,我相信大家也会从搭建的过程中成长去学到很多东西,SSM框架网上也有很多教程,不过我相信每个编写以及阅读的人总会从相似的文章中学到不同的东西. SSM框架基础概念 Spring 这里不得不说Spring非常强大,Spring拥有这IOC(控制反转,依赖注入)和AOP(面向切面编程)这两个强大的功能,这两个功能使框架足够的解耦,通过工厂模式和bean的配置完成对象的注入并且由bean生成的对象是单例的 SpringMVC SpringMVC分离了控制器,验证器,Servlet分发器,模型对象等 Mybatis Mybatis解除了程序与代码的耦合度,在一定程度上简化了sql的管理,只需要在XML中进行相应SQL的编写即可,Mybatis提供了相应的映射,配置起来更加容易 SSM基础框架搭建 这里就直接介绍SSM框架如何搭建了,至于环境配置和MAVEN项目的创建可以参考我的博客,也可以参考环境搭建,MAVEN项目搭建,下面开始搭建的教程,可能是对于上文链接博客的整合的完善与一些细微错误的纠正吧。 引入相关的JRA包 4.0.2.RELEASE 3.2.6 1.7.7 1.2.17 junit junit 4.11

javaweb开发要学习的所有技术和框架总结:

学习javaweb开发要学习的技术和框架总结: 前言:当初想学习javaweb开发的时候,希望能够全方面地学习(这样找工作时就胸有成足了)。但是对这个根本不理解,又不认识从事这方面的熟人,所以学习起来无从下手。经过了一年的‘死’学习,从网上,从书本,从视频里面深入了解了java。想从事java的朋友,只要把这些技术全学会了,哪就业肯定没有问题了。 前端技术: HTML, CSS, JA V ASCRIPT, JQUERY, AJAX HTML “超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 超文本标记语言的结构包括“头”部分(外语:Head)、和“主体”部分(外语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。 CSS 级联样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。 JavaScript JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。 jQuery jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多)。jQuery在2006年1月由美国人John Resig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由Dave Methvin率领团队进行开发。如今,jQuery已经成为最流行的javascript库,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。

Mybatis-3.3.0官方文档-中文.pdf

来获取。

Copyright ? 2010–2015 https://www.360docs.net/doc/1e2511029.html,. All rights reserved.

XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务范围和控制方式的事务管理器(TransactionManager)。XML 配置文件的详细内容后面再探讨,这里先给出一个简单的示例: 当然,还有很多可以在XML 文件中进行配置,上面的示例指出的则是最关键的部分。要注意 XML 头部的声明,用来验证 XML 文档正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则是包含一组 mapper 映射器(这些 mapper 的XML 文件包含了 SQL 代码和映射定义信息)。 不使用 XML 构建 SqlSessionFactory 如果你更愿意直接从 Java 程序而不是 XML 文件中创建 configuration,或者创建你自己的 configuration 构建器,MyBatis 也提供了完整的配置类,提供所有和 XML 文件相同功能的配置项。

注意该例中,configuration 添加了一个映射器类(mapper class)。映射器类是 Java 类,它们包含 SQL 映射语句的注解从而避免了 XML 文件的依赖。不过,由于 Java 注解的一些限制加之某些 MyBatis 映射的复杂性,XML 映射对于大多数高级映射(比如:嵌套Join 映射)来说仍然是必须的。有鉴于此,如果存在一个对等的 XML 配置文件的话,MyBatis 会自动查找并加载它(这种情况下,BlogMapper.xml 将会基于类路径和 BlogMapper.class 的类名被加载进来)。具体细节稍后讨论。 从 SqlSessionFactory 中获取 SqlSession 既然有了 SqlSessionFactory ,顾名思义,我们就可以从中获得 SqlSession 的实例了。SqlSession 完全包含了面向数据库执行SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如: 诚然这种方式能够正常工作,并且对于使用旧版本 MyBatis 的用户来说也比较熟悉,不过现在有了一种更直白的方式。使用对于给定语句能够合理描述参数和返回值的接口(比如说BlogMapper.class),你现在不但可以执行更清晰和类型安全的代码,而且还不用担心易错的字符串字面值以及强制类型转换。 例如: 现在我们来探究一下这里到底是怎么执行的。

JavaEE测试题带答案教学提纲

1.在Java中的变量命名规范中,下面命名正确两项的是( ) (选择两项) a)¥money b)$int c)int d)*i 2.绘制流程图时,下面()代表判断和分支。(选择一项) a)矩形 b)椭圆 c)菱形 d)圆形 3.在Java环境中给出如下代码,编译运行的输出结果是()。 public class Test{ intx=1; inty=2; public int cal(intx,inty){ int z=x+y; return z; } public static void main(String args[]){ Test d = newTest(); z=d.cal(d.x,d.y); System.out.println(z); } }(选择一项) A) 3 B) 0

C) 编译错误 D) 编译通过,但运行时出错 4.下列选项中关于枚举说法错误的是()。(选择一项) a)枚举类型是从JavaSE5.0开始引入的一种新类型 b)枚举类型使用关键字enum定义 c)枚举是指由一组固定的常量组成的类型 d)在枚举中,除了可以定义枚举常量以外不能出现其他成员 5. 在Java中,以下关于多态说法错误的是()。(选择一项) a)实现多态的一个前提是要有继承关系 b)将一个父类的引用指向一个子类对象,要进行强制类型转换 c)父类引用变量指向其子类对象是实现多态的一个条件 d)使用多态可以提高代码的可扩展性和可维护性 6. 在Java中,如下代码段的输出结果为()。 Strings="hello"; s.substring(2,4); System.out.println(s.length());(选择一项) a) 5 b) 2 c) 4 d) 3 7. 在Java中,如下代码的输出结果是()。 public static void main(String[]args){ char c[]={'1','2','3','4'};

mybatis入门教程(一)(超简单)

mybatis 第一天mybatis的基础知识 课程安排: mybatis和springmvc通过订单商品案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理(掌握) mybatis入门程序 用户的增、删、改、查 mybatis开发dao两种方法: 原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握) mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件SqlMapConfig.xml mybatis核心: mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis的动态sql(掌握) 第二天:高级知识 订单商品数据模型分析 高级结果集映射(一对一、一对多、多对多) mybatis延迟加载 mybatis查询缓存(一级缓存、二级缓存) mybaits和spring进行整合(掌握) mybatis逆向工程 1对原生态jdbc程序中问题总结 1.1环境 java环境:jdk1.7.0_72 eclipse:indigo mysql:5.1 1.2创建mysql数据

sql_table.sql:记录表结构 sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本 1.3jdbc程序 使用jdbc查询mysql数据库中用户表的记录。 创建java工程,加入jar包: 数据库驱动包(mysql5.1) 上边的是mysql驱动。 下边的是oracle的驱动。 程序代码: 1.4问题总结 1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。 设想:使用数据库连接池管理数据库连接。 2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。 设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。 3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。设想:将sql语句及占位符号和参数全部配置在xml中。

【黑马程序员】实现简单的mybatis的入门程序

【黑马程序员】实现简单的mybatis 的入门程序 MyBatis 是一个优秀的持久层框架,它对jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection 、创建statement 、手动设置参数、结果集检索等jdbc 繁杂的过程代码。Mybatis 通过xml 或注解的方式将要执行的各种statement (statement 、preparedStatemnt 、 CallableStatement )配置起来,并通过java 对象和statement 中的sql 进行映射生成最终执行的sql 语句,最后由mybatis 框架执行sql 并将结果映射成java 对象并返回。 这里我们使用mybatis 来实现一个简单的入门案例 第一:搭建环境 1.jar 包 mybaits 的代码由https://www.360docs.net/doc/1e2511029.html, 管理,下载地址地址: https://https://www.360docs.net/doc/1e2511029.html,/mybatis/mybatis-3/releases 。我们用到的jar 包如下: mybatis-3.2.7.jar (mybatis 的核心包) lib 文件夹下的所有jar (mybatis 的依赖包) mysql-connector-java-5.1.7-bin.jar (数据库驱动包,这里是mysql 的驱动包) 2. 数据库 创建数据库和表及部分基础数据,这里我们只用到了用户表,所以只需要创建用户表即可,执行的sql 如下 01 02 03 04 05 06 DROP TABLE IF EXISTS `user `; CREATE TABLE `user ` ( `id` int (11) NOT NULL AUTO_INCREMENT, `username` varchar (32) NOT NULL COMMENT '用户名称', `birthday` date DEFAULT NULL COMMENT '生日', `sex` char (1) DEFAULT NULL COMMENT '性别',

day19-MyBatis入门概论

MyBatis入门 一课程介绍 ●MyBatis概述(★★) 1 认识框架 2 什么是ORM 3 MyBatis的认识 ●MyBatis完成CRUD(★★★★★) 1 MyBatis准备工作 2 MyBatis核心配置文件的认识与设置 3 对象与关系的映射(ORM) 4 完成数据的CRUD ●工具类抽取(★★★★★) 1 MyBatis的核心对象 2 抽取MyBatis工具类 3 抽取properties配置文件 ●MyBatis使用细节(★★★★) 1 添加时拿到返回的主键 2 查看MyBatis运行日志 3 在Mybatis中为一个类取别名 4 列名与属性名不对应的解决方案 ●网页完成CRUD 二MyBatis概述 MyBatis是一个ORM的数据库持久化框架。 很多同学一看这个概念,一定会想:什么是ORM?什么叫数据库持久化?什么又叫框架?好了,在正式讲MyBatis之前,咱们就先把ORM与框架的概念给大家讲一下。

2.1 什么叫数据库持久化? 数据持久化就是将内存中的数据模型转换为存储模型。 常见的数据持久化有:磁盘持久化和数据库持久化。 数据库持久化是数据持久化的其中一种,就是把内存中的数据保存到数据库中。 Java中最简单的就是使用jdbc来完成数据库持久化: 2.2 什么是框架 带着问题来研究:什么是框架?框架从何而来?为什么使用框架? 什么是框架 框架(Framework)是一个框子——指其约束性,也是一个架子——指其支撑性。 IT语境中的框架,特指为解决一个开放性问题(而不是具体问题)而设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。

《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》_课后习题

第一章 【思考题】 1、请简述Spring框架的优点。 2、请简述什么是Spring的IoC和DI。。 【答案】 1、Spring框架的优点如下: (1)非侵入式设计:Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。 (2)方便解耦、简化开发:Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器管理,大大的降低了组件之间的耦合性。 (3)支持AOP:Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性。 (4)支持声明式事务处理:只需要通过配置就可以完成对事务的管理,而无需手动编程。 (5)方便程序的测试:Spring提供了对Junit4的支持,可以通过注解方便的测试Spring 程序。 (6)方便集成各种优秀框架:Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持。 (7)降低了Java EE API的使用难度:Spring对Java EE开发中非常难用的一些API(如:JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。。 2、IoC的全称是Inversion of Control,中文名称为控制反转。控制反转就是指在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转。 DI的全称是Dependency Injection,中文称之为依赖注入。它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。从Spring容器的角度来看,Spring 容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。

mybatis笔记(超详细全面)

1.Mybatis入门 从一个jdbc程序开始 public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //通过驱动管理类获取数据库链接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?charac terEncoding=utf-8", "root", "mysql"); //定义sql语句 ?表示占位符 String sql = "select * from user where username = ?"; //获取预处理statement preparedStatement = connection.prepareStatement(sql); //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值 preparedStatement.setString(1, "王五"); //向数据库发出sql执行查询,查询出结果集 resultSet = preparedStatement.executeQuery(); //遍历查询结果集 while(resultSet.next()){ System.out.println(resultSet.getString("id")+" "+resultSet.getString("username")); } } catch (Exception e) { e.printStackTrace(); }finally{ //释放资源 if(resultSet!=null){ try { resultSet.close(); } catch (SQLException e) {

相关文档
最新文档