基于Maven的Spring+SpringMVC+MyBatis环境搭建

我们以一个用户登陆为例开始搭建环境。
项目目录结构如下:
框架版本:Mybatis:3.x,Spring:3.x
项目采用xml+注解方式配置。

一.先完成Spring+MaBatis的环境搭建:
数据库脚本文件:

CREATE TABLE `login` (
  `login_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(40) DEFAULT NULL,
  `login_password` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`login_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

1.pom文件的依赖:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>antlr</groupId>
            <artifactId>antlr</artifactId>
            <version>2.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.3</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xmlParserAPIs</artifactId>
            <version>2.6.2</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xerces</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
    </dependencies>

基础类部分:

2.实体对象Login
包含用户登陆的账号和密码

public class Login {
    
    
    private int login_id;
    private String user_name;
    private String login_password;

    public Login() {

    }

    public Login(int login_id, String user_name, String login_password) {
        super();
        this.login_id = login_id;
        this.user_name = user_name;
        this.login_password = login_password;
    }

    public int getLogin_id() {
        return login_id;
    }

    public void setLogin_id(int login_id) {
        this.login_id = login_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getLogin_password() {
        return login_password;
    }

    public void setLogin_password(String login_password) {
        this.login_password = login_password;
    }

    @Override
    public String toString() {
        return "Login [login_id=" + login_id + ", user_name=" + user_name
                + ", login_password=" + login_password + "]";
    }
}

4.base mapper类:
使用泛型,以方便后面实体mapper类使用

public interface BaseMapper<T>{
    public void insert(T t);
    public T findById(int id);
    public void update(T t);
    public void delete(int id);
    public List<T> getAll(); 
}

5.login mapper 类:
除了基础方法,还可以封装login mapper特有的方法

public interface LoginMapper extends BaseMapper<Login>{
    
    
    public Login findByUsername(String user_name);
}

6.login mapper impl类:
base mapper 不用实现,因为具体的类会具体实现。
使用注解。
但实际上并不需要实现具体的方法,只需要把接口的方法写出来就好了。

@Repository
public class LoginMapperImpl implements LoginMapper {
    
    

    @Autowired
    @Qualifier("loginMapper")
    private LoginMapper mapper;
    public void insert(Login t) {

    }

    public Login findById(int id) {
        // TODO Auto-generated method stub
        return null;
    }

    public void update(Login t) {
        // TODO Auto-generated method stub

    }

    public void delete(int id) {
        // TODO Auto-generated method stub

    }

    public List<Login> getAll() {
        return null;
    }

    public Login findByUsername(String user_name) {
        return mapper.findByUsername(user_name);
    }

}

7.service也使用通用接口:

public interface BaseService<T> {
    public void insert(T t);
    public T findById(int id);
    public void update(T t);
    public void delete(int id);
    public List<T> getAll(); 
}

8.login service:
注意我们这里方法(login)和mapper的方法(findByUsername)不同,因为这是service层,我们将mapper的方法封装,实现我们需要的功能就可以了。

public interface LoginService extends BaseService<Login> {
    
    
    public boolean login(Login login);
}

9.login service impl:
也不用实现通用service:
可以看到login方法调用findByUsername方法对登陆用户是否合法进行了验证。

@Service("loginService")
public class LoginServiceImpl implements LoginService {
    
    

    @Autowired
    @Qualifier("loginMapper")
    private LoginMapper mapper;

    public void insert(Login t) {
        mapper.insert(t);
    }

    public Login findById(int id) {
        return mapper.findById(id);
    }

    public void update(Login t) {

    }

    public void delete(int id) {

    }

    public List<Login> getAll() {
        return mapper.getAll();
    }

    public boolean login(Login login) {
        Login login2 = mapper.findByUsername(login.getUser_name());
        if (null != login2) {
            if(login2.getUser_name().equals(login.getUser_name()) && login2.getLogin_password().equals(login.getLogin_password())) {
                return true;
            }
        }
        return false;
    }
}

MyBatis配置文件:

10.LoginMapper文件:

<?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">
<mapper namespace="employee_management.mapper.LoginMapper">
    <resultMap type="employee_management.entity.Login" id="loginList">
        <id property="login_id" column="login_id" javaType="java.lang.Integer" />
        <result property="user_name" column="user_name" javaType="java.lang.String" />
        <result property="login_password" column="login_password" javaType="java.lang.String" />
    </resultMap>
    <select id="findByUsername" parameterType="String"
        resultType="employee_management.entity.Login">
        select * from login where user_name=#{user_name}
    </select>
    <insert id="insert">
        insert into login
        (user_id,user_name,login_password)
        values(#{user_id},#{user_name},#{login_password})
    </insert>
    <delete id="delete" parameterType="int">
        delete from login where
        login_id=#{login_id}
    </delete>
    <update id="update">
    <!--    update user u set
        u.name=#{student.name},s.sex=#{student.sex} where id=#{id} -->
    </update>
    <select id="getAll" resultMap="loginList">
        select * from login
    </select>
</mapper>

11.mybatis-config.xml:
添加LoginMapper的路径。

<?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>
    <mappers>   
        <mapper resource="entity/LoginMapper.xml"/>
    </mappers>

</configuration>

Spring配置文件:

12.applicationContext.xml:
将spring与mybatis能够无缝整合到一起。

<?xml version="1.0" encoding="UTF-8"?>
<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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context.xsd  
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans.xsd  
    http://www.springframework.org/schema/tx  
    http://www.springframework.org/schema/tx/spring-tx.xsd  
    http://www.springframework.org/schema/jdbc  
    http://www.springframework.org/schema/jdbc/spring-jdbc.xsd  
    http://www.springframework.org/schema/cache  
    http://www.springframework.org/schema/cache/spring-cache.xsd  
    http://www.springframework.org/schema/aop  
    http://www.springframework.org/schema/aop/spring-aop.xsd  
    http://www.springframework.org/schema/util  
    http://www.springframework.org/schema/util/spring-util.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/mvc/spring-mvc.xsd">

    <context:annotation-config />
    <context:component-scan base-package="employee_management" />  <!-- 自动扫描 -->
    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:mysql/config.properties" />

    <!-- 配置数据源的方式 从properties文件读取 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--dataSource属性指定要用到的连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!--configLocation属性指定mybatis的核心配置文件 -->
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
    </bean>

<bean id="loginMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例 -->
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
        <!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象 -->
        <property name="mapperInterface" value="employee_management.mapper.LoginMapper" />
    </bean>
</beans>

13.数据库配置文件:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/user_management?characterEncoding=GBK
jdbc.username=root
jdbc.password=root
#
jdbc.initialPoolSize=20
jdbc.maxIdleTime=60
jdbc.maxPoolSize=200
jdbc.minPoolSize=10
#
jdbc.acquireIncrement=3
jdbc.acquireRetryDelay=1000
jdbc.acquireRetryAttempts=30
jdbc.breakAfterAcquireFailure=false

到此Spring与MyBatis已经整合好了
14.Test.java:

public class Test {

    @org.junit.Test
    public void printInfo() {
    ApplicationContext context = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
    LoginService service = (LoginService) context.getBean("loginService");
    System.out.println("Login account----->>>>" + service.getAll().toString());
    }

15.测试结果:
我们已经获取了账号信息:

接下来开始整合SpringMVC:

16.LoginController:

@EnableWebMvc
@Controller

public class UserController {
    
    
    @RequestMapping(value="jsp/login",method=RequestMethod.POST) 
    public ModelAndView testLogin(@ModelAttribute User user){
        String username = user.getUsername();
        String pswd = user.getPswd();
        if(!"admin".equals(username) || !"admin".equals(pswd))
        {
            return new ModelAndView("error");
        }
        return new ModelAndView("hello");
    }
}

15.login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
        <form action="login.do" method="post">
            账号:<input  type="text" name="user_name" ><br>
            密码:<input  type="password" name="login_password" ><br>
            <input id="btn" type="submit" value="submit">       
        </form>
        <br>
</body>
</html>

17.hello.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>
</head>
<body>
<p>Login success!!</p><br>
hello ${user.username}
</body>
</html>

18.error.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Wrong page
</body>
</html>

19.springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
    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.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 启用spring mvc 注解 -->
    <context:annotation-config />
    <!-- scan the package and the sub package -->
    <context:component-scan base-package="employee_management" />

    <!-- don't handle the static resource -->
    <mvc:default-servlet-handler />

    <!-- if you use annotation you must configure following setting -->
    <mvc:annotation-driven />
    <!-- 完成请求和注解POJO的映射 -->
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
    <!-- configure the InternalResourceViewResolver 一种试图解析器 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        id="internalResourceViewResolver">

        <property name="prefix" value="/jsp/" />

        <property name="suffix" value=".jsp" />
    </bean>

</beans>

20.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"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>Management System</display-name>

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
        <!-- 设置默认访问界面 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/showLogin.do</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>showLogin.do</welcome-file>
    </welcome-file-list>

    <!-- Spring配置 -->
    <!-- ====================================== -->
    <!--监听器 自动装配ApplicationContext的配置信息 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 自动装配ApplicationContext的配置信息 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext.xml
        </param-value>
    </context-param>
    <!-- 乱码问题 -->
    <filter>
        <filter-name>SpringEncodingFilter</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>SpringEncodingFilter</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
</web-app>

21:启动sever,测试结果:
1)登陆界面:

这里写图片描述

2)登陆成功:
这里写图片描述

3)登陆失败:
这里写图片描述

至此整个SSM的环境已经搭建完毕,可以开始开发了,稍候会在此版本基础上,做一个小demo,加深框架的使用。

参考:
mybatis官网
子萧

猜你喜欢

转载自blog.csdn.net/u010857795/article/details/73512299
今日推荐