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的更多相关文章
- spring boot 学习(五)SpringBoot+MyBatis(XML)+Druid
SpringBoot+MyBatis(xml)+Druid 前言 springboot集成了springJDBC与JPA,但是没有集成mybatis,所以想要使用mybatis就要自己去集成. 主要是 ...
- 小代学Spring Boot之集成MyBatis
想要获取更多文章可以访问我的博客 - 代码无止境. 上一篇小代同学在Spring Boot项目中配置了数据源,但是通常来讲我们访问数据库都会通过一个ORM框架,很少会直接使用JDBC来执行数据库操作的 ...
- SpringBoot学习之集成mybatis
一.spring boot集成Mybatis gradle配置: //gradle配置: compile("org.springframework.boot:spring-boot-star ...
- 学习spring第五天 mybatis+spring的整合(maven多模块数据查询使用了分页和连接池),以及aop
mybatis+spring的整合: 导入的依赖:1.数据库连接:mysql-connector-java 2.连接池:druid 3.servlet:javax.servlet-api 4.jstl ...
- spring学习(五) ———— 整合web项目(SSM)
一.SSM框架整合 1.1.整合思路 从底层整合起,也就是先整合mybatis与spring,然后在编写springmvc. 1.2.开发需求 查询商品列表(从数据库中查询) 1.3.创建web工程 ...
- spring boot(三) 集成mybatis
前言 还记得之前我们写接口也是基于SpringMVC+MyBatis环境下,项目入手就需要N个配置文件,N个步骤才能实现,不但繁琐,而且时间长了xml配置文件太多,难以维护.现在基于spring bo ...
- Spring Boot入门——集成Mybatis
步骤: 1.新建maven项目 2.在pom.xml文件中引入相关依赖 <!-- mysql依赖 --> <dependency> <groupId>mysql&l ...
- Spring学习五
1: servlet生命周期: Servlet加载 -> 实例化-> 服务 -> 销毁 2:Servlet重要函数: init():在Servlet的生命周期中,仅 ...
- Spring学习五(JDBC支持)
Spring的jdbc支持 1配置db.properties,将有关JDBC的信息载入 2bean文件配置数据源,这里用e3p0作为数据源载入db.properties 3配置template的bea ...
- Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)
在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...
随机推荐
- jenkins之构建触发器
build whenever a snapshot dependency is built 当job依赖的快照版本被build时,执行本job. build after other projects ...
- Python开发一个堡垒机
项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒 ...
- 深度解析Java中的那把锁
锁的本质 我们先来讨论锁的出现是为了解决什么问题,锁要保证的事情其实很好理解,同一件事(一个代码块)在同一时刻只能由一个人(线程)操作. 这里所说的锁为排他锁,暂不考虑读写锁的情况 我们在这里打个比方 ...
- angularjs中的$http详解
语法: 要将区别先弄清$http服务,它是对原生XMLHttpRequest对象的简单封装,是只能接受一个参数的方法, 这个方法会返回一个promise对象,具有sccess和error两个方法.当然 ...
- 在coursera上有哪些值得推荐的课程
来自知乎 https://www.zhihu.com/question/22436320/answer/224996328
- c语言实现常见字符串函数strchr strstr strcmp atoi itoi(字符串换成整数)
好久没有更新博客了,刚刚出炉练练手的程序如下,很简单,没有考虑过多复杂的东西,有好的想法,欢迎指教: 字符查找函数: char *my_strchr(const char *s,int c) { ch ...
- manjaro 下golang protobuf的使用
1.下载protobuf compiler sudo pacman -S protobuf 2.添加环境变量GOBIN export GOBIN=~/go/bin 3.下载golang依赖的包 go ...
- selenium+java,实现部分截图功能,-针对单个元素的截图
有时候需要元素的截图,不需要整个截图.整理一个针对元素的截图的方法. 创建一个Java类,实现截取元素的方法 package com.lozz.utils; import java.awt.Recta ...
- ios 解决Wkwebview闪烁问题
// 网页闪烁问题 if ([self.webView.realWebView isKindOfClass:[WKWebView class]]) { ((WKWebView * ...
- 微信小程序地图之逆地理编码
首先说一下,我微信自带map的api中并没有相关接口可调用.文中的方法建立于高德地图.(顺便吐槽,微信开发文档相比支付宝家的显得好烂!) 最近做项目用到地图定位相关的需求,为了搞定需求看了下相关的文档 ...