发表于: 2017-10-27 22:55:04

2 713


今天学习的内容:

今天用JDBC完成了对数据库的增加,删除和修改。

项目目录结构:

User类:

package jdbcTemplate.bean;

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;
   }

   @Override
   public String toString() {
       return "User{" +
               "id=" + id +
               ", username='" + username + '\'' +
               ", password='" + password + '\'' +
               '}';
   }
   public void UserMod(int id,String username,String password) {
       this.id = id;
       this.username = username;
       this.password = password;
   }
}

UsersDao接口:

package jdbcTemplate.implement;

import jdbcTemplate.bean.User
import java.util.List;

public interface UsersDao {
   public List<User> getUserById(int id);
   public List<User> listALL();
   public void add(User User);
   public void update(String username,int id);
   public void delete(int user);
}

UsersImpl类:

package jdbcTemplate.implement;

import jdbcTemplate.bean.User;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;

public class UsersImpl implements UsersDao{
   //Spring提供的JDBCTemolate能直接将数据对象映射成实体类,不需要再获取,ResultSet去获取值/赋值等操作,提高开发效率
   private JdbcTemplate template;

   public JdbcTemplate getTemplate(){return template;}
   public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
       this.template = jdbcTemplate;
   }
   public List<User> listALL(){
       String sql = "select * from user";
       return (List<User>) template.query(sql,new BeanPropertyRowMapper(User.class));

   }
   public void add(User user) {
       String sql = "insert into user(username,password)" +
               " value(?,?)";
       template.update(sql, user.getUsername(),user.getPassword());
   }
   public void update(String username,int id){
       String sql = "update user set username=? where id = ?";
       template.update(sql,username,id);
   }
   public void delete(int id){
       String sql ="delete from user where id =?";
       template.update(sql,id);
   }
   public List<User>getUserById(int id){
       String sql = "select * from user where id = ?";
       return(List<User>)template.query(sql, new BeanPropertyRowMapper(User.class),id);
   }
}


配置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"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="
  http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/aop
  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  http://www.springframework.org/schema/tx
  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   <!--引入外部属性文件↓-->
   <context:property-placeholder location="classpath:jdbc.properties"/>
   <!--连接数据库的配置-->

   <!--声明bean,,,未将DataSource声明为Bean,则无法使用数据库事务.-->
   <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
       <property name="user" value="${jdbc.user}"></property>
       <property name="password" value="${jdbc.password}"></property>
       <property name="driverClass" value="${jdbc.driverClass}"></property>
       <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
   </bean>

   <!--配置jdbcTemplate,并装配DataSource数据源属性  -->
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <property name="dataSource" ref="dataSource"></property>
   </bean>

   <bean id="usersImpl" class="jdbcTemplate.implement.UsersImpl">
       <property name="jdbcTemplate" ref="jdbcTemplate"></property>
   </bean>

</beans>

jdbc.properties中的代码:

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/test
jdbc.user=root
jdbc.password=
123456

测试类AddTest:

import jdbcTemplate.bean.User;
import jdbcTemplate.implement.UsersDao;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AddTest {

       ClassPathXmlApplicationContext appConetxt = new ClassPathXmlApplicationContext("applicationContext.xml");
       UsersDao usersDao = appConetxt.getBean(UsersDao.class);

       @Test//可以看到,该操作不用我们自己再去获取数据库连接信息,而是直接传递sql语句及其参数!
       public void testAdd() throws Exception {

           User user = new User();
           user.setUsername("zhangfei");
           user.setPassword("111111");
           usersDao.add(user)
       }
   }

测试类UpdateTest:

import jdbcTemplate.implement.UsersDao;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UpdateTest {

       ClassPathXmlApplicationContext appConetxt = new ClassPathXmlApplicationContext("applicationContext.xml");
       UsersDao userDAO = appConetxt.getBean(UsersDao.class);
       int id = 3;
       @Test
       public void testUpdate() throws Exception {
           userDAO.update("libai",3);

}

测试类DeleteTest:

import jdbcTemplate.implement.UsersDao;
import jdbcTemplate.implement.UsersImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DeleteTest {

       ClassPathXmlApplicationContext appConetxt = new ClassPathXmlApplicationContext("applicationContext.xml");
       //数据源和实现,及bean方法的调用接口
//    可以看到,该操作不用我们自己再去获取数据库连接信息,而是直接传递sql语句及其参数!
       UsersDao userDao = appConetxt.getBean(UsersDao.class);
       int id = 2900;

       @Test
       public void testDelete() throws Exception {
           userDao.delete(6);
       }

}


增加之前的数据库表:

增加之后的数据库表:

删除之前的数据库表:

删除之后的数据库表:

更新之前的数据库表:

更新之后的数据库表:

收获:加深了对DBCTemplate操作数据库这个知识的理解。

问题:刚开始不明白JDBCTemplate的知识,走了很多弯路。

明天继续学习关于JDBCTemplate的知识。



返回列表 返回列表
评论

    分享到