JavaWeb学习之路——SSM框架之Mybatis(三)
前提:JavaWeb学习之路——SSM框架之Mybatis(二)
https://blog.****.net/kuishao1314aa/article/details/83270578
1.目录结构
2.目录解释:
src下:
pojo包:写java文件
serverlet包:写serverlet文件
service包:写接口和它的实现类
mapper包:用来配置数据库文件
WebContent:项目的根目录,放置jsp文件和资源文件包
3.路径解释
绝对路径:路径中以/开头的都叫做全路径,从根目录(WebContent)出发找到其他资源的过程
相对路径:不以/开头都是相对路径,相对路径是从当前资源出发找到其他资源的路径
请求转发/表示WebContent目录,重定向<a herf="">、src下/表示tomcat的webapps文件夹根目录
4.log4j
(1)介绍
一个apache推出的开源免费日志处理的类库。
在项目中编写System.out.println();输出到控制台,项目发布到tomacat后,没有控制台,不容易观察输出结果。
log4j作用,不仅能把内容输出到控制台,还能输出到文件
使用方法:
导入log4j-xxx.jar;
在src下新建log4j.properties(不能改变路径和名称);
(2)配置文件
log4j输出级别:五个级别——fatal(致命错误)>error(错误)>warn(警告)>info(普通信息)>debug(调试信息)
在log4j第一行中控制输出级别、输出目的地,写谁往哪里输出,先下面为往控制台和文件输出普通信息
%C为输出类信息,
log4j.rootCategory=INFO, CONSOLE,LOGFILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %d{YYYY-MM-DD hh:mm:ss} %p %m %n
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%C %m %L %n
输出结果:
INFO级别:
DEBUG级别:
(3)控制台显示输出
在mybatis全局配置文件中通过<settings>标签来控制mybatis全局开关
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
前提:src下有配置文件log4j.properties,lib下有log4j.jar
可以控制输出内容级别,将mapper.xml中a.b.c的内容设置为DEBUG类别
包级别,<mapper > namespace属性中最后的类名
log4j.logeer.a.b.c=DEBUG
5.mybatis参数传递
(1).parameterType属性:在xxxMapper.xml中设置相应的参数类型、sql语句中写参数位置,
用parameterType表示参数,#{0}表示获取参数内容,里面从0开始,也可以使用#{param1}表示第一个参数,只有一个参数
则对#{}内容没有要求
<select id="selById" resultType="com.likui.pojo.Flower" parameterType="int">
select * from flower where id=#{0}
</select>
(2).SqlSession的selectList()和selectOne()的第二个参数和selectMap()的第三个参数都表示方法的参数
传递参数来返回对应结果:
Flower flower=session.selectOne("a.b.selById",2);
System.out.println(flower.getId()+"\t\t"+flower.getName()+"\t\t"+
flower.getPrice()+"\t\t"+flower.getProduction());
控制台输出DEBUG:
(3).#{}和${}区别
#{}java中使用的是参数内容,支持索引、param1获取指定位置,并且SQL语句中使用?占位符处理
${} java文件中使用的字符串拼接,不适用?占位符,默认找${}中的内容的get/set方法,如果使用的是数字,则不表示位置
比较常用的是#{}
<select id="selById" resultType="com.likui.pojo.Flower" parameterType="com.likui.pojo.Flower">
select * from flower where id=${id}
</select>
Flower flower2=new Flower();
flower2.setId(1);
Flower flower=session.selectOne("a.b.selById",flower2);
(4).传递多个参数类型
使用Map集合或者对象来传递:
xml文件中配置参数
map中#{}中写map对应的key值
<select id="c" resultType="com.likui.pojo.Flower" parameterType="map">
select * from flower where id=#{id} and name=#{name}
</select>
java文件中传递参数:
Flower flower2=new Flower();
flower2.setId(1);
flower2.setName("牡丹");
Map<String, Object> map=new HashMap<>();
map.put("id", flower2.getId());
map.put("name", flower2.getName());
Flower flower=session.selectOne("a.b.c",map);
6.别名-typeAliases
在mybatis.xml数据库配置文件中写上别名:
<typeAliases>
<typeAlias type="com.likui.pojo.Flower" alias="flo"/>
</typeAliases>
然后在mapper.xml数据库语句中可以用上类的别名来代替相应类
<select id="c" resultType="flo" parameterType="map">
select * from flower where id=#{id} and name=#{name}
</select>