废话少说,直接上例子
1.搭建环境
就是导包和一些配置文件,这里就不多说了,可以参考附件。
注意:mysql的innodb引擎才知道事务回滚
2.编码
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
dao接口
public interface UserDAO {
public User findById(int id) throws Exception;
public void addUser(User user) throws Exception;
public void deleteUser(User user);
public void updateUser(User user);
public void batchAddUser(List<User> users);
public void createTable(String sql);
public void test(User user);
}
dao实现
@Transactional
@Component("UserDAO")
public class UserDAOImpl implements UserDAO {
@Resource
private JdbcTemplate jdbcTemplate;
@Override
public User findById(int id) throws Exception {
String sql = "select id,username from user where id = ?";
Object[] params = new Object[] { new Integer(id) };
User user = jdbcTemplate.queryForObject(sql, params, new UserRowMapper());
return user;
}
class UserRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int rowNumber) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
return user;
}
}
@Override
@Transactional//(rollbackFor=Exception.class)默认为runtimeException才回滚
public void addUser(User user) throws Exception {
String sql = "insert into user(username,password) values(?,?)";
List<String> list = new ArrayList<String>();
list.add(user.getUsername());
list.add(user.getPassword());
jdbcTemplate.update(sql, list.toArray());
//throw new Exception("error");
}
@Override
public void deleteUser(User user) {
String sql = "delete from user where id=?";
List<String> list = new ArrayList<String>();
list.add(user.getId()+"");
jdbcTemplate.update(sql, list.toArray());
}
@Transactional(rollbackFor=Exception.class)
public void test(User user){
String sql = "delete from user where id="+user.getId();
jdbcTemplate.update(sql);
sql = "update user set username='aa',password='bb' where id="+user.getId();
jdbcTemplate.update(sql);
}
@Override
@Transactional//(rollbackFor=Exception.class)
public void updateUser(User user) {
String sql = "update user set username=?,password=? where id=?";
List<String> list = new ArrayList<String>();
list.add(user.getUsername());
list.add(user.getPassword());
list.add(user.getId()+"");
jdbcTemplate.update(sql, list.toArray());
}
@Override
@Transactional//(rollbackFor=Exception.class)
public void batchAddUser(final List<User> users) {
String sql = "insert into user (username,password) values(?,?)";
BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter() {
public int getBatchSize() {
return users.size(); //这个方法设定更新记录数,通常List里面存放的都是我们要更新的,所以返回list.size();
}
public void setValues(java.sql.PreparedStatement ps, int i)
throws SQLException {
User user = users.get(i);
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
}
};
jdbcTemplate.batchUpdate(sql, setter);
}
@Override
public void createTable(String sql) {
jdbcTemplate.execute(sql);
}
}
测试类
package test.dao;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import test.model.User;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:lms-admin.xml" })
public class UserDAOImpl {
//private static BeanFactory factory = new ClassPathXmlApplicationContext("lms-admin.xml");
//UserDAO userDAO = (UserDAO) factory.getBean("UserDAO");
@Resource
UserDAO userDAO;
@Test
public void testCreate() throws Exception{
String sql = "create table user(id int(20) primary key auto_increment,username varchar(20),password varchar(20));";
userDAO.createTable(sql);
}
@Test
public void testSearch() throws Exception{
User user = userDAO.findById(6);
System.out.println(user.getUsername());
}
@Test
public void testSave() throws Exception{
User user = new User();
//user.setId(2);
user.setPassword("aaa");
user.setUsername("zs");
userDAO.addUser(user);
}
@Test
public void testDelete() throws Exception{
User u = userDAO.findById(5);
userDAO.deleteUser(u);
}
@Test
public void testUpdate() throws Exception{
User u = userDAO.findById(5);
u.setPassword("lkasjdflkasd");
u.setUsername("asdofjiweif");
userDAO.updateUser(u);
}
@Test
public void testBatchSave() throws Exception{
List<User> users = new ArrayList<User>();
User user1 = new User();
user1.setPassword("aaa");
user1.setUsername("zs");
User user2 = new User();
user2.setPassword("aaa");
user2.setUsername("张三");
users.add(user1);
users.add(user2);
userDAO.batchAddUser(users);
}
@Test
public void testRoll() throws Exception{
User user = userDAO.findById(5);
userDAO.test(user);
}
}
- 大小: 9.5 KB
分享到:
相关推荐
在Java应用中,特别是在基于Spring的系统中,`JdbcTemplate`是一个非常常用的数据访问工具,它提供了事务管理、参数绑定、异常翻译等功能,使得数据库操作更加简单、安全。 首先,要使用`JdbcTemplate`,我们需要...
SpringBoot 2.x 入门教程之引入 JDBC 模块与 JdbcTemplate 简单使用方法 本文主要介绍了 Spring Boot 2.x 入门教程之引入 JDBC 模块与 JdbcTemplate 简单使用方法,并详细讲解了 Spring Boot 2.x 项目中如何引入 ...
**JdbcTemplate简单实例** 在Java开发中,数据库操作是一个非常重要的环节。Spring框架提供了一个强大的工具类——JdbcTemplate,它简化了与数据库交互的过程,帮助开发者避免了手动处理JDBC的繁琐工作,如连接管理...
在Java的Spring框架中,`JdbcTemplate`是一个非常重要的组件,它提供了数据库操作的简单抽象,使得开发者可以方便地执行SQL语句而无需编写复杂的DAO(数据访问对象)层。在处理大量数据时,传统的分页方法可能会导致...
本篇将详细讲解JdbcTemplate的简单示例,帮助开发者更好地理解和运用这个强大的数据库访问组件。 JdbcTemplate是Spring对Java的JDBC API进行封装后的产物,它的主要目标是消除手动处理结果集、连接关闭等繁琐工作,...
这篇博客文章的标题"打印JdbcTemplate执行sql"主要涉及如何在使用`JdbcTemplate`时,追踪并打印出执行的SQL语句,这对于调试和性能分析非常有帮助。接下来,我们将深入探讨`JdbcTemplate`的工作原理以及如何实现SQL...
而JdbcTemplate是Spring框架的一部分,它提供了一种简单且安全的方式来操作数据库,避免了直接编写SQL导致的潜在错误。 首先,确保你的项目已经集成了Spring Boot和MySQL的相关依赖。在`pom.xml`文件中,添加以下...
通过上述分析,我们可以看到SpringJdbcTemplate是一个强大且灵活的工具,它通过封装JDBC操作,使得数据库访问变得更加简单和安全。在实际开发中,合理利用其特性,可以有效提升开发效率和代码质量。
本文将详细探讨JdbcTemplate的主要使用方法和优势。 1. **执行SQL语句** 使用JdbcTemplate的`execute()`方法可以执行任意的SQL语句,包括创建表、删除表等DDL操作。例如: ```java jdbcTemplate.execute(...
在这个实例工程中,我们将深入探讨Spring JdbcTemplate的基本使用、优势以及常见操作。 一、Spring JdbcTemplate简介 Spring JdbcTemplate的出现是为了弥补原生JDBC在编码上的繁琐,它通过模板方法模式,将SQL执行...
然而,单纯使用`JdbcTemplate`进行数据库操作时,并不能自动管理事务,因此我们需要了解如何通过`JdbcTemplate`结合Spring框架来实现事务控制。 #### 二、原生 JDBC 的事务控制 在没有使用任何框架的情况下,我们...
本篇文章将深入探讨Spring JdbcTemplate的使用方法和核心概念,并结合一个实际的图书馆系统Demo进行阐述。 一、Spring JdbcTemplate简介 Spring JdbcTemplate是Spring JDBC模块的核心组件,它提供了一套模板方法,...
通过使用JdbcTemplate,开发者可以避免编写大量重复的代码,如打开和关闭连接、处理结果集等。JdbcTemplate的主要功能包括执行SQL查询、更新、存储过程,以及事务管理。 JdbcTemplate的工作原理主要包括以下几个...
当hql等查询方式不能满足性能或灵活性的要求,必须使用SQL时,大家有三... JDBCTemplate的使用很简单,只要在ApplicationContext文件里定义一个jdbcTemplate节点,POJO获得注入后可以直接执行操作,不需要继承什么基类
总的来说,这个“一个简单的spring-jdbctemplate扩展”项目旨在通过提供更高级别的抽象和便捷的API,使得开发人员在使用Spring JdbcTemplate时能更高效、更安全地进行数据库操作。通过研究这个项目的代码,我们可以...
通过使用JdbcTemplate,开发者可以避免编写大量的重复代码,如手动管理连接、处理结果集等,从而专注于业务逻辑。本文将深入探讨如何利用Spring JdbcTemplate进行CURD(Create、Read、Update、Delete)操作。 1. ...
总结来说,Spring的JdbcTemplate提供了简洁、强大的API,使得数据库操作变得更加简单和安全。通过使用它,我们可以避免手动管理数据库连接,减少潜在的资源泄露问题,同时增强代码的可读性和可维护性。通过结合...
在使用JdbcTemplate之前,首先需要配置数据源(DataSource)。Spring框架支持多种数据源实现,如Apache Commons DBCP或HikariCP。通过Spring的依赖注入(Dependency Injection,DI)特性,我们可以将数据源实例注入...