springmvc学习之路(二)

(springmvc整合mybatis)

网上大多直接给的是自己的所有依赖,在这里提供最简mybatis依赖,建议先看最后的总结和关系图再来理解总体过程会更加清晰

1.添加相关依赖

首先mybatis会用到两个基础包,mybatis和spring mybatis,接着我们需要引入数据库连接包mysql(本地主机使用mysql数据库),同时引入mysql连接池管理包c3p0(参考网上其他配置)。

在pom.xml中添加相关依赖

<!-->spring mybatis依赖包<-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.35</version>
    </dependency>
    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
    </dependency>

等待下载完成即可继续下一步

2.mybatis引入和连接配置

跟之前引入springmvc时一样,我们需要在现在的配置文件中配置我们需要扫描的mybatis的相关类的位置,以及管理mybatis工作的相关配置文件

在这里我们在原来的java文件夹下建立mybatis相关连接类的存放位置,我们在com下建立三个文件包,dao,entity和server

当存在com.controller包时可能你会发现无法在com包下建立dao,而是建立到了com.controller上,在这里你只需要在com.controller的上一级目录即java目录下新建包,如果先建立dao包,则java下新包名为com.dao,这样idea会自动将dao放到com下,与controller同级,这时候就出现了com这一层目录,直接在com下建立其他即可。

在这里简单说下几个包的作用,entity存放实体类,mybatis中实体类对应数据库一张表,表各列对应实体类中的属性,实体类中这些属性必须私有,且有相应的get,set方法。dao包存放接口类,在这里定义只定义接口,不定义具体实现,具体实现在mapper文件中定义。server包存放dao层上层服务,实现具体的功能。

接着我们引入mybatis,在这里我们在applicationContext.xml中添加以下配置,扫描dao包,引入mybatis配置文件mybatis-spring.xml

<context:annotation-config />
         <!-- 配置component所在的包,自动加载需要管理的Bean -->
        <context:component-scan base-package="com.dao" />
        <import resource="classpath:spring-mybatis.xml" />

在resources文件下新增spring-mybatis.xml文件,在这个配置了mybatis的具体工作内容。

mybatis的文档中说明,mybatis需要配置一个sqlsessionfactory和至少一个数据映射类,在这里数据映射类为dao包下的接口类,sqlsessionfactory需要配置数据源(连接数据库信息)和实体类映射配置文件。

首先配置sqlsessionfactory的数据源,在这里将数据库连接信息放在另一个配置文件以便于管理,也可直接放在spring-mybatis.xml里

因为是配置文件,因此放在resources文件夹下,新建jdbc.properties文件

jdbc.properties

#mysql
jdbc.driverClassName=com.mysql.jdbc.Driver
#所连接数据库
jdbc.url=jdbc\:mysql\://127.0.0.1\:3306/mybatis?useSSL=false&characterEncoding=utf-8
#用户名
jdbc.username=root
#密码
jdbc.password=root

#c3p0连接池信息
c3p0.minPoolSize=10
c3p0.maxPoolSize=100
#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数
c3p0.acquireIncrement=3
#定义在从数据库获取新连接失败后重复尝试的次数
c3p0.acquireRetryAttempts=10
 #两次连接中间隔时间,单位毫秒
 c3p0.acquireRetryDelay=1000
 #连接关闭时默认将所有未提交的操作回滚
c3p0.autoCommitOnClose=false
 #当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限
 c3p0.checkoutTimeout=3000
 #每120秒检查所有连接池中的空闲连接。Default: 0
 c3p0.idleConnectionTestPeriod=120
 #最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
 c3p0.maxIdleTime=600
 #如果设为true那么在取得连接的同时将校验连接的有效性。Default: false
 c3p0.testConnectionOnCheckin=false
 #如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0
 c3p0.maxStatements=8
 #maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0
 c3p0.maxStatementsPerConnection=5
 #自动超时回收Connection
 c3p0.unreturnedConnectionTimeout=25

数据源连接信息文件写好后编写实体映射类配置文件

首先在本地数据库建立一张表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `name` varchar(50) NOT NULL COMMENT '姓名',
  `docoument` varchar(50) NOT NULL COMMENT '宿舍',
  `phone` varchar(15) NOT NULL COMMENT '电话',
  `password` varchar(15) NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

在entity包下新建表的实体映射类User.java

User.java

package com.entity;

public class User {
    private int id;
    private String username;
    private  String name;
    private String docoument;
    private String phone;
    private String password;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getDocoument() {
        return docoument;
    }

    public String getPhone() {
        return phone;
    }

    public String getUsername() {
        return username;
    }

    public void setDocoument(String docoument) {
        this.docoument = docoument;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}

接着在resources文件夹下建立mapper文件夹,在mapper文件夹下新建usermapper.xml。

usermapper.xml

<?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="com.dao.UserDao">
    <resultMap id="BaseResultMap" type="com.entity.User">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="username" jdbcType="VARCHAR" property="username" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="docoument" jdbcType="VARCHAR" property="docoument" />
        <result column="phone" jdbcType="VARCHAR" property="phone" />
        <result column="password" jdbcType="VARCHAR" property="password" />
    </resultMap>
    <sql id="Base_Column_List">
        id,username,name,docoument,phone,password
    </sql>
    <select id="findall"  resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from user
    </select>
</mapper>

(对mapper不了解的可以戳这里:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

在这里我们就配置好了sqlsessionfactory所需文件和类,接着编写数据映射类,即dao下的接口类,接口中只定义方法,不编写实现,实现写在上面的mapper文件中,如上面的select操作的findall其实是先在dao层定义后才在mapper给出具体的数据库查询语句。

在dao包新建UserDao.java

package com.dao;

import com.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
@Repository
public interface UserDao {
    public ArrayList<User> findall();
}

 最后,在spring-mybatis.xml文件中整合sqlsessionfactory和数据映射类。

spring-mybatis.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"
       xsi:schemaLocation="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/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
            </property>
   </bean>

          <!-- 配置数据源 -->
    <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="minPoolSize" value="${c3p0.minPoolSize}"/>
        <property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>
        <property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
        <property name="acquireRetryDelay" value="${c3p0.acquireRetryDelay}"/>
        <property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
        <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
        <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}"/>
        <property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>
        <property name="testConnectionOnCheckin" value="${c3p0.testConnectionOnCheckin}"/>
        <property name="maxStatements" value="${c3p0.maxStatements}"/>
        <property name="maxStatementsPerConnection" value="${c3p0.maxStatementsPerConnection}"/>
        <property name="unreturnedConnectionTimeout" value="${c3p0.unreturnedConnectionTimeout}"/>
    </bean>

             <!-- 配置mybatisSqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>
            <!-- 配置mybatis mapper接口 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.dao"/>
        <!--<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>-->
     </bean>

            <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

至此,mybatis配置基本完成

3.使用简单控制器和网页测试

controller下新建控制器UsersController.java

UsersController.java

package com.controller;

import com.dao.UserDao;
import com.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.ArrayList;

@Controller

public class UsersController {
    @Autowired
    UserDao dao;
    @RequestMapping("/users")
    public ModelAndView findalluser(){
    ArrayList<User> users=dao.findall();
    return  new ModelAndView("users","users",users);
    }

}

views下建立简单网页

users.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="org.springframework.beans.factory.annotation.Autowired" %>
<%@ page import="com.dao.UserDao" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.entity.User" %>
<%@ page import="org.springframework.http.HttpRequest" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户</title>
</head>
<body>
<table>
    <tr><td>id</td><td>username</td><td>name</td><td>docoument</td><td>phone</td></tr>
    <c:forEach items="${users}" var ="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.username}</td>
            <td>${user.name}</td>
            <td>${user.docoument}</td>
            <td>${user.phone}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

最后试着在数据库插入数据,访问/users看是否能得到数据库内数据,可以则配置成功

总结:mybatis配置主要是理清sqlsessionfactory方面的配置,配置数据源和配置实体映射类。数据源信息由jdbc文件配置,实体映射类在mapper中文件配置,同时需要建立对应bean类,即user类。而数据映射类则为简单的接口,不需要写实现,实现写在mapper文件中。虽然讲了配置,但其中还是有一些关于mybatis的用法和javaweb的知识需要读者有所了解。

关系图:

猜你喜欢

转载自blog.csdn.net/Ms_huang_/article/details/84521778