java - 如何将Spring框架和MySQL与Java swing应用程序结合起来?

标签 java mysql spring swing jdbc

我有一个 Java swing 应用程序,我想在其中使用 Spring 框架并通过 JDBC 连接 MySQL 数据库。这是我想帮助的一个 friend 的项目,所以与工作无关。我对 Spring 框架和 JDBC 的了解只是基础知识。 数据库连接不起作用,我希望有一个解决方案。整个项目结构如下,

enter image description here

正如您所看到的,该项目有 3 个主要包(com.dev.frontend.config、com.dev.frontend.panels 和 com.dev.frontend.services;面板内有2 个子包:editlist )

这是我的进展情况。

  1. 我使用 pom.xml 文件获取依赖项并更新 Maven 项目。这些是我当前在图片中显示的依赖项。 enter image description here

  2. 我使用 Apache tomcat v8.0 作为服务器,并在 context.xml 文件中更新了数据库信息,如下所示,

**

<Context>
<Resource name="jdbc/spring" auth="Container" type="javax.sql.DataSource"
            maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="student"
            password="student" driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/mySalesApp1" />
</Context>
** 这为服务器提供了用户名、密码和数据库名称。

  • 我在项目中添加一个新的 WebContent 文件夹,并将 web.xml 和 Offers-servlet.xml 文件放入其中,如下所示, enter image description here
  • web.xml 文件如下所示,

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    
      <display-name>MySpringMVC</display-name>
    
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
    
    
      <servlet>
        <description></description>
        <display-name>offers</display-name>
        <servlet-name>offers</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>offers</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    
      <description>Spring Database</description>
      <resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/spring</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>
    
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
    
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:com/dev/frontend/config/dao-context.xml
            </param-value>
      </context-param>
    
    </web-app>
    

    程序知道数据库连接来自 <resource-ref>标签。 Offers-servlet.xml 文件是从 web.xml 文件引用的,但我没有使用它。在这个文件的最后,有 <context-param>标签告诉扫描 config 包内部以查找 dao-context.xml 文件。

  • dao-context.xml 如下所示,

    enter image description here

  • 它知道使用 <jee:jndi-lookup> 的数据库连接标记并查找服务包。

  • 在服务包内,有 Services.java 源文件,我正在尝试执行以下查询,

      @Component("Services")
      public class Services {
    
    
    private static NamedParameterJdbcTemplate jdbc;
    
    @Autowired
    public void setDataSource(DataSource jdbc) {
    
        this.jdbc = new NamedParameterJdbcTemplate(jdbc);
    }
    
    public static List<Customer> getMyCustomer() {
    
        return jdbc.query("select * from Customer", new RowMapper<Customer>(){
    
            public Customer mapRow(ResultSet rs, int rowNum)
                    throws SQLException {
    
                Customer customer = new Customer();
    
                customer.setCustomerID(rs.getString("CustomerID"));
                customer.setName(rs.getString("Name"));
                customer.setAddress(rs.getNString("Address"));
                customer.setPhone1(rs.getNString("Phone 1"));
                customer.setPhone2(rs.getNString("Phone 2"));
    
                customer.setCreditLimit(rs.getDouble("Credit Limit"));
                customer.setCurrentCredit(rs.getDouble("Current Credit"));
    
                return customer;
            }
        });
    }
    
    }
    
  • getMyCustomer() 中的 SQL 查询无法正常工作并返回以下错误,

    enter image description here

    如何解决这个问题并正确连接数据库?谢谢。

    最佳答案

    升级到 Spring 4 时,您可以使用:

    文件:database-context.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:tx="http://www.springframework.org/schema/tx"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-4.2.xsd
            http://www.springframework.org/schema/tx 
            http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
    
    
        <context:annotation-config/>
        <context:spring-configured />
        <tx:annotation-driven/>
        <aop:aspectj-autoproxy proxy-target-class = "true"/>
    
        <bean id="emf"
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="packagesToScan" value="your.jpa.generated"/>
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
            </property>
            <property name="jpaProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                </props>
            </property>
        </bean>
    
        <bean id="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://yourserver:3306/yourdatabase" />
            <property name="username" value="youruser" />
            <property name="password" value="yourpassword" />
        </bean>
    
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="emf" />
        </bean>
    
        <bean id="persistenceExceptionTranslationPostProcessor"
            class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
    
    </beans>
    

    然后在你的类(class)中添加:

    @PersistenceContext
    private EntityManager em;
    

    并使用 EntityManager 进行查询。

    关于java - 如何将Spring框架和MySQL与Java swing应用程序结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33586910/

    相关文章:

    java - JPA CAN_NOT_JOIN_TO_BASIC

    java - 图形界面java插入图像空间

    MySQL计算日期和非连续日期之间的差异

    spring - 如何解决Gradle服务之间的传递依赖关系?

    java - PowerMock AmazonS3Client 配置问题

    java - 角色与墙壁的碰撞

    java - 如何在 android/dalvik 上动态加载 Java 类?

    php - 如何从同一个表的列中插入逗号分隔值?

    mysql - 一个简单的脚本,用于将所有 mysql 数据库备份到单独的文件夹中

    spring - 多个 application.yml 未在 Spring Boot 中合并