zoukankan      html  css  js  c++  java
  • 使用Spring框架下的JdbcTemplate 完成对数据库的增删改查操作

    还记得以前做的毕业设计是用的C3P0包,而当时并没有使用到三大框架。现在毕业工作了,但是感觉要学的比工作深一层,一是提高自己的能力,二是以防万一要换工作了,起码掌握的东西能支撑自己以后的工作。不过这时候感觉自己就像java萌新(不,其实就是。)

    现在第一篇技术相关的文章就写我第一次用Spring框架操作数据库吧,可能Spring的版本旧了,但是刚学应该之后的不会有太大影响,不过要注意当前版本最好是跟jdk1.7使用,jdk1.8的话,我之前用Spring注解开发的时候会报错,看客注意下哦。

    涉及:Mysql5.7,Eclipse javaEE,Spring3.2,JDK1.7

    首先,我们需要先导入Spring包中必要的jar包,以及我们的mysql驱动包,C3P0包和Spring的jdbc  ,tx事务包

    接下来,我们就现在数据库创建一张表,简单点的,字段就这些,并创建一个POJO类User并录入一条记录

    public class User {
    	Integer id;
    	String username;
    	String password;
    	Integer age;
    	String desc;
    	
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer 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;
    	}
    	public void setAge(Integer age) {
    		this.age = age;
    	}
    	public String getDesc() {
    		return desc;
    	}
    	public void setDesc(String desc) {
    		this.desc = desc;
    	}
    	public Integer getAge() {
    		return age;
    	}
    	
    	@Override
    	public String toString() {
    		return "User [id=" + id + ", username=" + username + ", password="
    				+ password + ", age=" + age + ", des=" + desc + "]";
    	}
    	
    }



    为什么使用Integer而不使用int,记得应该是之前学Hibernate时的问题,不过刚刚把之前Hibernate的代码改为int好像也没有什么问题,暂时问题先放下。

    创建Dao类,实现增删改查,这里增删改查实际上都是调用jdbcTemplate的update方法

    package com.hpp.f_prop;
    
    
    import org.springframework.jdbc.core.support.JdbcDaoSupport;
    
    public class UserDao extends JdbcDaoSupport{
    	
    	public void update(User user) {
    		this.getJdbcTemplate().update("update java_user set username=?,password=? where id=?",
    					user.getUsername(),user.getPassword(), user.getId());
    	}
    	public User queryUser(String username) {
    		//第二个参数需要自己定义一个实现了RowMapper的类来放置,第三个参数则是?对应的参数
    		return this.getJdbcTemplate().queryForObject("select * from java_user where username=?", new MyRowMapper(), username);
    	}
    	public int insert(User user) {
    		//返回影响的行数
    		return this.getJdbcTemplate().update("insert into java_user (username,password,age,desc) value(?,?,?,?)",
    					user.getUsername(), user.getPassword(), user.getAge(), user.getDesc());
    	}
    	public int delete(int id) {
    		//返回影响的行数
    		return this.getJdbcTemplate().update("delete from java_user where id=?", id);
    	}
    }



    下面是自定义的RowMapper,用于接收query回来的对象

    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import org.springframework.jdbc.core.RowMapper;
    
    public class MyRowMapper implements RowMapper<User>{
    
    	@Override
    	public User mapRow(ResultSet rs, int rowNum) throws SQLException {
    		User user = new User();
    		user.setId(rs.getInt("id"));
    		user.setUsername(rs.getString("username"));
    		user.setAge(rs.getInt("age"));
    		user.setDesc(rs.getString("desc"));
    		return user;
    	}
    
    }

    之后我们要根据java连接数据库的3步走:加载驱动,创建连接地址,连接的账号和密码,这个时候就要配置Spring框架的配置文件了

    添加我们的userDao的bean

    <?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="com.mchange.v2.c3p0.ComboPooledDataSource">
    		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    		<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/mydb"></property>
    		<property name="user" value="root"></property>
    		<property name="password" value="8469"></property>
    	</bean>
    	<bean id="userDao" class="com.hpp.f_prop.UserDao">
    		<property name="dataSource" ref="dataSource"></property>
    	</bean>
    </beans>

    现在就可以开始在main函数下进行测试了

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TestJdbcTemplate {
    
    	public static void main(String[] args) {
    		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/hpp/f_prop/applicationContext.xml");
    		UserDao ud = (UserDao) applicationContext.getBean("userDao");
    		User user = new User();
    		//更新用户
    //		user.setId(1);
    //		user.setUsername("bb");
    //		user.setPassword("root");
    		//ud.update(user);
    		//删除用户
    		ud.delete(1);
    		//插入用户
    		user.setUsername("Mr_h");
    		user.setPassword("8888");
    		user.setAge(10);
    		user.setDesc("I am well.");
    		ud.insert(user);
    		
    		//查询用户
    		System.out.println(ud.queryUser("Mr_h"));
    		
    	}
    }



    注意:在写Dao类的时候,不要这样写,否则当你使用jdbcTemplate.update()的时候,就会出现空指针异常了,不信可以试试,不想像我源码中的写法,可以看文末的链接

    以上,第一次发表关于java的文章,刚接触内容较浅显,如有错误以及需要改进的地方 劳烦指出。

    以下列出参考文章:

    http://blog.csdn.net/u014800380/article/details/64125653

  • 相关阅读:
    SD卡image 的文件系统分区太小无法安装更多库(如何扩大SD卡rootfs分区)
    ubuntu下生成dtb文件提示:sopc2dts: command not found
    HPS端用于信息打印窗口的 串口的驱动是什么时候加载的呢?
    给 HPS 增添了一个用FPGA逻辑自定义的外设以后, SD卡 image里面哪些文件要更新?
    为何FPGA 外设 IP 与 HPS IP 之间有个 Avalon-MM Pipeline Bridge IP?
    什么是根文件系统(root filesystem)(未完待续)
    为什么preloader和uboot要放置在RAW A2分区?
    重装系统的时候最好选择?(未完待续)
    Android相关知识点面试
    java知识查漏补缺
  • 原文地址:https://www.cnblogs.com/runningRookie/p/11108785.html
Copyright © 2011-2022 走看看