-
使用prepareStatement,对?占位的参数模糊查询 1. %通配符直接写在预准备的sql中,%和?需要使用mysql的字符串拼接(字符串之间用空格分割),例如, String sql = "select name from user where name like %?%";// 错误 String sql = "select name from user where name like '%' ? '%'";// 正确 2. %不写在预准备的sql中,写在要传入参数时 Sting sql = "select name from user where name like ?"; 传参数时:pStmt.setString(1,"%"+pareOfName+"%");查看全部
-
sql查询条件不定,使用PreparedStatement 在prepareStatement之前将sql语句拼接,将可能加上的参数放到容器中缓存查看全部
-
.....查看全部
-
.....查看全部
-
ognl2查看全部
-
ognl查看全部
-
Tag查看全部
-
一、获取自增主键值: <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. 浏览器编码问题等。查看全部
-
一、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的方式查看全部
-
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n //%d产生日志的时间, %t是产生日志所处的线程名称, %-5p输出日志的级别,将占5位字符,不足5位用空格填补,-指的是在右边补齐, %c你输出日志的包以及类的全名, %m是你附加的信息 %n是换行查看全部
-
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>中。查看全部
-
在子表类的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>查看全部
-
重要的地方查看全部
-
xml中如何反应一对多的关系? 主表里面包含子表的集合。 <conlection property="contentList" resultMap="CommandContent.Content"/> <result column="Description" jdbcType="VARCHAR" property="descrition"/> colunmn属性的值:表示数据库这边的列名 【但不是指的数据库中的列名,而是查询出来的结果集的列名】 【只要column属性有别名,那么相对应的xml配置文件中的column列的值也要带上别名。但!!!不包括前缀,例:a.ID test ,相对应的column属性值是test】 ------------------------------------------------------------------ 当两个表中有相同列名时,这时候不光要取前缀名, 更重要的是给两个列都取别名!!!程序才能区分哪个列 ----------------------------------------------------------------- property属性的值:表示对应的实体类中的字段 ------------------------------------------------ left join 无论子表有没有内容,主表都应该显示出来 <resultMap type='' id=''> <id column='select语句查询出的列名,如果列名取了别名,这里应该是别名' property=''/> <result column='' property='对应的实体的属性名'/> <!-- 一对多关系 --> <collection property='' resultMap='实体类所对应的结果集,跨文件,所以需要指定命名空间,语法是:namespace.resultMapId'/> </resultMap>查看全部
-
一个指定对应多条不同回复内容<br> 一对多的关系,一般拆分成两张表,这样就减少了冗余数据<br> ①表指令表:主键、name、description<br> ②表指令表对应的内容:主键、内容、指令表的主键(command_id)<br> 这样,一个指定就可以在②表找到所对应的多条内容 两种结构: ——————————①一条指令回复一组内容 ——————————②一条指令回复一组中的一个内容,在java代码中随机回复一条即可 dao层内容: ——————————————————————列表查询 ——————————————————————页面初始化 ——————————————————————微信对话查看全部
举报
0/150
提交
取消