GVKun编程网logo

logback 打印 spring jdbcTemplate SQL 日志(logback打印sql语句)

32

本文将分享logback打印springjdbcTemplateSQL日志的详细内容,并且还将对logback打印sql语句进行详尽解释,此外,我们还将为大家带来关于JDBC+SpringJDBC(J

本文将分享logback 打印 spring jdbcTemplate SQL 日志的详细内容,并且还将对logback打印sql语句进行详尽解释,此外,我们还将为大家带来关于JDBC + Spring JDBC(JdbcTemplate)、JdbcBatchItemWriterBuilder与org.springframework.jdbc.core.jdbcTemplate.batchUpdate、jdbctemplate在SpringBoot中运行MYSQL的代码实例、logback 如何打印Spring jdbcTemplate 的SQL语句呢?的相关知识,希望对你有所帮助。

本文目录一览:

logback 打印 spring jdbcTemplate SQL 日志(logback打印sql语句)

logback 打印 spring jdbcTemplate SQL 日志(logback打印sql语句)

背景:

在 spring 框架里面配置 logback 打印出 SQL 日志包括参数值。

maven pom.xml 配置

<!-- Logger -->
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.0.7</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.4</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.4</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>1.6.4</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
			<scope>runtime</scope>
		</dependency>

logback.xml

<!--JdbcTemplate的日志输出器 -->
	<logger name="org.springframework.jdbc.core.StatementCreatorUtils"
		additivity="false" level="TRACE">
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="org.springframework.jdbc.core" additivity="true">
		<level value="DEBUG" />
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="java.sql.Connection" additivity="true">
		<level value="DEBUG" />
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="java.sql.Statement" additivity="true">
		<level value="DEBUG" />
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="java.sql.PreparedStatement" additivity="true">
		<level value="DEBUG" />
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="java.sql.ResultSet" additivity="true">
		<level value="DEBUG" />
		<appender-ref ref="STDOUT" />
	</logger>

输出日志

2014-10-03 14:09:47.442 [1357862146@qtp-821556544-0] DEBUG o.s.jdbc.core.JdbcTemplate -
				Executing prepared SQL query
2014-10-03 14:09:47.442 [1357862146@qtp-821556544-0] DEBUG o.s.jdbc.core.JdbcTemplate -
				Executing prepared SQL statement [SELECT id, game_type, game_city, game_logo_name, game_logo_uri, game_grab_logo_distance, game_hide_time, game_hide_time_invalid, game_start_date, game_end_date, game_start_time, game_end_time, game_center_longitude, game_center_latitude, game_center_address, game_center_radius, game_logo_put_in_point_longitude, game_logo_put_in_point_latitude, game_logo_display_radius, game_rob_gold_times, game_max_move_speed, game_max_get_speed, game_share_text_template, created_time, last_mod_time, operator FROM hunting_game_info_test  where CONVERT(game_city USING utf8) COLLATE utf8_unicode_ci = ? and game_start_time <= ? and game_end_time >= ? order by game_start_time desc ]
2014-10-03 14:09:47.704 [1357862146@qtp-821556544-0] TRACE o.s.jdbc.core.StatementCreatorUtils -
				Setting SQL statement parameter valuecolumn index 1, parameter value [北京]value class [java.lang.String]SQL type unknown
2014-10-03 14:09:47.705 [1357862146@qtp-821556544-0] TRACE o.s.jdbc.core.StatementCreatorUtils -
				Setting SQL statement parameter valuecolumn index 2, parameter value [2014-10-03 14:09:47]value class [java.lang.String]SQL type unknown
2014-10-03 14:09:47.706 [1357862146@qtp-821556544-0] TRACE o.s.jdbc.core.StatementCreatorUtils -
				Setting SQL statement parameter valuecolumn index 3, parameter value [2014-10-03 14:09:47]value class [java.lang.String]SQL type unknown
2014-10-03 14:09:47.713 [1357862146@qtp-821556544-0] DEBUG o.s.jdbc.core.JdbcTemplate -
				Executing prepared SQL query
2014-10-03 14:09:47.714 [1357862146@qtp-821556544-0] DEBUG o.s.jdbc.core.JdbcTemplate -
				Executing prepared SQL statement [SELECT id, game_type, game_city, game_logo_name, game_logo_uri, game_grab_logo_distance, game_hide_time, game_hide_time_invalid, game_start_date, game_end_date, game_start_time, game_end_time, game_center_longitude, game_center_latitude, game_center_address, game_center_radius, game_logo_put_in_point_longitude, game_logo_put_in_point_latitude, game_logo_display_radius, game_rob_gold_times, game_max_move_speed, game_max_get_speed, game_share_text_template, created_time, last_mod_time, operator FROM hunting_game_info_test  where CONVERT(game_city USING utf8) COLLATE utf8_unicode_ci = ? and created_time >= ? order by created_time asc limit 1; ]
2014-10-03 14:09:47.715 [1357862146@qtp-821556544-0] TRACE o.s.jdbc.core.StatementCreatorUtils -
				Setting SQL statement parameter valuecolumn index 1, parameter value [北京]value class [java.lang.String]SQL type unknown
2014-10-03 14:09:47.715 [1357862146@qtp-821556544-0] TRACE o.s.jdbc.core.StatementCreatorUtils -
				Setting SQL statement parameter valuecolumn index 2, parameter value [2014-10-03 14:09:47]value class [java.lang.String]SQL type unknown


JDBC + Spring JDBC(JdbcTemplate)

JDBC + Spring JDBC(JdbcTemplate)

1. JDBC
-- JDBC (Java Database Connectivity) java数据库连接,是java标准库的一部分,主要负责处理对数据库的访问
(纯JDBC代码来访问数据库)
--了解java.sql包中几个对象
a. DriverManager :实用工具类,认识所有可用的数据库驱动程序
b. Connection:代表与数据库的连接,包含url, 用户名,密码等信息,可使用DriverManager来创建他们
c. PreparedStatement 和 CallableStatement:把真实的sql语句发送给数据库服务器。sql语句从Connection创建的
d. esultSet:数据返回方式,可迭代,每个对象代表一行,可使用getFoo(index) / getFoo(name)方法访问数据,其中Foo是数据类型,如String,Int等,index是列号(1开始),name是列名,ResultSet由sql语句返回
e. Date, Time, Timestamp:时间数据的sql表示形式
--java.sql.sqlException: No suitable driver 问题解决
解决办法是将MysqL的驱动jar包mysql-connector-java-8.0.28.jar,放到C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext (针对本机)

@Test
public void testjdbc() throws sqlException {
String url = "jdbc:MysqL://192.168.0.10:3306/agiletc";
Connection conn = DriverManager.getConnection(url,"steve","appleseed");
String sql = "select id,username,password from user";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Integer id = rs.getInt("id");
String name = rs.getString("username");
String password = rs.getString("password");
String msg = String.format("ID: %d, Name: %s, Pwd:%s",id,name,password);
System.out.println(msg);
}
}

2.数据库框架 Spring JDBC--JdbcTemplate
--Spring框架提供很多操作模板类,如操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的Redistemplate,操作消息队列的jmstemplate等等
--JdbcTemplate类是最基本的Spring JDBC模板,无需使用纯JDBC也能执行sql语句
--JdbcTemplate受Datasource支持,线程安全,意味着可在整个应用程序中使用同一个实例
--JdbcTemplate流程步骤
a. 导入相关依赖
b. 创建数据库表和实体类
(Entity类:
1.实体类的作用是和数据表做映射,即数据库中的一个表映射成对应的一个java类,其中还有一个映射文件
2.属性对应数据表中的字段, 方法即是对表中数据的操作(setter和getter方法,带参数的构造器和无参数的构造器,重写父类的方法等)
c. 创建JdbcTemplate对象
d. 执行数据库操作
--实操例子
(1)导入相关依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>MysqL</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
(2)MysqL建表
CREATE TABLE account(
`oid` int NOT NULL AUTO_INCREMENT ,
`username` VARCHAR(10) NOT NULL,
`money` int NOT NULL,
PRIMARY KEY(`oid`)
);
(3)创建Entity类
public class Account {
private int oid;
private String username;
private int money;

public int getoid(){
return oid;
}
public void setoid(int oid){
this.oid = oid;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public int getMoney(){
return money;
}
public void setMoney(int money){
this.money = money;
}
@Override
public String toString(){
return "Account{" + "oid=" + oid + " ,username=" + username + '\'' + ", money=" + money + "}";
}
}
(4)创建JdbcTemplate对象,执行数据库操作
@Test
public void test1() throws PropertyVetoException {
//创建c3p0数据库连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//设置连接参数
dataSource.setDriverClass("com.MysqL.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:MysqL://localhost:3306/testing");
dataSource.setUser("root");
dataSource.setPassword("password");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//给jdbcTemplate对象设置数据源
jdbcTemplate.setDataSource(dataSource);
//插入一条数据
int i = jdbcTemplate.update("insert into account values(?,?,?)",3,"Jhon",1500);
System.out.println(i);
}

--代码优化
(1)jdbc.properties
jdbc.driver=com.MysqL.jdbc.Driver
jdbc.url=jdbc:MysqL://localhost:3306/testing
jdbc.user=root
jdbc.password=password

(2)spring-jdbc.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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!--引入jdbc.properties-->
<context:property-placeholder location="jdbc.properties"/>
<!--配置c3p0连接池-->
<bean id="dataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--配置jdbcTemplate-->
<bean id="jdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>

(3)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">
<import resource="classpath:spring-jdbc.xml"/>
</beans>

(4)测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "classpath:applicationContext.xml")
public class TestJdbcTemplate {

@Autowired
private JdbcTemplate jdbcTemplate;

//Spring创建jdbcTemplate对象
@Test
public void test2() {
//插入一条数据
int i = jdbcTemplate.update("insert into account values(?,?,?)", 3, "lucy", 5000);
System.out.println(i);
}
}

--JdbcTemplate常用操作(CURD操作)
注意:
a. 如果pojo中没有get/set,那么Springjdbc映射时会找不到属性值,从而为null
b. BeanPropertyRowMapper是RowMapper的实现类
public class BeanPropertyRowMapper<T> implements RowMapper<T>
(1)代码
@Test
public void test3() {
int i = 0;
//插入一条数据
i = jdbcTemplate.update("insert into account values(?,?,?)", 5, "Amy", 5000);
System.out.println("insert:" + i);
//更新操作
i = jdbcTemplate.update("update account set money=? where username =?", 000, "tom");
System.out.println("update:" + i);
//删除操作
i = jdbcTemplate.update("delete from account where oid = ?", 4);
System.out.println("delete:" + i);
//查询全部
List<Account> accounts = jdbcTemplate.query("select * from account",
new BeanPropertyRowMapper<Account>(Account.class));
AtomicInteger j = new AtomicInteger(1);
accounts.forEach((s) -> {
System.out.println("第" + (j.getAndIncrement()) + "条:" + s);
});
//查询单个
Account account = jdbcTemplate.queryForObject("select * from account where username = ?",
new BeanPropertyRowMapper<Account>(Account.class),"lucy");
System.out.println("查询单个" + account);

}

JdbcBatchItemWriterBuilder与org.springframework.jdbc.core.jdbcTemplate.batchUpdate

JdbcBatchItemWriterBuilder与org.springframework.jdbc.core.jdbcTemplate.batchUpdate

JdbcBatchItemWriter在内部使用java.sql.PreparedStatement#addBatchjava.sql.Statement#executeBatch(请参阅https://github.com/spring-projects/spring-batch/blob/c4010fbffa6b71cbcfe79d523023251ce73666a4/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcBatchItemWriter.java#L189-L195),因此将为该块的所有项目提供一个批处理插入。

此外,这将在单个事务中执行,如参考文档的Chunk-oriented Processing部分所述。

jdbctemplate在SpringBoot中运行MYSQL的代码实例

jdbctemplate在SpringBoot中运行MYSQL的代码实例

本篇文章主要介绍了spring boot中使用jdbctemplate 操作mysql数据库实例,具有一定的参考价值,有兴趣的可以了解一下。

最近在学习使用Spring Boot连接数据库,今天学习了使用jdbctemplate 操作MYSQL数据库,下面就留个笔记

不废话,先来代码

pom文件:

<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>test</groupId>

 <artifactId>test</artifactId>

 <version>0.0.1-SNAPSHOT</version>

 <packaging>jar</packaging>

 <name>test</name>

 <url>http://maven.apache.org</url>

 <properties>

  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

 </properties>

 <dependencies>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter</artifactId>

    <version>1.4.2.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-jdbc</artifactId>

    <version>1.4.2.RELEASE</version>

  </dependency>

  <dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>5.1.21</version>

   </dependency>

 </dependencies>

</project>
登录后复制

配置文件:application.properties(springboot框架默认使用这个名字,放在resources下面)

spring.datasource.url=jdbc:mysql://localhost:3306/service_lucky_draw?autoReconnect=true&useUnicode=true&characterEncoding=utf-8

spring.datasource.username=root

spring.datasource.password=1234

spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

spring.application.name = @pom.artifactId@

server.port=33333
登录后复制

启动类:

package versionUpdate;

import java.util.List;

import java.util.Map;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.CommandLineRunner;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.jdbc.core.JdbcTemplate;

@SpringBootApplication

public class ApplicationMain implements CommandLineRunner {

  private Logger log = Logger.getLogger(ApplicationMain.class); 

  @Autowired

  private JdbcTemplate jdbcTemplate; 

  public static void main(String[] args) {

    SpringApplication springApplication = new SpringApplication(ApplicationMain.class);

    springApplication.run(args);

  } 

  @Override

  public void run(String... args) throws Exception {

    String queryMerchandiseInfoSql = "SELECT id,worth,channel_id,template_id FROM merchandise_info";

    List<Map<String, Object>> list = jdbcTemplate.queryForList(queryMerchandiseInfoSql);

    log.debug(list);

  }

}
登录后复制

至此一个简单的SpringBoot+Jdbctemplate+MYSQL的DEMO搭建完成;

如果不想在启动类里面直接进行数据库操作,可以按照下面的方式:

package versionUpdate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Component;

/** 获取jdbctemplate实例 */

@Component

public class EnterJdbcTemplate {   

  private static JdbcTemplate jdbcTemplate; 

  @Autowired

  public EnterJdbcTemplate(JdbcTemplate jdbcTemplate) {

    this.jdbcTemplate = jdbcTemplate;

  }   

  public static JdbcTemplate getJdbcTemplate(){

    return jdbcTemplate;

  }   

}
登录后复制
package versionUpdate;

import org.springframework.jdbc.core.JdbcTemplate;

/** 操作数据库 */

public class Movedata extends EnterJdbcTemplate{

   

  public Movedata(JdbcTemplate jdbcTemplate) {

    super(jdbcTemplate);

  }
 public static void ccc(){

    System.out.println("++++++++++++++++++"+getJdbcTemplate().queryForMap("SELECT * FROM channel_info WHERE channel_id = ? ","cccc")); 

  }

}
登录后复制

【相关推荐】

1. Java免费视频教程

2. JAVA教程手册

3. JAVA初级入门视频教程

以上就是jdbctemplate在SpringBoot中运行MYSQL的代码实例的详细内容,更多请关注php中文网其它相关文章!

logback 如何打印Spring jdbcTemplate 的SQL语句呢?

logback 如何打印Spring jdbcTemplate 的SQL语句呢?

logback 如何打印Spring jdbcTemplate 的SQL语句呢?

就有如Hibernate里的show_sql

今天关于logback 打印 spring jdbcTemplate SQL 日志logback打印sql语句的讲解已经结束,谢谢您的阅读,如果想了解更多关于JDBC + Spring JDBC(JdbcTemplate)、JdbcBatchItemWriterBuilder与org.springframework.jdbc.core.jdbcTemplate.batchUpdate、jdbctemplate在SpringBoot中运行MYSQL的代码实例、logback 如何打印Spring jdbcTemplate 的SQL语句呢?的相关知识,请在本站搜索。

本文标签: