博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6、spring数据库操作
阅读量:4347 次
发布时间:2019-06-07

本文共 6415 字,大约阅读时间需要 21 分钟。

1.目录结构:

2.数据表结构:

3.代码如下:

Person.java

package db.entity;
public class Person {
    private String username;
    private String password;
    public Person(){}
    
    public Person(String username) {
        this.username = username;
    }
    
    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;
    }
}

PersonService.java

package db.service;
import java.util.List;
import db.entity.Person;
public interface PersonService {
    public void save(Person person);
    public void update(Person person);
    public Person getPerson(String username);
    public List<Person> getPersons();
    public void delete(String uersname);
}

PersonServiceBean.java

package db.service.impl;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Transactional;
import db.entity.Person;
import db.service.PersonService;
@Transactional
public class PersonServiceBean implements PersonService {
    private JdbcTemplate jdbcTemplate;
    
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
    
    @Override
    public void save(Person person) {
        // TODO Auto-generated method stub
        jdbcTemplate.update("insert into s1 (username, password) values(?, ?)", new Object[] {person.getUsername(), person.getPassword()},
                new int[] {java.sql.Types.VARCHAR, java.sql.Types.VARCHAR});
    }
    @Override
    public void update(Person person) {
        jdbcTemplate.update("update s1 set password=? where username=?", new Object[]{person.getPassword(), person.getUsername()},
                new int[]{java.sql.Types.VARCHAR, java.sql.Types.VARCHAR});
    }
    @SuppressWarnings("unchecked")
    @Override
    public Person getPerson(String username) {
        return (Person) jdbcTemplate.queryForObject("select * from s1 where username=?", new Object[]{username},
                new int[] {java.sql.Types.VARCHAR}, new PersonRowManager());
    }
    @SuppressWarnings("unchecked")
    @Override
    public List<Person> getPersons() {
        // TODO Auto-generated method stub
        return (List<Person>) jdbcTemplate.query("select * from s1", new PersonRowManager());
    }
    @Override
    public void delete(String uersname) {
        jdbcTemplate.update("delete from s1 where username=?", new Object[]{uersname},
                new int[]{java.sql.Types.VARCHAR});
    }
}

PersonRowManager.java

package db.service.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import db.entity.Person;
public class PersonRowManager implements RowMapper{
    @Override
    public Object mapRow(ResultSet rs, int index) throws SQLException {
        // TODO Auto-generated method stub
        Person person = new Person(rs.getString("username"));
        person.setPassword(rs.getString("password"));
        return person;
    }
    
}
PersonServiceBeanTest.java
package db.junit;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import db.entity.Person;
import db.service.PersonService;
public class PersonServiceBeanTest {
    
    private PersonService personService;
    @Before
    public void setUp() throws Exception {
        try {
            ApplicationContext cxt = new ClassPathXmlApplicationContext("beans.xml");
            personService = (PersonService) cxt.getBean("personService");
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
    }
    @After
    public void tearDown() throws Exception {
    }
    @Test
    public void testSetDataSource() {
        fail("Not yet implemented");
    }
    @Test
    public void testSave() {
        Person person = new Person("wxt");
        person.setPassword("3546832");
        System.out.println(person.getUsername() + "   " + person.getPassword());
        personService.save(person);
    }
    @Test
    public void testUpdate() {
        Person person = new Person("zmp");
        person.setPassword("changed");
        personService.update(person);
    }
    @Test
    public void testGetPerson() {
        Person person = personService.getPerson("zmp");
        System.out.println(person.getUsername());
    }
    @Test
    public void testGetPersons() {
        for(Person person : personService.getPersons()){
            System.out.println(person.getUsername());
        }
    }
    @Test
    public void testDelete() {
        personService.delete("zmpandzmp");
    }
}

4.配置如下:

beans.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" 
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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"
>
     <context:property-placeholder location="classpath:jdbc.properties"/>
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driverClassName}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
         <!-- 连接池启动时的初始值 -->
         <property name="initialSize" value="${initialSize}"/>
         <!-- 连接池的最大值 -->
         <property name="maxActive" value="${maxActive}"/>
         <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
         <property name="maxIdle" value="${maxIdle}"/>
         <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
         <property name="minIdle" value="${minIdle}"/>
     </bean>
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource"/>
    </bean>
    <tx:annotation-driven transaction-manager="txManager"/>
    
    <bean id="personService" class="db.service.impl.PersonServiceBean">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

jdbc.properties

driverClassName=org.gjt.mm.mysql.Driver
url=jdbc\:mysql\://localhost\:3306/spring?useUnicode\=true&characterEncoding\=UTF-8
username=root
password=123456
initialSize=1
maxActive=500
maxIdle=2
minIdle=1

5.运行结果如下(只测试getPersons()方法):

与数据库的内容比较:

转载于:https://www.cnblogs.com/zmpandzmp/p/3648818.html

你可能感兴趣的文章
常用正则表达式
查看>>
6.2.7 Math对象的使用
查看>>
Linux 添加PHP curl扩展
查看>>
[ES6] The Iterator Protocol
查看>>
[TypeScript] Generating Definition Files
查看>>
内-外测试
查看>>
HotSpot VM GC 的种类(转)
查看>>
BZOJ3329: Xorequ(二进制数位dp 矩阵快速幂)
查看>>
[转]C#图像处理 (各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)...
查看>>
在此落地
查看>>
Codeforces 678E Another Sith Tournament 状压DP
查看>>
201771010112罗松《面向对象程序设计(java)》第七周学习总结
查看>>
mysql数据库的锁表与解决办法(原博客url:http://www.cnblogs.com/wanghuaijun/p/5949934.html)...
查看>>
Git
查看>>
【CF860E】Arkady and a Nobody-men 长链剖分
查看>>
python爬虫模拟登陆
查看>>
Redis(六)-- SpringMVC整合Redis
查看>>
bzoj1660:乱发节
查看>>
即时通信系统Openfire分析之四:消息路由
查看>>
SQL 笔记
查看>>