本篇我们将在上一篇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的更多相关文章

  1. spring boot 学习(五)SpringBoot+MyBatis(XML)+Druid

    SpringBoot+MyBatis(xml)+Druid 前言 springboot集成了springJDBC与JPA,但是没有集成mybatis,所以想要使用mybatis就要自己去集成. 主要是 ...

  2. 小代学Spring Boot之集成MyBatis

    想要获取更多文章可以访问我的博客 - 代码无止境. 上一篇小代同学在Spring Boot项目中配置了数据源,但是通常来讲我们访问数据库都会通过一个ORM框架,很少会直接使用JDBC来执行数据库操作的 ...

  3. SpringBoot学习之集成mybatis

    一.spring boot集成Mybatis gradle配置: //gradle配置: compile("org.springframework.boot:spring-boot-star ...

  4. 学习spring第五天 mybatis+spring的整合(maven多模块数据查询使用了分页和连接池),以及aop

    mybatis+spring的整合: 导入的依赖:1.数据库连接:mysql-connector-java 2.连接池:druid 3.servlet:javax.servlet-api 4.jstl ...

  5. spring学习(五) ———— 整合web项目(SSM)

    一.SSM框架整合 1.1.整合思路 从底层整合起,也就是先整合mybatis与spring,然后在编写springmvc. 1.2.开发需求 查询商品列表(从数据库中查询) 1.3.创建web工程 ...

  6. spring boot(三) 集成mybatis

    前言 还记得之前我们写接口也是基于SpringMVC+MyBatis环境下,项目入手就需要N个配置文件,N个步骤才能实现,不但繁琐,而且时间长了xml配置文件太多,难以维护.现在基于spring bo ...

  7. Spring Boot入门——集成Mybatis

    步骤: 1.新建maven项目 2.在pom.xml文件中引入相关依赖 <!-- mysql依赖 --> <dependency> <groupId>mysql&l ...

  8. Spring学习五

    1: servlet生命周期:  Servlet加载    ->   实例化->   服务 ->  销毁 2:Servlet重要函数: init():在Servlet的生命周期中,仅 ...

  9. Spring学习五(JDBC支持)

    Spring的jdbc支持 1配置db.properties,将有关JDBC的信息载入 2bean文件配置数据源,这里用e3p0作为数据源载入db.properties 3配置template的bea ...

  10. Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)

    在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...

随机推荐

  1. html页面转换成pdf

    一般页面都是.jsp页面,所以要把.jsp转换成html,在生成pdf,在网上找了好多方法,只有用一个插件,wkhtmltopdf-0.8.3.exe,生成的pdf会相对的好看. 先附上我做的.jsp ...

  2. mysql统计一个库里面的表的总数

    SELECT COUNT(TABLE_NAME) FROM information_schema.tables WHERE TABLE_SCHEMA = 'weixin_platform' weixi ...

  3. eclipse Android 开发基础 Activity 窗体 界面

    eclipse Android 开发基础 新建工程 新建布局layout,new Android Activity就相当于窗体Form. 新建Activity自动生成src下同名的java代码. pu ...

  4. could not be installed at this time

    无法下载应用 此时无法安装 Unable to Download App ''App" could not be installed at this time 编译程序的时候,Target ...

  5. Mysql 索引概论

    Mysql性能下降原因 JOIN连接过多 ,索引失效(单值,复合), 查询SQL过水, explian 语法分析SQL性能 https://blog.csdn.net/b1303110335/arti ...

  6. x264改变输出分辨率的算法<转>

    x264改变输出分辨率的算法 在某些应用场景下,x264的输入视频分辨率与接收端输出的视频分辨率不同.例如编码端摄像头采集到的YUV数据为1280x720,而接收端视频显示窗口为640x480.对于这 ...

  7. BTN事件的响应区域

    是其下所有小图片的区域组合.是并集

  8. pg_hba.conf、pool_hba.conf 以及 pool_passwd 三者间的关系

    pg_hba.conf.pool_hba.conf 以及 pool_passwd 三者间的关系: 1.pg_hba.conf.pool_hba.conf 以及 pool_passwd 三者关系 pg_ ...

  9. spring boot 2

    服务端验证: // 1.修改实体 @Min(value = 18,message = "必须大于18岁") private int age; // 2.修改add方法 @PostM ...

  10. php 共享内存学习(shmop函数)

    问题:希望可以在进程间共享变量,为共享数据提供快速访问 解决方案:除了可以使用APC模块,还可以用shmop或System V共享内存 //创建键 //将一个可访问的文件路径名转换为一个可供 shmo ...