-
乱码排查: 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" /> useGeneratedKeys属性设为true,可获取自增长的id查看全部
-
判断是否是好代码:查看全部
-
resultMap与resultType属性都是表示结果集与java对象之间的关系.但要注意两者区别. 如果用了resultType属性就不用在Sql配置文档中配置<resultMap>标签. resultType映射的原理是:如果映射到自定义类,那么javabean中的属性名与查询出来的列名相同的时候就表示他们有映射关系(大小写不敏感,也不用考虑同名列名的问题),结果集就会放进这些javabean的属性中. resultType也可以映射到Map中,那么查询的列名就是key值,数据就是value值. resultMap属性="要映射的<resultMap>标签的id值" resultType属性="要映射的java类" <select id="find" resultMap="resultMessage"> select * from message </select> <select id="find" resultType="com.imooc.Message"> select * from message </select> //此时就不需要配置<resultMap>标签.查看全部
-
resultMap:在XML配置的map,若不配置,只能按列名与对象的属性名来对应填充,不区分大小写 resultType:Java对象 parameterMap:不推荐使用 #{}:有预编译,可防sql注入, ${}:无预编译,直接拼接参数,字符串无引号;查看全部
-
resultMap:在XML配置的map,若不配置,只能按列名与对象的属性名来对应填充,不区分大小写 resultType:Java对象 parameterMap:不推荐使用 #{}:有预编译,可防sql注入, ${}:无预编译,直接拼接参数,字符串无引号;查看全部
-
容易混淆的概念查看全部
-
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常用的标签,其中select查询时不应该使用*号而是使用各列名,sql用来定义常量,多用于定义经常使用到的列名,然后通过include标签引用查看全部
-
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="andor" suffixOverrides=","> //sql语句 </trim> 提示:prefix="where" prefixOverrides="andor"等价于<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常用标签 用到sql标签时 需要配合使用include标签查看全部
-
在子表类的Sql配置文档的<resultMap>标签下需要添加一个<association>标签来指明当前子表这个类里包含着一个主表类类型的成员变量. 其中<assoication>标签有property、column(可无)、javaType属性、resultMap属性. property属性指明在子表类中的主表类类型的成员变量名. column属性指明数据库中的字段. javaType属性指明主表类的类名. resutlMap属性指明主表类的<resultMap>标签的id属性的属性值. 在<association>标签下有<id>与<result>子标签,他们都有property与column属性.来表明主表类的所有成员变量.或者直接用resultMap属性直接替代,就可以不用写子标签. (在子表的Sql配置文件) <resultMap type="com.imooc.Content" id="Content"> <id column="ID" jdbcType="Integer" property="id"/> <result column="Content" jdbcType="VARCHAR" property="content"/> <result column="CommandId" jdbcType="Integer" property="commandId"/> <association property="command" javaType="com.imooc.Command"> <id column="CID" property="id"/> <result column="name" property="name"/> <result column="description" property="description" /> </association> </resultMap> 等于: <resultMap type="" id=""> <id column="" jdbcType="" property=""/> <result column="" jdbcType="" property=""/> <association property="" resultMap="" /> </resultMap>查看全部
-
且当select u.name from User as u,column属性不能写成u.name,不能带表名.因为在jdbc的ResultSet接口根据列名获取数据的方法中,根据的列名是没有表名前缀的.因此表名前缀会失效. 所以在Mybatis一对多关联的Sql配置文档下的<select>标签的sql语句不能出现两个字段名相同的查询.否则在相关联的不同Sql配置文件的<resultMap>标签下的其他标签的column属性就会重复,Mybatis并不知道这个重复的字段是属于哪个表的.所以要不起别名,要不设计数据库不同表之间不能出现同名的列名. 要不设置别名: <select id="getMessageCom" resultMap="resultMapCom"> select a.id as cid,a.name,a.description,b.id,b.content from command as a left join content as b on a.id=b.commandid </select> 要不就设计表时列名不重复: <select id="getMessageCom" resultMap="resultMapCom"> select a.cid,a.name,a.description,b.id,b.content from command as a left join content as b on a.id=b.commandid </select>查看全部
-
1.<select>标签中查询出来的类名要和<resultMap>中的column属性值一致。但规定<resultMap>的column属性值不能写成“表名.列名”,而是直接写数据库中的列名或别名。 2.如果两个表中都有ID属性,但因为规定<resultMap>的column属性值不能写成“表名.列名”,这时候要怎么办呢?可以用别名来代替。 在主表类的Sql配置文档的<resultMap>标签下需要添加一个<collection>标签来指明我当前主表这个类里包含着子表类的集合.其中<collection>标签下存在property属性与resultMap属性.没有column属性,因为在数据库表中不会额外创建一个此集合的字段.property属性表示主表类中哪个属性名,resultMap属性要指明包含的子表类的Sql配置文件的<resultMap>标签的id值. <resultMap type="com.imooc.Command" id="Command"> <id column="CID" jdbcType="Integer" property="id"/> <result column="Name" jdbcType="VARCHAR" property="name"/> <result column="Description" jdbcType="VARCHAR" property="description"/> <collection property="contentlist" resultMap="Content.content"/> //因为是跨文件所以要namespace.id </resultMap> 特别要注意的是column属性对应数据库表的字段名意思是与select子句选择的字段名匹配起来.如果select u.name as username from User as u; 虽然在数据库表中的字段名是name,但是select子句为name字段设置了别名,即username,因此在<resultMap>标签下的<result>标签的column属性要等于username而并非name,是与select子句中的名称匹配,要注意当设置了别名那么column属性也为别名查看全部
-
如何在xml的配置文件中反应表结构之间的对应关系呢? 在java中,通过主表的实体类中包含子表的集合来反应一对多的关系,在配置文件中同样是通过集合来配置这种关系的。在主表的映射文件中使用<collection>标签来指定子表的对应关系以及子表的引用,使用resultMap属性来指定子表映射关系的文件,格式是namespace.子表对应关系的id。那么新的问题来了,主表中的id与子表中的id,同时映射到结果集resultMap就会产生问题,所以就需要给任意一个id起一个别名。注意:给表起别名,以及字段的引用,打印出的结果是不包含表名的,比如说 a.id,打印出的结果是没有a的,所以a.id与b.id映射的都是一个属性,所以给字段起一个别名,那么字段名就会改变,配置映射文件的时候,注意数据库字段与java实体类的属性的对应关系。查看全部
举报
0/150
提交
取消