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下载。

Spring学习(五)——集成MyBatis

时间: 2024-10-06 00:43:21

Spring学习(五)——集成MyBatis的相关文章

spring-boot学习之集成mybatis

一.关于spring boot 1.spring boot 简而言之就是使spring启动更容易,它的座右铭是"just run",大多数spring应用程序仅仅需要很少的配置,使用spring-boot将大大减少编写spring相关的代码量和xml配置文件 2.通常情况下spring-boot会在classpath下寻找application.properties或者application.yml配置文件,绝大多数的应用都会在此配置文件里配置 二 spring boot集成Mybat

Spring学习(五)--构建Spring Web应用程序

一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚下来,被跷跷板弹起,绕过一个微型摩天轮,然后被橡胶靴从桶中踢出去.经过这些后,小钢球会对那只可怜又无辜的老鼠进行捕获.而Spring MVC框架与捕鼠器有些类似.Spring将请求在调度Servlet.处理器映射(handler mapping).控制器以及视图解析器(view resolver)之

Spring学习五、Java配置Spring与代理模式

九.使用Java的方式配置Spring JavaConfig是Spring的一个子项目,在Spring4之后,成为了核心功能 @Configuration public class MyConfig { @Bean public User getUser() { return new User(); } } 纯Java配置,在SpringBoot中随处可见 十.代理模式 代理模式是SpringAOP的底层! 代理模式的分类 静态分类 动态代理 10.1 静态代理 角色分析: 抽象角色:一般会使用

Spring Boot入门——集成Mybatis

步骤: 1.新建maven项目 2.在pom.xml文件中引入相关依赖 3.创建启动类App.java,添加自动扫描mapper 4.在application.properties文件中添加配置信息 5.编写demo测试类 6.编写mapper 7.编写service 8.编写Controller 9.使用PageHelper分页插件 10.获取自增长ID

spring学习 五 依赖注入的方式

依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<bean>标签下使用<property>标签,就是setter注入 2.1: 如果属性是基本数据类型或 String 等简单类型 <bean id="peo" class="com.bjsxt.pojo.People"> <proper

Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(三)

1.配置h2,连接池,MyBatis Maven依赖: <!-- spring与数据库访问集成(非Hibernate) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.1.4.RELEASE</version> </dependency> &

Spring Boot2(二):使用Spring Boot2集成Mybatis缓存机制

前言 学习SpringBoot集成Mybatis的第二章,了解到Mybatis自带的缓存机制,在部署的时候踩过了一些坑.在此记录和分享一下Mybatis的缓存作用. 本文章的源码再文章末尾 什么是查询缓存 MyBatis有一级缓存和二级缓存.记录可以看下这篇博文: 一级缓存 首先看一下什么是一级缓存,一级缓存是指SqlSession.一级缓存的作用域是一个SqlSession.Mybatis默认开启一级缓存. 在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存

Spring学习(五)——集成memcached客户端

memcached是高性能的分布式内存缓存服务器.许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现RDBMS的负担加重.数据库响应恶化. 网站显示延迟等重大影响.memcached特别适合 用来解决上述问题,它可以缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度. 提高可扩展性.本例将在前一篇中 实现的Demo程序基础上集成memcached客户端. 1.单个服务端安装部署 官网http://memca

由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”

在J2EE领域,Hibernate与Mybatis是大家常用的持久层框架,它们各有特点,在持久层框架中处于领导地位. 本文主要介绍Mybatis(对于较小型的系统,特别是报表较多的系统,个人偏向Mybatis),对于它,个人比较喜欢的是: 使用简单.方便: 支持的XML动态SQL的编写,方便浏览.修改,同时降低SQL与应用程序之间的耦合. 不喜欢的是: 出现错误时,调试不太方便 本文主要介绍Mybatis的搭建,是学习Mybatis过程后整理的札记,其中包括“单独搭建Mybaits”和常用的“M