前期
数据库准备
本文使用的是mysql数据库,默认已启动mysql,且已存在数据库mybatis
接下来,创建表,并插入数据
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `users`
-- ----------------------------
BEGIN;
INSERT INTO `users` VALUES ('1', 'Lily', '18'), ('2', 'HanMeiMei', '60'), ('3', 'David', '30');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
sql语句执行完成后,即完成了数据的准备工作。
接着我们开始一步步的来搭建Maven+spring+Mybatis+Mysql环境吧
Maven+spring+Mybatis+Mysql环境搭建
1.创建Maven工程
如何创建Maven工程,可参考另一篇文章:http://www.jianshu.com/p/2786d27452e7 这里就不再多述。
2.添加相关依赖
首先需要在pom.xml文件中添加spring相关依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
接着添加MyBatis-Spring依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
MyBatis-Spring简单介绍(官网地址点这里):
MyBatis-Spring将MyBatis与Spring无缝集成。该库允许MyBatis参与Spring事务,负责构建MyBatis映射器和SqlSession,并将它们注入到其他bean中,将MyBatis异常转换为Spring DataAccessException,最后,它允许您构建您的应用程序代码,而不依赖于MyBatis, Spring或MyBatis-Spring。
继续添加MyBatis依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
添加mysql依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.15</version>
</dependency>
需要测试验证环境是否已配置ok,再添加一个testng的依赖:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
</dependency>
至此,所需要用到的jar都已添加成功,接下来继续看如何修改配置文件
3.配置文件
spring配置文件beans.xml,spring的配置文件比较简单,这里就不多做介绍了。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置数据源 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!--配置sessionfactory,spring和mybatis的完美结合,不需要mybatis的配置映射文件-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--自动扫描mapper.xml文件-->
<property name="mapperLocations" value="classpath:com.exp.mybatis.service/**/*Mapper.xml"/>
</bean>
<!--装配Dao接口,spring会自动查找其下的类-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.exp.mybatis.service.mapper" />
<property name="sqlSessionFactoryBeanName" value="sessionFactory" />
</bean>
<!--声明式事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
其中需要注意的是如果未配置<property name="mapperLocations" value="classpath:com.exp.mybatis.service/**/*Mapper.xml"/>
则默认是在basePackage对应的目录下寻找mapper.xml文件;如果映射接口类文件(.java)与映射xml文件(.xml)不在同一个包下的话,需要配置mapperLocations属性。
实例
上面三步已经将框架基本搭好,接下来,一个实例来看看如何应用。
首先,新建Users bean(User.java)
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
其次,新建映射接口文件(UsersMapper.java)
public interface UsersMapper {
User getUser(int id);
}
接着,新建映射xml文件(UsersMapper.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,namespace的值习惯上设置成包名+sql映射文件名,
这样就能够保证namespace的值是唯一的例如namespace="com.exp.mybatis.service.mapper.UsersMapper"
就是(包名)+UsersMapper(UsersMapper.xml文件去除后缀)
-->
<mapper namespace="com.exp.mybatis.service.mapper.UsersMapper">
<!-- 在select标签中编写查询的SQL语句,设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="com.exp.mybatis.service.domain.User"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类-->
<!--根据id查询得到一个user对象-->
<select id="getUser" parameterType="int" resultType="com.exp.mybatis.service.domain.User">
select * from users where id=#{id,jdbcType=INTEGER}
</select>
</mapper>
最后,在新建一个测试类(UserTest.java)来验证是否能够正常操作数据库数据
@ContextConfiguration(locations = {"classpath:beans.xml"})
public class UserTest extends AbstractTestNGSpringContextTests {
@Autowired
UsersMapper usersMapper;
@Test
public void test(){
User user = usersMapper.getUser(1);
System.out.println(user.getAge());
System.out.println(user.getName());
}
}
run执行test(),执行结果正确,结果:

工程目录结构如下:

搭环境过程中遇到的问题
1.报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):xx.xx.xx(包名).xx(类名).xx(方法名)
原因分析:从异常信息的提示来看是一个无效的语句绑定错误,一般出现该错误是由于MyBatis的Mapper映射的xml文件丢失或者没配置好
解决办法:检查自己的映射文件
- 文件名是否有错误
- mapper映射文件路径是不是不对
- target中是否有mapper.xml文件
网友评论