发表于: 2017-11-21 22:19:09
1 687
今天完成的事情:
①动态SQL的学习.
set标签和where标签if标签的联合使用,满足条件才会进行拼接.
<update id="updateStudent" parameterType="Student">
UPDATE `t_student`
<set><!--set标签会去除只有最后一个条件的,-->
<if test="name!= null and name!=''">name = #{name},</if>
<if test="age>0">age = #{age},</if>
</set>
<where><!--where标签会去除第一个条件的and和or-->
<if test="id!=null">AND id=#{id}</if>
</where>
</update>
对应的接口方法:
//更新
void updateStudent(Student student)throws Exception;
foreach标签的使用:
<!--foreach模式将一个数组传入-->
<delete id="deleteStudent" parameterType="_long">
DELETE FROM `t_student` WHERE id IN
<foreach collection="array" open="(" separator="," close=")" item="arr">
#{arr}
</foreach>
</delete>
</mapper>
对应的接口方法:
//删除
void deleteStudent(long []arr)throws Exception;
因为定义的SQL是使用in关键字进行多个ID的数据进行删除,所以接收的数据有单个long值变为long[]数组.在xml配置中parameterType(参数类型)依然应该为_long形态.
当然动态SQL还有chose这些暂时没用到,之后再去熟练应用.
②Mybatis的另外一种配置方法,不使用XML.
package com.mybatis.mapper;
import com.mybatis.bean.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* @author gacl
* 定义sql映射的接口,使用注解指明方法要执行的SQL
*/
public interface UserMapperI {
//使用@Insert注解指明add方法要执行的SQL
@Insert("insert into t_student(name, age) values(#{name}, #{age})")
public int add(Student student);
//使用@Delete注解指明deleteById方法要执行的SQL
@Delete("delete from t_student where id=#{id}")
public int deleteById(long id);
//使用@Update注解指明update方法要执行的SQL
@Update("update t_student set name=#{name},age=#{age} where id=#{id}")
public int update(Student student);
//使用@Select注解指明getById方法要执行的SQL
@Select("select * from t_student where id=#{id}")
public Student getById(long id);
//使用@Select注解指明getAll方法要执行的SQL
@Select("select * from t_student")
public List<Student> getAll();
}
使用注解的方式给接口添加需要执行的SQL,一样可以不用自己写Impl,通过SqlSession.getMapper(Usermapper.class)获得接口的实例即可,不过这种方式有点不好,
使用Mybatis的本质是为了让SQL语句脱离JAVA,这样又让SQL语句回到接口中,如果要使用动态SQL就会变的非常麻烦,所以在实际项目中还是推荐使用XML配置的方式.
③log4j
log4j看了一下教程,东西有点多,没细致看,只是把需要使用的东西看了一下并上代码进行了实操.
log4j.rootLogger = debug,stdout,D,E
### OFF> FATAL > ERROR > WARN > INFO > DEBUG > ALL ###
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/log.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
这是标准的log4j的配置文件,log4j.properties,设置了2个级别,一个是DEBUG,一个是ERROR.
package com.mylog4j;
import org.apache.log4j.Logger;
/**
* @author Arike
* Create_at 2017/11/21 20:39
*/
public class Test {
private static Logger logger = Logger.getLogger(Test.class);
/**
* @param args
*/
public static void main(String[] args) {
// System.out.println("This is println message.");
// 记录debug级别以上的信息
logger.debug("This is debug message.");
// 记录info级别以上的信息
logger.info("This is info message.");
// 记录error级别以上的信息
logger.error("This is error message.");
}
}
这是测试.
这是log.log里的数据,DEBUG级别之上的数据全部打印到了里面.
在配置文件中ERROR就是最高级别了,所以只会打印ERROR的数据.
@Test
public void insertStudent() throws Exception {
Student s =new Student("悟饭",18);
sm.insertStudent(s);
logger.info("添加的ID为:"+s.getId());
}
在测试类中使用logger.info发现只会打印DEBUG的信息到日志文件中.
明天计划的事情:
开始Sping的学习
遇到的问题:
在测试类中发现不能使用logger.debug ,logger.error这个方法.只能调用info,还有
private Logger logger = Logger.getLogger("test");
getLogger()方法里需要传入的参数是什么?
收获:
学会了使用 动态SQL在XML中进行SQL语句拼接
学会了log4j的基本使用.
禅道:http://task.ptteng.com/zentao/project-burn-414.html
评论