• Spring学习(五)——集成MyBatis


    本篇我们将在上一篇http://www.cnblogs.com/wenjingu/p/3829209.html的Demo程序的基础上将 MyBatis 代码无缝地整合到 Spring 中。

    数据库仍然采用前一篇文章中定义的数据库sampledb。

    1、修改gradle文件,增加依赖包,代码如下:

    apply plugin: 'idea' 
    apply plugin: 'java'
    
    repositories { 
        mavenCentral() 
        maven { url "http://repo.spring.io/release" } 
    }
    
    dependencies { 
        compile( 
                "org.springframework:spring-context:4.0.5.RELEASE", 
                "org.springframework:spring-web:4.0.5.RELEASE", 
                "org.springframework:spring-webmvc:4.0.5.RELEASE", 
                "org.springframework:spring-context-support:4.0.5.RELEASE", 
                "org.apache.velocity:velocity:1.7", 
                "org.apache.velocity:velocity-tools:2.0", 
                "org.anarres.gradle:gradle-velocity-plugin:1.0.0", 
                "org.springframework:spring-jdbc:4.0.5.RELEASE", 
                "commons-dbcp:commons-dbcp:1.4", 
                "org.springframework:spring-test:4.0.5.RELEASE", 
                "org.testng:testng:6.8.8", 
                "org.mybatis:mybatis:3.2.7", 
                "org.springframework:spring-tx:4.0.5.RELEASE", 
                "org.springframework:spring-orm:4.0.5.RELEASE", 
                "org.mybatis:mybatis-spring:1.2.2" 
        ) 
        testCompile("org.springframework:spring-test:4.0.5.RELEASE") 
        runtime("jstl:jstl:1.2") 
    }
    
    task copyJars(type: Copy) { 
        from configurations.runtime 
        into 'lib' // 目标位置 
    }

    运行命令:gradle copyJars下载。

    2、修改Spring配置文件

    要在Spring中使用MyBatis,需要在Spring应用上下文中定义至少两样东西:一个SqlSessionFactory和至少一个数据映射器类。

    在MyBatis-Spring中,SqlSessionFactoryBean是用于创建SqlSessionFactory.的。要配置这个工厂bean,放置下面的代码在Spring的XML配置文件中:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
            <property name="dataSource" ref="dataSource"/> 
            <!-- 指定mybatis的总配置文件,订制的environment在spring容器中不再生效--> 
            <property name="configLocation" value="classpath:mybatis-config.xml"/> 
            <!--指定实体类映射文件,可以同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可, 
            当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件 --> 
            <!--<property name="mapperLocations" value="classpath*:mybatis/*.xml"/>--> 
    </bean>

    其中dataSource属性用于指定数据源,我们使用上一篇中配置的datasource即可;

    configLocation属性用于指定mybatis的总配置文件,订制的environment在spring容器中不再生效;

    mapperLocations属性用于指定实体类映射文件,可以同时指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一个即可,

    当需要为实体类指定别名时,可指定configLocation属性,再在mybatis总配置文件中采用mapper引入实体类映射文件。

     配置SQLSession模板:

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

    数据映射器的配置方式有三种,我们选择扩展性比较好的一种,即1个总映射文件+n个子映射文件的形式。见下面步骤:

    3、增加一个总的数据映射文件

    在resources文件夹下创建一个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> 
        <typeAliases> 
            <typeAlias type="domain.User" alias="User" /> 
        </typeAliases> 
        <mappers> 
            <mapper resource="mybatis/user-mapper.xml" /> 
        </mappers> 
    </configuration>

    4、为每个持久层接口增加一个映射文件

    为User接口定义一个映射文件user-mapper.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="domain.User">
        <resultMap id="UserMap" type="User">
            <id property="userId" column="user_id" />
            <result property="userName" column="user_name" jdbcType="VARCHAR"/>
            <result property="password" column="password" jdbcType="VARCHAR"/>
            <result property="lastIp" column="last_visit" jdbcType="VARCHAR"/>
            <result property="lastVisit" column="last_ip" jdbcType="VARCHAR"/>
        </resultMap>
    
        <select id="getUserByUserName" parameterType="string" resultMap="UserMap">
            SELECT *
            FROM t_user  WHERE user_name = #{userName}
        </select>
        
        <!--<select id="findAll" resultMap="UserMap" fetchSize="1">-->
            <!--SELECT * FROM t_user-->
        <!--</select>-->
    
        <!--<select id="count" resultType="int">-->
            <!--SELECT COUNT(*) FROM t_user;-->
        <!--</select>-->    
    </mapper>

    5、持久层接口定义和实现

    在dao文件夹下新建接口类IUserDao:

    public interface IUserDao { 
        public User getUserByUserName(String userName); 
    }

    修改类UserDao,使其实现IUserDao接口:

    @Repository 
    public class UserDao implements IUserDao {
    
    @Autowired
    public SqlSessionTemplate sqlSession; … @Override public User getUserByUserName(String userName) { return (User)sqlSession.selectOne("domain.User.getUserByUserName", userName); } }

    修改类UserService:

    @Service 
    public class UserService {
    
              …
    
    public User getUserByUserName(String userName) { 
            return userDao.getUserByUserName(userName); 
        } 
    }

    6、单元测试

    在测试类UserServiceTest中增加单元测试函数:

    @Test 
        public void getUserByUserName() { 
            User user = userService.getUserByUserName("admin"); 
            assertEquals(user.getUserName(), "admin"); 
        }

    运行测试类,测试通过。

    7、运行网站

    将LoginController类中的loginCheck函数中调用findUserByUserName()函数的地方改为调用getUserByUserName(),运行Tomcat,验证记录日志正确。

    注意:如果lib中的jar包未自动输出到out目录,请手动拷贝过去。

    源码下载:http://files.cnblogs.com/wenjingu/VelocityDemo4.0.zip lib中的jar包上传时已删除,请运行命令:gradle copyJars下载。

  • 相关阅读:
    获取农历日期
    图片上传代码(C#)
    ASP.net使用技术总结(1)GridView控件的单击处理
    JavaScript使用小技巧:IE8的关闭处理
    FrameSet左右收缩编码
    哈哈,开心!今天注册开通了 弟弟Kernel 的网志
    设计模式简介
    Delphi字符串、PChar与字符数组之间的转换
    C++中数组参数详解
    1、简单工厂模式
  • 原文地址:https://www.cnblogs.com/wenjingu/p/3829985.html
Copyright © 2020-2023  润新知