JDBCTemplate的简单应用

使用JdbcTemplate进行数据库操作的Spring Boot应用 在本文中,我们介绍了如何配置数据源、添加依赖项、创建JdbcTemplate bean以及执行SQL查询和更新操作的示例代码。在上面的示例中,我们创建了一个UserRepository类,它使用JdbcTemplate执行SELECT语句并将结果映射到User对象列表中。在使用JdbcTemplate之前,我们需要在项目的构建文件中添加相应的依赖项。在上面的示例中,我们创建了一个createUser方法,它使用JdbcTemplate执行INSERT语句并传递用户对象的属性值作为参数。 阅读详情

JDBCTemplate概述

在讲JDBCTemplate之前,我先来介绍一下什么是JDBC,JDBC即java database connectivity,指Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序的接口,提供了诸如查询,更新数据库中的数据的方法;
JDBCTemplate则是Spring 对 JDBC的封装,JDBCTemplate能够帮助程序员更加高效便利的进行开发,下面我们来对比一下用JDBC开发和JDBCTemplate开发有哪些区别吧。
本文使用的是JDK 11,数据库使用的是MySql 8.0,使用的是eclipse 进行开发

JDBC操作数据库步骤:
1.加载驱动(一定要和数据库的版本一致,导入对应的驱动包)
Class.forName(“Driver实现类的全路径类名”)[第三方的包]
加载这个类,调用静态代码块,实例化一个驱动,然后注册到DriverManager
2.获得连接
Connection = DriverManager.getConnection(url,user,password);
3.编写sql 语句
4.准备Statement,发送sql,并执行
Statement statement = connection.createStatement();
statement.execute(sql);//select
statement.executeUpdate(sql);//insert update delete
5.如果有结果集,解析结果集
ResultSet resultSet = statement.executeQuery( sql );
//执行给定的SQL语句,该语句返回单个ResultSet对象。
ResultSet resultSet = statement.executeUpdate( sql );
//执行给定的SQL语句,这可能是INSERT , UPDATE ,或DELETE语句
6.关闭资源
在以上步骤中有大量重复的代码,于是我们就有了JDBCTemplate,
JDBCTempalte中执行sql语句的方法大致分为3类:
execute:可以执行所有sql语句,一般用于执行DDL语句
update:用于执行insert,update,delete等DML语句
queryXxx:用于DQL数据查询语句

JDBCTemplate 对象的创建需要连接池,这里我们使用的是 DBCP 连接池
public JdbcTemplate(DataSource dataSource)
接下来我们用一个小的案例来演示一下JDBCTemplate的使用方法:

(1)首先我们先创建一个数据库

CREATE DATABASE jdbctest DEFAULT CHARACTER SET utf8

(2)接着我们创建一个数据表tb_user

CREATE TABLE tb_user ( 
id INT PRIMARY KEY auto_increment, 
username VARCHAR ( 20 ) NOT NULL, 
age INT );

(3)我们向表中添加几组数据

INSERT INTO tb_user VALUES( 100, 'Lily', 20 );
INSERT INTO tb_user VALUES( 101, 'Nancy', 21 );
INSERT INTO tb_user VALUES( 102, 'Mike', 20 );

(4)接着我们到 eclipse 中创建项目,点击next
在这里插入图片描述
在这里插入图片描述
添加jar包,这里添加了jdbc依赖包,lombok依赖包,dbcp依赖包
在这里插入图片描述
(5)创建好项目之后,我们先来完善一下项目结构
在这里插入图片描述
(6)接着把db.properties配置文件放在src目录下
db.properties的内容如下:

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbctest?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
username=root
password=123456

#<!-- 初始化连接 -->
dataSource.initialSize=10

#<!-- 最大空闲连接 -->
dataSource.maxIdle=20

#<!-- 最小空闲连接 -->
dataSource.minIdle=5

#最大连接数量
dataSource.maxActive=50

#是否在自动回收超时连接的时候打印连接的超时错误
dataSource.logAbandoned=true

#是否自动回收超时连接
dataSource.removeAbandoned=true

#超时时间(以秒数为单位)
#设置超时时间有一个要注意的地方,超时时间=现在的时间-程序中创建Connection的时间,如果maxActive比较大,比如超过100,那么removeAbandonedTimeout可以设置长一点比如180,
#也就是三分钟无响应的连接进行回收,当然应用的不同设置长度也不同。
dataSource.removeAbandonedTimeout=180

#<!-- 超时等待时间以毫秒为单位 -->
#maxWait代表当Connection用尽了,多久之后进行回收丢失连接
dataSource.maxWait=1000

(7)添加工具类:JDBCUtil和静态工厂类BeanFactory
JDBCUtil:

package com.gem.util;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class JDBCUtil {
	private static DataSource dataSource;
	static {
		Properties properties = new Properties();
		try {
			properties.load(JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties"));
			try {
				dataSource = new BasicDataSourceFactory().createDataSource(properties);
			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static DataSource getDataSource() {
		return dataSource;
	}

	public static Connection getConnection() {
		try {
			return dataSource.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void close(ResultSet set, Statement preparedStatement, Connection connection) {
		if (set != null) {
			try {
				set.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (preparedStatement != null) {
			try {
				preparedStatement.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

}

BeanFactory:

package com.gem.util;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class BeanFactory {
	public static Object getBean(String allClassName) {
		try {
			Class objectClass = Class.forName(allClassName);
			Constructor<Object> constructor = objectClass.getConstructor();//无参构造
			return constructor.newInstance();//实例化对象
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}

(8)添加完工具类之后,我们准备工作就做好了,接下来我们先来写实体类User

package com.gem.entity;

import lombok.*;

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User {
	private Integer id;
	private String username;
	private Integer age;

	public User(String username, Integer age) {
		super();
		this.username = username;
		this.age = age;
	}

}

(9)接着写持久层UserDao 和UserDaoImpl
UserDao:

package com.gem.dao;

import java.util.List;

import com.gem.entity.User;

public interface UserDao {
	//查看所有用户
	List<User> selectAllUser();

	//根据id查找用户
	User selectUserById(int id);

	//根据年龄查找用户
	List<User> selectUserByAge(int age);

	//添加用户
	boolean insertUser(User user);

	//删除用户
	boolean deleteUserById(int id);

	//修改用户信息
	boolean updateUserById(User user);

}

UserDaoImpl:
★主要看一下UserDaoImpl中,JDBCTemplate中的实现细节。

package com.gem.dao.impl;

import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import com.gem.dao.UserDao;
import com.gem.entity.User;
import com.gem.util.JDBCUtil;

public class UserDaoImpl implements UserDao {
	//创建JDBCTemplate的对象,并获得连接池对象
	JdbcTemplate template = new JdbcTemplate(JDBCUtil.getDataSource());

	@Override
	public List<User> selectAllUser() {//查看所有用户
		//编写sql语句
		String sql = "select * from tb_user";
		//创建一个users集合来存放从数据库中取出的User对象,BeanPropertyRowMapper的作用是将实体类User中的各个属性对应数据库中的各个字段,
		//将数据库中的数据取出(所以实体类中的属性名要和数据库中的字段名相同)
		List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
		if (users.size() > 0)
			return users;
		return null;

	}

	@Override
	public User selectUserById(int id) {//根据id查找用户
		//这里的?设置参数
		String sql = "select * from tb_user where id=?";
		//这里后面添加的id参数,用来填入上面的 "?" 中
		List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class), id);
		if (users.size() > 0 && users.get(0) != null)
			return users.get(0);
		return null;
	}

	@Override
	public List<User> selectUserByAge(int age) {//根据年龄查找用户
		//这里的?设置参数
		String sql = "select * from tb_user where age=?";
		//这里后面添加的age参数,用来填入上面的 "?" 中
		List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class), age);
		if (users.size() > 0)
			return users;
		return null;
	}

	@Override
	public boolean insertUser(User user) { //添加用户
		String sql = "insert into tb_user values(null,?,?)";
		//count用来接收上面这句sql语句更新表中数据所影响的行数
		int count = template.update(sql, user.getUsername(), user.getAge());
		return count > 0;
	}

	@Override
	public boolean deleteUserById(int id) { //删除用户
		String sql = "delete from tb_user where id=?";
		int count = template.update(sql, id);
		return count > 0;
	}

	@Override
	public boolean updateUserById(User user) { //修改用户信息
		String sql = "update tb_user set username=?,age=? where id=?";
		int count = template.update(sql, user.getUsername(), user.getAge(), user.getId());
		return count > 0;
	}
}

(10)写完持久层之后,我们写业务层:UserService和UserServiceImpl
UserService:

package com.gem.service;

import java.util.List;

import com.gem.entity.User;

public interface UserService {
	//查看所有用户
	List<User> getAllUser();

	//根据id查找用户
	User getUserById(int id);

	//根据年龄查找用户
	List<User> getUserByAge(int age);

	//添加用户
	boolean addUser(User user);

	//删除用户
	boolean deleteUserById(int id);

	//修改用户信息
	boolean updateUserById(User user);
}

UserServiceImpl:

package com.gem.service.impl;

import java.util.List;

import com.gem.dao.UserDao;
import com.gem.entity.User;
import com.gem.service.UserService;
import com.gem.util.BeanFactory;

public class UserServiceImpl implements UserService {
	UserDao userDao = (UserDao) BeanFactory.getBean("com.gem.dao.impl.UserDaoImpl");

	@Override
	public List<User> getAllUser() {
		return userDao.selectAllUser();
	}

	@Override
	public User getUserById(int id) {
		return userDao.selectUserById(id);
	}

	@Override
	public List<User> getUserByAge(int age) {
		return userDao.selectUserByAge(age);
	}

	@Override
	public boolean addUser(User user) {
		return userDao.insertUser(user);
	}

	@Override
	public boolean deleteUserById(int id) {
		return userDao.deleteUserById(id);
	}

	@Override
	public boolean updateUserById(User user) {
		return userDao.updateUserById(user);
	}

}

(11)最后我们来写一下Client。用来测试JDBCTemplate

package com.gem.client;

import java.util.Scanner;

import com.gem.entity.User;
import com.gem.service.UserService;
import com.gem.util.BeanFactory;

public class Client {
	public static void main(String[] args) {
		UserService userService = (UserService) BeanFactory.getBean("com.gem.service.impl.UserServiceImpl");
		Scanner sc = new Scanner(System.in);

		while (true)
			menu(sc, userService);
	}

	private static void menu(Scanner sc, UserService userService) {
		System.out.println("1.查看所有用户");
		System.out.println("2.根据id查找用户");
		System.out.println("3.根据年龄查找用户");
		System.out.println("4.添加用户");
		System.out.println("5.删除用户");
		System.out.println("6.修改用户信息");
		String choice = sc.nextLine().trim();
		switch (choice) {
		case "1":
			searchAllUser(sc, userService);
			break;
		case "2":
			searchUserById(sc, userService);
			break;
		case "3":
			searchUserByAge(sc, userService);
			break;
		case "4":
			addUser(sc, userService);
			break;
		case "5":
			deleteUserById(sc, userService);
			break;
		case "6":
			updateUserById(sc, userService);
			break;

		default:
			break;
		}
	}

	private static void updateUserById(Scanner sc, UserService userService) {
		System.out.println("请输入要修改的用户的id");
		int id = Integer.parseInt(sc.nextLine().trim());
		System.out.println("请输入新姓名");
		String newUsername = sc.nextLine().trim();
		System.out.println("请输入新年龄");
		int newAge = Integer.parseInt(sc.nextLine().trim());
		if (userService.updateUserById(new User(id, newUsername, newAge)))
			System.out.println("修改成功");
		else
			System.out.println("修改失败");
	}

	private static void deleteUserById(Scanner sc, UserService userService) {
		System.out.println("请输入要删除的id");
		int id = Integer.parseInt(sc.nextLine().trim());
		if (userService.deleteUserById(id))
			System.out.println("删除成功");
		else
			System.out.println("删除失败");
	}

	private static void addUser(Scanner sc, UserService userService) {
		System.out.println("请输入姓名");
		String username = sc.nextLine().trim();
		System.out.println("请输入年龄");
		int age = Integer.parseInt(sc.nextLine().trim());
		if (userService.addUser(new User(username, age)))
			System.out.println("添加成功");
		else
			System.out.println("添加失败");
	}

	private static void searchUserByAge(Scanner sc, UserService userService) {
		System.out.println("请输入要查询的年龄");
		int age = Integer.parseInt(sc.nextLine().trim());
		userService.getUserByAge(age).forEach(System.out::println);
	}

	private static void searchUserById(Scanner sc, UserService userService) {
		System.out.println("请输入要查询的id");
		int id = Integer.parseInt(sc.nextLine().trim());
		System.out.println(userService.getUserById(id));
	}

	private static void searchAllUser(Scanner sc, UserService userService) {
		userService.getAllUser().forEach(System.out::println);
	}
}

Spring JdbcTemplate 实例详解与应用 Spring JdbcTemplate是Spring框架提供的一个数据库操作模板工具,它简化了传统JDBC的使用,自动处理资源的开启和关闭,并能够减少冗余代码,提高开发效率。JdbcTemplate允许开发者使用一种更加直观和声明式的方式来操作数据库,而无需担心底层的资源管理细节。在本章节中,我们学习了如何创建和配置JdbcTemplate对象,以及它的一些基本方法。下一章节将更深入探讨JdbcTemplate中的参数绑定机制,这是提高SQL语句安全性和灵活性的关键技术。 阅读详情

相关推荐

spring jdbcTemplate

eclipse+jdk7 spring jdbcTemplate的一个完整demo,实为一个图书馆系统的demo

Spring5框架——jdbcTemplate实现对数据库的操作(案例:通过Java代码实现Mysql数据库内的数据增删改查操作,和批量的增删改查操作)

通过spring5框架来完成对MySQL数据库的操作

m0_52479012的博客 1872

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1166

JdbcTemplate的基本介绍

JdbcTemplate 是 Spring 对 JDBC 的封装,目的是使JDBC更加易于使用,JdbcTemplate是Spring的一部分。JdbcTemplate 处理了资源的建立和释放,它帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果即可。提供了简化的访问JDBC的模板类,不必手动释放资源;提供了一个统一的 DAO 类以实现 Data Access Object 模式;把封装为。

weixin_43977307的博客 1831

[cadence]Allegro STEP-3D模型导入、匹配、导出的方法及注意事项

如果 Avaliable里面没有和symbols对应的文件,说明没有对应的3D模型,这时候需要在你的step路径下创建y与 .dra 封装文件相同名称的。选择好 Output file 和 name 之后呢,点击 Export。首先打开Setup - Step Package Mapping。注意:路径中不能有中文名称,有的话你会发现不能导出,也不会报错。在路径下将下载或者自己做的 3D模型文件改名之后,重新打开。可在View -> 3D View。

LuDvei的博客 2万+

全桥LLC谐振变换器变频控制工作原理与仿真

全桥LLC谐振变换器以其效率高、全范围软开关、器件电应力小等优点,越来越多地应用于大功率场合。电力电子技术的发展日益追求高频化,所带来的问题是半导体开关器件高频运行时的开关损耗急剧增加。各种软开关电路随之出现。可以有效减小开关损耗,使进一步提高开关频率成为可能。谐振式开关因其可在电流自然过零点开通半导体器件,实现零电压开关,特别适合采用MOSFET作开关的装置。最简单的谐振电路有串联谐振(SRC)和并联谐振(PRC)。SRC只能工作于降压状态,应用受限;

晞子的技术札记 3075

使用jdbcTemplate操作数据库

文章目录1. 配置依赖2. 编写service3. 测试 返回目录 为简化jdbc操作,可以直接使用spring提供的JdbcTeamplate进行数据库的操作。 1. 配置依赖 相关数据库SQL /* 用户表 */ drop database if exists boot0107; create database boot0107; use boot0107; /* 创建用户表*/ create table if not exists tb_user( id varchar(36) comme

七夜之家 816

Windows 11 24H2 系统下,保姆级安装华为 eNSP 模拟器(含依赖软件下载与避坑指南)

本文提供Windows 11 24H2系统下华为eNSP模拟器的完整安装指南,涵盖系统配置调整、依赖软件安装及常见问题解决方案。特别针对新版系统的兼容性问题,提供详细的避坑步骤和优化建议,帮助网络工程师顺利完成eNSP模拟器的部署与使用。

weixin_42567752的博客 428

JdbcTemplate操作数据库

JdbcTemplate概述和准备工作JdbcTemplate 操作数据添加操作 概述和准备工作 1、什么是JdbcTemplate (1)spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作 2、准备工作 (1)引入相关依赖 (2)在spring配置文件中配置数据库连接池的配置,配置JdbcTemplate对象,并且注入dataSource 创建service类,创建dao类,在dao类注入jdbcTemplate对象 //在配置文件中需要开启注解扫描

weixin_44400823的博客 223

BAPI创建委外采购订单

使用BAPI BAPI_PO_CREATE1创建委外采购订单,组件为手工输入时,有几个点需要注意: 1、已通过CS01创建过BOM的物料,创建时会自动带出components。如果要修改当前组件清单,可以通过设置pocomponents-change_id = 'E’来实现 lv_sline = lv_sline + 1. ls_pocomponents-po_item = l_ebelp + 10. ls_pocomponents-ITEM_NO = l

Buffalo_soldier的博客 3262

NVIDIA Isaac GR00T N1 入门教程(一) 人形机器人多模态大语言模型

英伟达™ Isaac GR00T N1 是世界上首个用于通用仿人机器人推理和技能的开放式基础模型。该跨体模型采用多模态输入(包括语言和图像)在不同环境中执行操作任务。GR00T N1 在一个庞大的仿人机器人数据集上进行训练,该数据集包括真实捕获数据、使用英伟达 Isaac GR00T Blueprint 组件生成的合成数据(神经生成轨迹示例)以及互联网规模的视频数据。通过后期训练,它可以适应特定的应用、任务和环境。

2506_90492529的博客 3049

Eclipse中利用Spring的JDBC模板写DAO

DAO应该是现在比较流行的一种开发模式.不管是用什么更新的技术,hibernate或者其它的.DAO模式是应该遵循的.我写DAO大概是这样的:一个DAO接口,定义好要实现的方法名称;一个Impl实现类,主要控制连接及关闭数据库;接下来会有一个写具体方法的数据库实现类;还有一个工厂类,可以更灵活的取得不同的DAO.上面的写法感觉上不错,但是写起来比较麻烦,而且如果使用数据库连接池的活,利用JUnit

鲤鱼商城 2699

测绘程序设计——试题一:出租车轨迹数据计算

仅展示试题1的原文,如需了解其余内容,请自行购买图书李老师著作主页-http://ybli.users.sgg.whu.edu.cn/book/

chengzilhc的博客 891

jdbctemplate无where条件查询_Spring Boot系列之JdbcTemplate简单应用

前言在进行应用开发中,我们需要实现数据存储,一般会将数据存储在数据库中。而Java应用中要访问数据库会使用Java提供的JDBC进行访问。但使用原生JDBC与数据库交互较麻烦,Spring提供了JDBC模块对原生JDBC进行封装。下面简单介绍下spring-boot-starter-jdbc组件的使用。数据库首先,我们可以执行SQL语句来创建student表:CREATETABLE`...

weixin_39864387的博客 413

1、 快速掌握R:初学者的计量经济学指南

本博文旨在为初学者提供一个快速掌握R语言的指南,特别是针对计量经济学领域的应用。内容涵盖了R的基本操作、数据管理、可视化、函数编写以及高级统计分析方法,如OLS回归、异方差修正和集群标准误差计算等。通过实际示例和详细说明,帮助读者在数据分析和科学研究中更加得心应手。

weixin_35734408的博客 150

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spring JdbcTemplate应用

转自:http://www.iteedu.com/webtech/j2ee/springdiary/43.php JdbcTemplate 执行与更新 您可以使用 JdbcTemplate 的 execute()方法执行 SQL 陈述,例如: jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varcha

Welcome to My Zone 533

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

5、Spring AOP的应用配置+JdbcTemplate

05Spring AOP的应用配置 1、Spring JdbcTemplate ​ 在spring中为了更加方便的操作JDBC,在JDBC的基础之上定义了一个抽象层,此设计的目的是为不同类型的JDBC操作提供模板方法,每个模板方法都能控制整个过程,并允许覆盖过程中的特定任务,通过这种方式,可以尽可能保留灵活性,将数据库存取的工作量讲到最低。 1、配置并测试数据源 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xm

zw764987243的博客 180

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JdbcTemplate、mybatis、mybatis-plus的原理及其应用实现

JdbcTemplate,是 Spring 对 JDBC 的封装,是Spring框架提供的数据访问模块之一,用于简化JDBC操作的工具类,能够更方便的进行数据库操作。MyBatis 会根据注解的内容来执行相应的 SQL 操作。

2302_76703265的博客 1639

Spring学习之JdbcTemplate(详细介绍JdbcTemplate的应用)

dbcTemplate 是 Spring 对 JDBC 的封装,目的是使JDBC更加易于使用,JdbcTemplate是Spring的一部分。JdbcTemplate 处理了资源的建立和释放,它帮助我们避免一些常见的错误,比如忘了总要关闭连接。他运行核心的JDBC工作流,如Statement的建立和执行,而我们只需要提供SQL语句和提取结果即可。

qq_39746820的博客 8022

JdbcTemplate 应用

JdbcTemplate中的封装了很多实用的方法。 首先来介绍一下用JdbcTemplate来查询数据的方法。 1.返回指定对象类型的List (query方法) Java代码 Java代码 public List getProductModle(String value) throws DataAccessException { List resul...

zhangfeiii 146

spring中JDBCTemplate的简单应用

package cn.itcast.datasource.jdbctemplate;import cn.itcast.utils.JDBCUtils;import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;/** * @author newcityman * @date 2019/8/17...

130

六、spring之jdbcTemplate简单应用

六、spring之jdbcTemplate 一、JdbcTemplate 概述 它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装。spring框架为我们提供了很多 的操作模板类。 1操作关系型数据的: JdbcTemplate HibernateTemplate &gt; 2操作nosql数据库的: RedisTemp...

暖阳阳 228

模板方法模式在JDBCTemplate中的应用

回调接口和模板方法类之间的关系可以看作服务与被服务的关系,模板方法类想要回调接口做事,就要提供相应的资源,接口用提供的资源做事,完事后,模板方法类来处理公开的资源,回调接口不需要在关心这些。此时当调用者调用update方法时,迫使实现PreparedStatementCreater 接口中的createPreparedStatement方法。此时多条数据映射一个部门对象,根据查询结果集逐条映射的逻辑是不对的,因此查询方法也要进行改造,同样是通过的传入接口迫使调用者实现剩余逻辑的方法来做。

小鲨鱼的博客 847

JdbcTemplate应用学习

一、Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core.JdbcTemplate Hibernate5.0 org.springframework.orm.hibernate5.HibernateTemplate IBatis(MyBat...

weixin_33852020的博客 97

JdbcTemplate的介绍和应用

JdbcTemplate APIs:下载的文档-spring-5.3.8-dist\spring-framework-5.3.8\docs\javadoc-api\index.html通过Spring可以配置数据源,从而完成对数据表的操作JdbcTemplate 是 spring 提供的访问数据库的技术。可以将 JDBC 的常用操作封装为模板方法。

weixin_39158966的博客 345

JdbcTemplate基本介绍和应用

JdbcTemplate APIs:下载的文档-spring-5.3.8-dist\spring-framework-5.3.8\docs\javadoc-api\index.html通过Spring可以配置数据源,从而完成对数据表的操作JdbcTemplate 是 spring 提供的访问数据库的技术。可以将 JDBC 的常用操作封装为模板方法。

weixin_39158966的博客 757
上一篇: MySql学习(二)…(⊙_⊙;)…
下一篇: 初入前端,整理的脑图
qq_34348564
博客等级 码龄11年 2粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值