maven、spring jdbc 與mysql


做一個簡單的有數據庫的maven項目,目前還是沒有前端,而且沒有使用mybatis。之后會向項目中添加。

 

圖片

對於上圖的說明,第一個大的表格是未運行測試程序數據表的內容,第二個大的表格是運行測試程序后數據表的內容。

 

 

 

此例子在http://www.cnblogs.com/hongten/archive/2012/03/09/java_spring_jdbc.html的基礎上進行修改,鏈接中的網頁的缺憾在於沒有給出如何建立數據庫和表的語句。

由於使用了maven工程,所以更容易添加jar包。

接下來對此例子進行詳細的說明。

 

 

從最開始的pom文件開始進行說明

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.spring</groupId>
  <artifactId>mavenSpringJdbc</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>mavenSpringJdbc Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.19</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.4</version>
    </dependency>
    
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>3.0.5.RELEASE</version>    
    </dependency>    
    
    <dependency>
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-servlet_2.5_spec</artifactId>
        <version>1.2</version>
    </dependency>
    
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>mavenSpringJdbc</finalName>
  </build>
  <properties>
      <springVersion>3.2.5.RELEASE</springVersion>
  </properties>
</project>

在pom文件中之前忘了添加commons-dbcp這個文件。

 在原來的例子中沒有建表語句。將這個缺陷不上。

觀察bean.xml文件中關於數據庫連接的部分,

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
        <property name="url"
            value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=UTF-8" />
        <property name="username" value="root" />
        <property name="password" value="root" />
        <!-- 連接池啟動時的初始值 -->
        <property name="initialSize" value="1" />
        <!-- 連接池的最大值 -->
        <property name="maxActive" value="300" />
        <!-- 最大空閑值.當經過一個高峰時間后,連接池可以慢慢將已經用不到的連接慢慢釋放一部分,一直減少到maxIdle為止 -->
        <property name="maxIdle" value="2" />
        <!--  最小空閑值.當空閑的連接數少於閥值時,連接池就會預申請去一些連接,以免洪峰來時來不及申請 -->
        <property name="minIdle" value="1" />
    </bean>

其中

<property name="url"
            value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=UTF-8" />
這個說明在mysql中建立了一個spring的數據庫

CREATE DATABASE spring DEFAULT CHARACTER SET utf8;
USE spring;

建立了表后,建數據庫。javabean是這個樣子的
package com.b510.bean;

/**
 * 普通的javaBean類Person
 * 
 * @author Hongten
 * 
 */
public class Person {

    /**
     * id號
*/
    private int id;
    /**
     * 姓名
*/
    private String name;
    /**
     * 年齡
*/
    private int age;
    /**
     * 性別
*/
    private String sex;


    public Person(int id, String name, int age, String sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public Person() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

}

表的信息如下:

建表語句:

CREATE TABLE person(

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(30),

age INT,

sex VARCHAR(30)

)ENGINE=InnoDB;

 

之后需要給表中插入數據,本例子需要插入最少七個數據,插入數據語句如下:

INSERT INTO person(id,name,age,sex)VALUES(1,'喬峰',36,'男');

 

之后就是spring的內容了。先將文件列舉如下:

package com.b510.service;

import java.util.List;

import com.b510.bean.Person;

public interface PersonService {

    /**
     * 保存Person
     * 
     * @param person
*/
    public abstract void save(Person person);

    /**
     * 更新Person
     * 
     * @param person
*/
    public abstract void update(Person person);

    /**
     * 獲取Person
     * 
     * @param id
     * @return
*/
    public abstract Person getPerson(Integer id);

    /**
     * 獲取所有Person
     * 
     * @return
*/
    public abstract List<Person> getPerson();

    /**
     * 刪除指定id的Person
     * 
     * @param id
*/
    public abstract void delete(Integer id);

}
package com.b510.service.impl;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;

import com.b510.bean.Person;
import com.b510.service.PersonService;

/**
 * 業務bean
 * 
 * @author Hongten
 * 
 */
public class PersonServiceBean implements PersonService {

    /**
     * 數據源
*/
    private DataSource dataSource;
    /**
     * spring提供的jdbc操作輔助類
*/
    private JdbcTemplate jdbcTemplate;

    // 設置數據源
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    public void save(Person person) {
        jdbcTemplate.update("insert into person(name,age,sex)values(?,?,?)",
                new Object[] { person.getName(), person.getAge(),
                        person.getSex() }, new int[] { java.sql.Types.VARCHAR,
                        java.sql.Types.INTEGER, java.sql.Types.VARCHAR });
    }

    public void update(Person person) {
        jdbcTemplate.update("update person set name=?,age=?,sex=? where id=?",
                new Object[] { person.getName(), person.getAge(),
                        person.getSex(), person.getId() }, new int[] {
                        java.sql.Types.VARCHAR, java.sql.Types.INTEGER,
                        java.sql.Types.VARCHAR, java.sql.Types.INTEGER });

    }

    public Person getPerson(Integer id) {
        Person person = (Person) jdbcTemplate.queryForObject(
                "select * from person where id=?", new Object[] { id },
                new int[] { java.sql.Types.INTEGER }, new PersonRowMapper());
        return person;

    }

    @SuppressWarnings("unchecked")
    public List<Person> getPerson() {
        List<Person> list = jdbcTemplate.query("select * from person", new PersonRowMapper());
        return list;

    }

    public void delete(Integer id) {
        jdbcTemplate.update("delete from person where id = ?", new Object[] { id },
                new int[] { java.sql.Types.INTEGER });

    }
}
package com.b510.service.impl;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import com.b510.bean.Person;

public class PersonRowMapper implements RowMapper {

    public Object mapRow(ResultSet set, int index) throws SQLException {
        Person person = new Person(set.getInt("id"), set.getString("name"), set
                .getInt("age"), set.getString("sex"));
        return person;
    }

}
package com.b510.test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.b510.bean.Person;
import com.b510.service.PersonService;

public class SpringJDBCTest {

    public static void main(String[] args) {
        ApplicationContext act = new ClassPathXmlApplicationContext("bean.xml");

        PersonService personService = (PersonService) act
                .getBean("personService");

        Person person = new Person();
        person.setName("蘇東坡");
        person.setAge(21);
        person.setSex("男");

        // 保存一條記錄
        personService.save(person);

        List<Person> person1 = personService.getPerson();
        System.out.println("++++++++得到所有Person");
        for (Person person2 : person1) {
            System.out.println(person2.getId() + "  " + person2.getName()
                    + "   " + person2.getAge() + "  " + person2.getSex());
        }
        Person updatePerson = new Person();
        updatePerson.setName("Divide");
        updatePerson.setAge(20);
        updatePerson.setSex("男");
        updatePerson.setId(5);
        // 更新一條記錄
        personService.update(updatePerson);
        System.out.println("******************");

        // 獲取一條記錄
        Person onePerson = personService.getPerson(2);
        System.out.println(onePerson.getId() + "  " + onePerson.getName()
                + "  " + onePerson.getAge() + "  " + onePerson.getSex());
        // 刪除一條記錄
        personService.delete(1);
    }
}
<?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-2.5.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    <!--配置數據源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
        <property name="url"
            value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=UTF-8" />
        <property name="username" value="root" />
        <property name="password" value="root" />
        <!-- 連接池啟動時的初始值 -->
        <property name="initialSize" value="1" />
        <!-- 連接池的最大值 -->
        <property name="maxActive" value="300" />
        <!-- 最大空閑值.當經過一個高峰時間后,連接池可以慢慢將已經用不到的連接慢慢釋放一部分,一直減少到maxIdle為止 -->
        <property name="maxIdle" value="2" />
        <!--  最小空閑值.當空閑的連接數少於閥值時,連接池就會預申請去一些連接,以免洪峰來時來不及申請 -->
        <property name="minIdle" value="1" />
    </bean>
    <!--
        采用注解方式來配置事務。針對數據源的事務管理器
        ,把我們定義的數據源注入到DataSourceTransactionManager類的屬性dataSource中
    -->
    <bean id="txManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!--
        引入命名空間: 1.xmlns:tx="http://www.springframework.org/schema/tx
        2.http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
        采用@Transaction注解方式使用事務管理器
    -->
    <tx:annotation-driven transaction-manager="txManager" />

    <!-- 配置業務bean:PersonServiceBean -->
    <bean id="personService" class="com.b510.service.impl.PersonServiceBean">
        <!-- 向屬性dataSource注入數據源 -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
</beans>

然后運行測試類就可以得到結果了。

搭建此例子就可以之后具體分析如何寫這樣的例子了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM