发表于: 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标签会去除第一个条件的andor-->
       <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


返回列表 返回列表
评论

    分享到