spring+springmvc+mybatis+mysql实现登录功能(上)

注:classpath 指的为target文件夹,classpath*为有多个classpath时使用。


1.在idea中建立maven 工程。

具体过程:File -》new project -》选择maven  勾选create from archetype,选中以webapp结尾的一行,点击next,groupid以及artifactid可以随意起名,点击next,选择加号,添加key:archetypeCatalog,value:internal,点击next,之后就随意起名,放在d盘,最好不是c盘下。next,完成后就出现web工程。

2.建立目录结构(注意如果建立的有误,则不能正确读取到文件,一个颜色为一组结构,同属于main下)

层级为:src-》main->(java->com->yy->(controller,,dao->(IUserDao.java),,model->(User.java),,service),,,,resources->(config->(applicationContext.xml,,config.xml,,jdbc.properties),,,mapper->(IUserDao.xml)),,test-》Test.java...,,webapp->**.jsp,与(WEB-INF->(web.xml,log4j.xml)),(target为自动生成的),pom.xml

3.controller为控制层,主要用于对业务模块的流程控制。 
dao为数据接入层,主要用于与数据库进行连接,访问数据库进行操作,这里定义了各种操作数据库的接口。 
mapper中存放mybatis的数据库映射配置。可以通过查看mybatis相关教程了解 
model中存放了我们的实体类 
service为业务层,我们的各种业务都定义在此,由controller调用不同业务实现不同的操作。

4.具体各部分程序

(1)pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: pom.xml 642118 2008-03-28 08:04:16Z reinhard $ -->
<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>
  <packaging>war</packaging>
  <name>spring</name>
  <groupId>com.yy</groupId>
  <artifactId>spring</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.1.4.RELEASE</spring.version>
    <jackson.version>2.5.0</jackson.version>
  </properties>

  <dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
    <!-- spring配置 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
      <scope>test</scope>
    </dependency>

    <!-- mybatis 包 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.8</version>
    </dependency>

    <!--mybatis spring 插件 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.2.2</version>
    </dependency>

    <!-- mysql连接 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.34</version>
    </dependency>

    <!-- 数据源 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5-pre8</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.4</version>
    </dependency>
    <!-- log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

    <!-- servlet -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>3.0-alpha-1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- json -->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.13</version>
    </dependency>
  </dependencies>


  <build>
    <plugins>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.7</version>
        <configuration>
          <connectors>
            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
              <port>8888</port>
              <maxIdleTime>30000</maxIdleTime>
            </connector>
          </connectors>
          <webAppSourceDirectory>${project.build.directory}/${pom.artifactId}-${pom.version}</webAppSourceDirectory>
          <contextPath>/</contextPath>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
(2)web.xml具体代码
<?xml version="1.0" encoding="UTF-8"?>
<!--
  - This is the Cocoon web-app configurations file
  -->
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <!-- Spring配置 -->
    <!-- 配置Spring配置文件路径,好让ContextLoaderListener对其加载与解析-->
     <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
           classpath*:config/applicationContext.xml
        </param-value>
     </context-param>
  <!--
  - Declare Spring context listener which sets up the Spring Application Context
  - containing all Cocoon components (and user defined beans as well).
  -->
  <!-- 配置Spring上下文监听器,它的作用就是在启动WEB容器时,就会自动装在我们applicationContext.xml配置-->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
  <!-- 配置Spring字符编码过滤器 -->
    <filter>
       <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
          </init-param>
     <init-param>
           <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
       </init-param>
     </filter>
    <filter-mapping>
          <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>
        

(3)配置完web.xml后,配置spring的applicationContext.xml,它是spring的配置文件,一般与spring集成的框架都要在这里进行配置。

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- @version $Id: applicationContext.xml 561608 2007-08-01 00:33:12Z vgritsenko $ -->
<!-- 需要加入context一行解析上下文-->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       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.xsd">
    <!--引入jdbc配置 -->
    <context:property-placeholder location="classpath*:config/jdbc.properties"/>
    <!--  扫描文件(自动将service层注入)-->
    <context:component-scan base-package="com.yy.service"/>
    <!--配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc_driverClassName}"/>
        <property name="jdbcUrl" value="${jdbc_url}"/>
        <property name="user" value="${jdbc_username}"/>
        <property name="password" value="${jdbc_password}"/>
        <!--连接池中保存的最大连接数目-->
        <property name="maxPoolSize" value="20"/>
        <!--连接池中保存的最少连接数目-->
        <property name="minPoolSize" value="2"/>
        <!-- 初始化连接大小 -->
        <property name="initialPoolSize" value="2"/>
        <!-- 获取连接最大等待时间 -->
        <property name="maxConnectionAge" value="6000"/>
        <!-- 连接池最大空闲 -->
        <property name="maxIdleTime" value="60"/>
    </bean>
    <!--配置sqlSessionFactory 并将数据源注入-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--指定要使用到到mybatis配置文件-->
        <property name="configLocation" value="classpath:config/config.xml"/>
        <!--用于配置mapper映射xml-->
        <property name="mapperLocations" value="classpath*:mapper/*.xml"/>
    </bean>
    <!-- 创建数据映射器-->
    <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.yy.dao"/>
    </bean>
    <!-- 对数据源进行事务管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>()
(4)

在这里使用了jdbc.properties来分散配置,jdbc.properties中保存了数据库的信息,需要根据你们的数据库配置进行修改。

jdbc.properties

jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/demo95?useUnicode=true&amp;characterEncoding=utf-8
jdbc_username=root
jdbc_password=123456
(5)

然后是争对mybatis进行配置,由于我把数据库配置都配置在applicationcontext.xml中,所以我对mybatis中只进行了别名配置。

config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--为com.yy.model.User设置别名 User 方便调用-->
    <typeAliases>
        <typeAlias alias="User" type="com.yy.model.User"/>
    </typeAliases>

</configuration>
(6)

创建完数据库后开始写model下面的实体类

User.java

package com.yy.model;

/**
 * Created by yy on 2017/9/6.
 */
public class User {
    private int id;
    private String username;
    private String password;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = 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;
    }
}

(7)

数据库接入层dao的接口,在这里我使用了mybatis以接口方式编程,这部分借鉴了其他的教程,有不懂的地方可以查看 http://www.yihaomen.com/article/java/302.htm  该网址的mybatis教程,我觉得写的很不错。

package com.yy.dao;
import com.yy.model.User;
/**
 * Created by yy on 2017/9/6.
 */
public interface IUserDao {
    public User selectById(int id);
    public User selectByName(String name);
}
(8) mybatis映射文件文件名必须与接口类相同,否则无法映射成功。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace用于与DAO层的接口类进行绑定,这样我们无需实现DAO层的接口
类,其接口类就能够自动的找到相关的SQL语句进行绑定实现-->
<mapper namespace="com.yy.dao.IUserDao">
    <!--select表示查询,它的id名称必须与DAO层接口的方法名相同,否则无法绑定-->
    <select id="selectByName" parameterType="string" resultType="User">
        select * from tb_user where username = #{username}
    </select>

    <select id="selectById" parameterType="int" resultType="User">

        select * from tb_user where id = #{id}
    </select>


</mapper>

(9)好了,到这里mybatis与spring已经整合完毕,我们需要测试一下mybatis是否与spring整合成功,写一个test类

import com.yy.dao.IUserDao;
import com.yy.model.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * Created by yy on 2017/9/6.
 */
public class Test {
    private static ApplicationContext ac;
    static {
        ac = new ClassPathXmlApplicationContext("config/applicationContext.xml");
    }
    public static void main(String[] args) {
        IUserDao mapper = (IUserDao) ac.getBean("IUserDao");
        System.out.println("获取alvin");
        User user = mapper.selectByName("yy");
        System.out.println(user.getId()+":"+"username:"+user.getUsername());
        System.out.println("password:"+user.getPassword());
    }

}
如果成功,如下图所示:

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
获取alvin
1:username:yy
password:123 

猜你喜欢

转载自blog.csdn.net/u012516440/article/details/77866169