本文将分享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语句)
- JDBC + Spring JDBC(JdbcTemplate)
- JdbcBatchItemWriterBuilder与org.springframework.jdbc.core.jdbcTemplate.batchUpdate
- jdbctemplate在SpringBoot中运行MYSQL的代码实例
- logback 如何打印Spring jdbcTemplate 的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 value: column 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 value: column 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 value: column 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 value: column 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 value: column index 2, parameter value [2014-10-03 14:09:47], value class [java.lang.String], SQL type unknown
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
JdbcBatchItemWriter
在内部使用java.sql.PreparedStatement#addBatch
和java.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的代码实例
本篇文章主要介绍了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语句呢?就有如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语句呢?的相关知识,请在本站搜索。
本文标签: