发表于: 2019-05-28 22:09:11

2 591


今天完成的事情:

上午规范了所有的命名标准,驼峰命名法。改动的地方挺多且浪费时间。

昨天已经把依赖贴好了

首先在src目录下resources添加log4j.properties文件(Resource Bundile)

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

修改TestLog4j,并运行

1. 输出在控制台,并且格式有所变化,如图所示,会显示是哪个类的哪一行输出的信息
2. 不仅仅在控制台有输出,在把日志输出到了C:\项目\exercise spring mybatis\src\main\resources\\log4j.properties"这个位置

package test;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class TestLog4j {
//基于类的名称获取日志对象
   static Logger logger = Logger.getLogger(TestLog4j.class);
   public static void main(String[] args) throws InterruptedException {
PropertyConfigurator.configure("C:\\项目\\exercise spring mybatis\\src\\main\\resources\\log4j.properties");
     //logger.setLevel(Level.DEBUG);//设置日志输出级别
       //进行不同级别的日志输出
       for (int i = 0; i < 5000; i++) {
logger.trace("跟踪信息");
           logger.debug("调试信息");
           logger.info("输出信息");
           //Thread.sleep(1000);//便于观察日志输出前后的时间差
           logger.warn("警告信息");
           logger.error("错误信息");
           logger.fatal("致命信息");
       }
}
}

运行结果:

接下来演示xml格式进行配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

   <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
       <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="%d %-5p %c.%M:%L - %m%n"/>
       </layout>
   </appender>

   <!-- specify the logging level for loggers from other libraries -->
   <logger name="com.opensymphony">
       <level value="ERROR" />
   </logger>

   <logger name="org.apache">
       <level value="ERROR" />
   </logger>
   <logger name="org.hibernate">
       <level value="ERROR" />
   </logger>

   <!-- for all other loggers log only debug and above log messages -->
   <root>
       <priority value="ERROR"/>
       <appender-ref ref="STDOUT" />
   </root>

</log4j:configuration>

今天巩固了JDBC和template

首先在pom.xml贴入JDBC的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>exercise-jdbc-template</groupId>
   <artifactId>task1</artifactId>
   <version>1.0-SNAPSHOT</version>
   <dependencies>
   <!-- mysql驱动包 -->
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>8.0.15</version>
   </dependency>

   </dependencies>
</project>

jdbc的工作原理是:初始化驱动-进入数据库的连接-执行sql语句-得到并返回结果-释放资源并关闭连接

package project;

import java.sql.*;

public class Student3 {
public static void main(String[] args) {
//初始化驱动
       try {
//驱动类com.mysql.jdbc.Driver
           //就在mysql-connector-java-5.0.8-bin.jar中
           //如果忘记了第一个步骤的导包,就会报错
           Class.forName("com.mysql.jdbc.Driver");
       } catch (ClassNotFoundException e) {
e.printStackTrace();
       }
try {
//建立与数据库的Connection连接
           //这里需要提供;
           //数据库所处于的ip:127.0.0.1(本机)
           //数据库的端口号:3306(mysql专用端口号)
           //数据库名称 business
           //编码方法 UTF-8
           //账号root
           //密码admin
           Connection c = DriverManager
.getConnection("jdbc:mysql://127.0.0.1:3306/business?characterEncoding=UTF-8",
                           "root", "890");
           Statement s = c.createStatement();
           //准备sql语句
           //注意:字符串要用单引号'
           String sql = "insert into student3 values(null,'王元博','QA','武汉大学','10010','知乎','10011','10012',)";
           s.execute(sql);
           String sql1 = "delete from student3 id=7";
           s.execute(sql1);
           String sql2 = "update student3 set name = '程政皓' where id = 8";
           s.execute(sql2);
           String sql3 = "select * from student3";
           //执行查询语句,并把结果集返回给ResultSet
           ResultSet rs = s.executeQuery(sql3);
           while (rs.next()) {
int id = rs.getInt("id");//可以使用字段名
               String name = rs.getString(2);//也可以使用字段的顺序
               String type = rs.getString(3);
               String gradSchool = rs.getString(4);
               int onlineId = rs.getInt(5);
               String channel = rs.getString(6);
               long createAt = rs.getLong(7);
               long updateAt = rs.getLong(8);
               System.out.println(id+""+ name+""+type + " "+gradSchool+""+onlineId+""+channel+""+createAt+""+updateAt);
           }
//不一定要在这里关闭ReultSet,因为Statement关闭的时候,会自动关闭ResuleSet
           //rs.clos();
       } catch (SQLException e) {
//TODO Auto-generated catch block
           e.printStackTrace();
       }
}
}

JDBC Template的使用流程:

创建数据库和表,贴入相关的依赖

创建接口方法,创建实体类,配置applicationContext.xml文件

最后创建实现类,测试类


首先创建Student3接口

ackage dao;

public interface Student3 {
public int addStudent3(Student3 student3);

   public void deleteStudent3(int id);

   public Student3 getStudent3(int id);

   public int updateStudent3(Student3 student3);

}

创建实体类

package entity;

public class Student3 {
private int id;
   private String name;
   private String type;
   private String gradSchool;
   private int onlineId;
   private String channel;
   private long createAt;
   private long updateAt;
   public int getId(){
return id;
   }
public void setId(int id){

this.id=id;
   }
public String getName(){

return name;
   }
public void setName(String name){

this.name=name;
   }
public String getType(){
return type;
   }
public void setType(String type){

this.type=type;
   }
public String getGradSchool(){

return gradSchool;
   }
public void setGradSchool(String gradSchool){

this.gradSchool=gradSchool;
   }
public int getOnlineId(){

return onlineId;
   }
public void setOnlineId(int onlineId){

this.onlineId=onlineId;
   }
public String getChannel(){
return channel;
   }
public void setChannel(String channel){

this.channel=channel;
   }
public long getCreateAt(){

return createAt;
   }
public void setCreateAt(long createAt){

this.createAt=createAt;
   }
public long getUpdateAt(){

return updateAt;
   }
public void setUpdateAt(long updateAt){

this.updateAt=updateAt;
   }
}

配置applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd">
   <!--连接池数据源-->
   <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
       <property name="url" value="jdbc:mysql://127.0.0.1:3306/Business?useUnicode=true&amp;characterEncoding=UTF-8
&amp;serverTimezone=UTC"></property>
       <property name="username" value="root"></property>
       <property name="password" value="890"></property>
   </bean>

   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"></property>
   </bean>

   <bean id="IStudent3Dao" class="impl.Student3DAOImpl">
       <property name="jdbcTemplate" ref="jdbcTemplate"></property>
   </bean>

创建实现类

package impl;

import dao.IStudent3DAO;
import entity.Student3;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class Student3DAOImpl extends JdbcDaoSupport implements IStudent3DAO {
@Override
   public void addStudent3(Student3 student3) {
String sql = "insert into student3 values(?,?,?,?,?,?,?,?)";
       this.getJdbcTemplate().update(sql, student3.getId(), student3.getName(), student3.getType(), student3.getGradSchool()
, student3.getOnlineId(), student3.getChannel(), student3.getCreateAt(), student3.getUpdateAt());
       student3.getUpdateAt();
   }

@Override
   public void deleteStudent3(int id) {
String sql = "delete from student3 where id=?";
       this.getJdbcTemplate().update(sql, id);
   }

@Override
   public void updateStudent3(Student3 student3) {
String sql = "update student3 set name=?,type=?,where id=?";
       this.getJdbcTemplate().update(sql, student3.getId(), student3.getName(), student3.getType(), student3.getGradSchool()
, student3.getOnlineId(), student3.getChannel(), student3.getCreateAt(), student3.getUpdateAt());
       student3.getUpdateAt();
   }

@Override
   public String searchStudent3Name(int id) {
String sql = "select name from student3 where id=?";
       return this.getJdbcTemplate().queryForObject(sql, String.class, id);
   }

@Override
   public Student3 searchStudent3(int id) {
String sql = "select * from student3 where id=?";
       return this.getJdbcTemplate().queryForObject(sql, new StudentRowMapper(), id);
   }

@Override
   public List<Student3> findA11() {
String sql = "select * from student3";
       return this.getJdbcTemplate().query(sql, new StudentRowMapper());
   }

class StudentRowMapper implements RowMapper<Student3> {
public Student3 mapRow(ResultSet rs, int rowNum) throws SQLException {
Student3 student3 = new Student3();
           student3.setId(rs.getInt("id"));
           student3.setName(rs.getString("name"));
           student3.setType(rs.getString("type"));
           student3.setGradSchool(rs.getString("gradschool"));
           student3.setOnlineId(rs.getInt("onlineid"));
           student3.setChannel(rs.getString("channel"));
           student3.setCreateAt(rs.getLong("createAt"));
           student3.setUpdateAt(rs.getLong("updateAt"));
           return student3;
       }
}
}

创建测试类

package test;

import dao.IStudent3DAO;
import entity.Student3;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class Student3Test {
@Test//增加
   public void demo1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       IStudent3DAO dao = (IStudent3DAO) applicationContext.getBean("studentDao");
       dao.deleteStudent3(3);
   }

@Test//更改
   public void demo2() {
Student3 student = new Student3();
       student.setName("猪猪");
       student.setType("动画");
       student.setGradSchool("哈");
       student.setOnlineId(1112);
       student.setChannel("网页");
       student.setCreateAt(121212);
       student.setUpdateAt(212121);
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       IStudent3DAO dao = (IStudent3DAO) applicationContext.getBean("studentDao");
   }

@Test//删除
   public void demo3() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       IStudent3DAO dao = (IStudent3DAO) applicationContext.getBean("studentDao");
       dao.deleteStudent3(7);
   }

@Test//简单查询,返回字符串
   public void demo4() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       IStudent3DAO dao = (IStudent3DAO) applicationContext.getBean("studentDao");
       Student3 student = dao.searchStudent3(8);
       System.out.println(student.getName());
   }

@Test//简单查询,返回对象
   public void demo5() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       IStudent3DAO dao = (IStudent3DAO) applicationContext.getBean("studentDao");
       Student3 student = dao.searchStudent3(9);
   }

@Test//复杂查询,返回对象集合
   public void demo6() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       IStudent3DAO dao = (IStudent3DAO) applicationContext.getBean("studentDao");
       List<Student3> students = dao.findA11();
       System.out.println(students.size());
   }
}


明天计划的事情:

完成template的错误解决,继续完成任务一

遇到的问题:
单元测试的方法掌握的还不是很熟练
tempalte运行之后就这么显示了,不知道啥情况。。
图标没见过这样的

收获:

简单能使用单元日志的二种方法:1.贴依赖

在resources添加log4j.properties文件

另外一种是在配置XML文件

加深JDBC template的印象


返回列表 返回列表
评论

    分享到