springmvc集成mybatis(超详细)

使用maven创建项目

1. 添加mybatis和MySQL的Maven依赖

<!-- mybatis 核心包 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.1.1</version>
    </dependency>
      <!-- 导入java ee jar 包 -->  
    <dependency>  
        <groupId>javax</groupId>  
        <artifactId>javaee-api</artifactId>  
        <version>7.0</version>  
    </dependency>  
    <!-- 导入Mysql数据库链接jar包 -->  
    <dependency>  
        <groupId>mysql</groupId>  
        <artifactId>mysql-connector-java</artifactId>  
        <version>5.1.30</version>  
    </dependency>  
    <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->  
    <dependency>  
        <groupId>commons-dbcp</groupId>  
        <artifactId>commons-dbcp</artifactId>  
        <version>1.2.2</version>  
    </dependency>

2. 修改springmvc.xml,新增mybatis配置

<!-- 引入jdbc配置文件 -->    
<context:property-placeholder location="/WEB-INF/config/jdbc.properties" />  

<!--创建jdbc数据源 -->    
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">    
    <property name="driverClassName" value="${driver}" />    
    <property name="url" value="${url}" />    
    <property name="username" value="root" /><!-- 从jdbc.properties加载,会变成Administrator'@'localhost -->    
    <property name="password" value="root" />    
</bean>  

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->    
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    
    <property name="dataSource" ref="dataSource" />    
</bean>  

<!-- 创建SqlSessionFactory,同时指定数据源 -->    
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">    
    <property name="configLocation" value="/WEB-INF/config/mybatis-config.xml"></property>  
    <property name="dataSource" ref="dataSource" />    
</bean>  

3. 新建jdbc.properties文件,用于保存数据库连接需要的信息

driver=com.mysql.jdbc.Driver
#数据库连接
url=jdbc:mysql://localhost:3306/demo_test
#数据库用户名
username=root
#数据库密码
password=root
#定义初始连接数 
initialSize=0
#定义最大连接数 
maxActive=20
#定义最大空闲 
maxIdle=20
#定义最小空闲 
minIdle=1
#定义最长等待时间 
maxWait=60000

4. 创建model(或者叫pojo)

package com.cuber.proj.pojo;

public class UserTab {
    private long uid;
    private String nick;
    private String state;
    private String email;
    private String passwd;

    public long getUid() {
        return uid;
    }
    public void setUid(long uid) {
        this.uid = uid;
    }
    public String getNick() {
        return nick;
    }
    public void setNick(String nick) {
        this.nick = nick;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPasswd() {
        return passwd;
    }
    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    @Override
    public String toString(){
        return "user_tab:{"
                + "uid=" + uid 
                + ", nick=" + nick
                + ", state=" + state
                + ", email=" + email
                + ", passed=" + passwd
                + "}";
    }
}

5. 创建mapper,使用@Repository注解标明是DAO层

package com.cuber.proj.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
@Transactional
public interface UserTabMapper {

}

注意mapper都是interface,而不是类。

6.创建mapping.xml映射文件,将model和mapper连接起来

mapping.xml文件可放置在resource文件夹下(创建maven项目会自动生成)。不要与java文件放在一个包下,不然执行maven install时会忽略掉xml文件导致项目启动时报‘找不到映射文件’的异常(被这一点坑过)。
创建model属性和数据表子段的映射<Result>节点,

<mapper>
    <result id="userTabMap">
        <id name="uid" column="uid"/>
        <property name="nick" column="nick"/>
        <property name="state" column="state"/>
        <property name="email" column="email"/>
        <property name="passwd" column="passwd"/>
    </result>
</mapper>

这样可以在mapper中用@ResultMap("map_name")来指定 select语句使用此映射集,例如:

@Select("select * from user_tab")
@ResultMap("userTabMap")
public List<UserTab> getAll();

此时会获得有完整数据的的model list。
当然如果model的属性名与数据表中的字段名完全一致,可以不用@ResultMap注解进行映射。

7. 创建mybatis-config.xml文件,注册mapping映射

完整的例子:mybatis-config.xml

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

<!-- mybatis的数据类型和处理器等等...都可以实现接口重写,然后配置 -->  
<configuration>  
    <properties>
        <property name="xml-path" value="mapping"/>
    </properties>
    <mappers>  
        <!--映射文件-->  
        <mapper resource="${xml-path}/userTabMapping.xml"/>
    </mappers>  
</configuration>

之后新增mapper和mapping.xml文件后,都要在此处进行注册。

现在mybatis已经集成进springmvc项目里了。

需要注意的问题

  • mapping.xml中类的完全路径要仔细检查,可按住CTRL鼠标放上去看,如果显示可以跳转,说明是正确的
  • 数据库username=rootpassword=rootjdbc.properties中加载,用户名会变成Administrator'@'localhost,所以只能写死在springmvc.xml
    但是连测试环境的库,用户名不是root,可以从properties加载。?
  • jdbc.proprties文件中每行末尾不能有空格,url参数末尾是具体使用的库的名字,请仔细确认
  • 偶尔会出现mapper Invalid bound statement (not found)异常,其原因不外乎以下几点:

    1. 没有加载mapper文件
    2. 接口路径写错了
    3. 方法名写错了
    4. 没有 数据映射器类 mapper bean

    仔细检查

想起来再补充。。

你可能感兴趣的:(spring,maven,mvc,mybatis)