Mybatis+Spring+MySQL

本文介绍了如何在Spring环境中结合Mybatis来操作MySQL数据库。主要内容包括配置Mybatis的SqlSessionFactoryBean,创建实体类,定义数据访问接口及XML文件,并在程序中利用@Autowired注解调用接口进行数据库操作。注意@Autowired的注入时机,避免在构造函数中使用导致空指针异常。

使用Mybatis在Spring中操作MySQL数据库

创建Mybatis配置文件:

<?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>
    <typeAliases>
        <typeAlias type="com.qunhe.scm.daemon.consisthash.DaemonNode" alias="DaemonNode"/>
        <package name="com.qunhe.scm.data"/>
    </typeAliases>
</configuration>

修改Spring的配置文件:
主要是添加SqlSession的制作工厂类的bean:SqlSessionFactoryBean,(在mybatis.spring包中)。需要指定配置文件位置和dataSource。
和数据访问接口对应的实现bean。通过MapperFactoryBean创建出来。需要执行接口类全称和SqlSession工厂bean的引用。

<!-- 导入属性配置文件 -->  
<context:property-placeholder location="classpath:mysql.properties" />  

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">  
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
    <property name="url" value="${jdbc.url}" />  
    <property name="username" value="root"/>
    <property name="password" value="××××××××"/>
</bean>  

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="mapperLocations">
            <list>
                <value>classpath:*.xml</value>
            </list>
        </property>
</bean>  

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="path.to.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

之后创建实体类:

public class DaemonNode {

    private String mHostName;

    private String mIp;

    public String getIp() {
        return mIp;
    }

    public void setIp(final String ip) {
        mIp = ip;
    }

    public String getHostName() {
        return mHostName;
    }

    public void setHostName(final String hostName) {
        mHostName = hostName;
    }
}

创建数据访问接口:

public interface BackendNodeMapper {

    /**
     * produce a heartbeat
     *
     * @param daemonNode
     * @return
     */
    int insertBackendNode(DaemonNode daemonNode);

    /**
     * Query if host is alive
     *
     * @return
     */
    List<Integer> queryAliveHost();

    /**
     * Query all host
     *
     * @return
     */
    List<DaemonNode> queryAllHost();
}

创建数据访问的XML文件:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.1//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=".BackendNodeMapper">
    <insert id="insertBackendNode" parameterType="DaemonNode"
            useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO BackendNode (
        hostname,
        ip,
        lastheartbeat
        ) VALUES (
        #{hostName},
        #{ip},
        NOW()
        ) ON DUPLICATE KEY UPDATE lastheartbeat = NOW()
    </insert>

    <select id="queryAliveHost" resultType="java.lang.Integer">
        SELECT TIMESTAMPDIFF(SECOND, lastheartbeat, NOW()) FROM BackendNode
        WHERE TIMESTAMPDIFF(SECOND, lastheartbeat, NOW()) &lt; 10
    </select>

    <select id="queryAllHost" resultType="DaemonNode">
        SELECT
            hostname AS hostName,
            ip AS ip
        FROM BackendNode
        ORDER BY id
    </select>
</mapper>

接下来只需要在程序中使用@Autowired注解声明接口BackendNode的成员变量,mybatis会实现该接口,直接调用该对象即可完成对MySQL的操作

有一点需要注意的是:@Autowired操作在装载类,即执行类的构造函数之后,因此不能在构造函数中调用接口对象,会产生NullPoint异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值