发表于: 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&characterEncoding=UTF-8
&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的错误解决,继续完成任务一
收获:
简单能使用单元日志的二种方法:1.贴依赖
在resources添加log4j.properties文件
另外一种是在配置XML文件
加深JDBC template的印象
评论