SpringMVC + Mybatis 框架

慕课网视频:搞定Java SSM框架开发 http://www.imooc.com/course/programdetail/pid/59




为什么选用SpringMVC:轻量化高性能!
1、简单易用,学习成本低,开发效率高;
2、性能灵活,优于Struts;
3、大众框架,遇到困难网上有很多的解决方案。


为什么选用Mybatis:开源的优秀持久层框架!
1、简单易用,动态SQL,会SQL语句就会用Mybatis;
2、灵活,完全自己手写SQL语句,面向配置的编程;
3、SQL和代码的分离,提高了可维护性;
4、良好支持复杂数据映射;
5、大众框架,遇到困难网上有很多的解决方案。
Mybatis特点
1.SQL语句与代码分离 优点:便于管理和维护 缺点:不便于调试,需要借助日志工具获得信息
2.用标签控制动态SQL的拼接 优点:用标签代替编写逻辑代码 缺点:拼接复杂SQL语句时,没有代码灵活,比较复杂
3. 结果集与Java对象的自动映射 优点:保证名称相同即可自动映射 缺点:对开发人员所写的SQL依赖性很强
4. 编写原生SQL 优点:接近JDBC,很灵活 劣势:对SQL语句依赖程序很高;半自动;数据库移植不方便

Mybatis开发流程
Mybatis 开发采用DAO层映射机制,只需要简单的三步:
第一步:定义Mybatis的配置文件(可省略);
第二步:定义DAO类;
第三步:定义XML格式的SQL—Mapper文件。

Mybatis 常见问题解析
一、获取自增主键值: <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.imooc.bean.Command"> insert into command(name,description) values(#{name},#{description}) </insert> //解析:添加数据(在主外键的关系中)可以使用 useGeneratedKeys="true",可获取自增长的id,并配合keyProperty="id"(java中实体类的属性名)指定该对象的主键值。
二、找不到namespace.id的异常效果: 1、在Configuration.xml没有配置<mappers><mapper resource="*.xml"></mapper></mappers>; 2、在1的配置中或selectList("Message.queryMessageList",message);中,名字写错。
三、排查SQL语法错误:如果控制台出现SQL语句问题,复制到SQL软件上执行,若有参数,手动写上并执行。
四、不要过度使用${}。
五、乱码问题: 1. servlet传参时的编码:request.setCharacterEncoding("utf-8");或直接使用过滤器; 2. Java文件本身的编码; 3. 连接数据库的参数中,设定编码方式:jdbc:mysql://192.168.1.1:3306/cms?characterEncoding=utf-8 4. 数据库、表的编码; 5. 展示页面的编码:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 6. 浏览器编码问题等。

Mybatis 常用标签
Ps1: <where><if test=""></if>...</where>标签相当于“where 1=1 and...”,<where>标签和where 1=1不可共存,两者取其一即可。
Ps2: <select> select <include refid="columns"></include> from command </select> <sql id="columns">a.id C_ID,b.id,b.commandId</sql> //作用:增强了维护性,减少代码复用。
Ps3: //解析:<trim>标签在<select>/<update>等内使用。prefix在sql语句最前面加上,suffix在sql语句最后面加上,去掉sql语句最前面prefixOverrides,去掉sql语句最后面suffixOverrides。 <trim prefix="where" suffix="test" prefixOverrides="and|or" suffixOverrides=","> //sql语句 </trim> 提示:prefix="where" prefixOverrides="and|or"等价于<where>;prefix="set" suffixOverrides=","等价于<set>。
Ps4: <choose> <when test=""></when> <when test=""></when> <otherwise></otherwise> </choose> 理解1:if—else if—else 理解2:switch—case—case—default
Ps5: <collection property="主实体类中的List<子实体类>的对象名" resultMap="子xml中mapper中属性namespace名.resultMap的id名"/>//这条语句写在主xml<resultMap>中。 <association property="子实体类中的主实体类的对象名" resultMap="主xml中mapper中属性namespace名.resultMap的id名"/>//这条语句写在子xml<resultMap>中。

Mybatis 容易混淆的概念
一、resultMap和resultType:当配置resultType时,就不需要配置resultMap,看似resultType方便,但是会被受限制,没有resultMap开放多。 相同点:都是表示查询结果集的类型。 不同点:resultMap需要手动配置映射关系,而resultType是直接指定java类型或者自定义的实体类型,查询结果集的列名必须和实体属性名称一致(实体类:名称大小写可以忽略;java类型,如Map集合的key大小写要一致,尽量都大小写规范,如果不放心可以select ID id,...)。 优缺点: 1、resultType结果集列名要与java属性名一样,但是resultMap不受限制,因为resultMap有column来规定。 2、由于SQL类型与Java中类型部分不匹配,resultMap可以通过typeHandler=""来匹配(如:SQL中的0和1来表示java中的false和true;Date类型的转换),但是resultType无能为力。
二、parameterMap和patameterType: 表示传入参数的对应关系,前者不推荐使用,只是mybatis为了适应以前的版本。 提示:看到Map字眼的想到映射关系,看到Type字眼的想到类型。
三、#{}和${}: 相同点:都是用来作为占位符。 不同点:#{}在预编译的时候会被替换为?,而${}在预编译的时候直接将变量的值替换进去,而且没有引号(所以还要加上“'${...}'”),故一般都是用前者,个别情况会使用后者:如需进行排序,且排序字段为参数时可以使用${}(order by后面不喜欢被预编译,所以使用${}更为恰当)。
四、#{}和ognl:在#{}中如果是基本类型,其中的名称可以随便写(不推荐),但一般都用_parameter,因为值唯一,而ognl中必须写成_parameter的方式


Mybatis的增删改查视频: http://www.jikexueyuan.com/course/880_1.html?ss=2

设置parameterType的别名在Configuration.xml中typeAliases中配置:

1、id——在命名空间中唯一的标识符,可以被用来引用这条语句。
2、parameterType——将会传入这条语句的参数类的完全限定名或别名。
3、parameterMap——这是引用外部的parameterMap的已经被废弃的方法。使用内联参数映射和parameterMap属性。
4、resultType——语句返回值类型的整类名或别名。注意,如果是集合,那么这里填写的是集合的项的整类名或别名,而不是集合本身的类名。(resultType 与resultMap 不能并用)

MyBatis之增加、删除、修改http://blog.csdn.net/liaoxiaohua1981/article/details/6862649



应用log4j(日志)调试动态SQL
1、jar包和配置文件 2、log4j.properties
<1>log4j.rootLogger=DEBUG,Console:输出级别(级别<由低到高>debug/info/warn/error)和输出位置(控制台)
<2>log4j.appender.Console=org.apache.log4j.ConsoleAppender:配置这个类才会输出在控制台(可在别处)
<3>log4j.appender.layout=org.apache.log4j.PatternLayout:布局(按照自己的想法去输出)
<4>log4j.appender.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n: %d:产生日志的时间 [%t]:产生日志所处线程的线程名称 %-5p:输出日志的级别、 "5":代表输出的字符会占5位字符,不足则会用空格补齐; "-":指的是补齐的空格在右边,没有则在左边. [%c]:指输出这个日志时处于的那个类的全名,包括包名 %m:输出的时候附加的信息 %n输出换行
<5>log4j.logger.org.apache=INFO:为不同包配不同的级别,把总的覆盖,可看到自己想看的信息 log4j配置详解 一、log4j.rootLogger=INFO, stdout, R 第一个参数为等级,后面可跟一到多个参数,为输出的位置; 例句的意思为将等级为INFO的日志信息使用stdout和R进行输出,stdout和R可以自己命名; 等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,OFF是关闭,不输出任何信息,其他级别按这个顺序依次降低,如果 指定一个级别,如INFO,则比该级别高的信息都会输出































  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值