spring整合mybatis(入门级简单教程2)

来源:互联网 发布:智能健康数据分析图 编辑:程序博客网 时间:2024/05/18 13:28
1、这几天在网上查找spring和mybatis的整合的博客以及相关的资料,弄来弄去,程序还是跑不起来。今天早上突然意识到,什么事都是从零开始的,所以,我就改变了我的整合思路:首先,先在spring上整合数据源(请参考本人的上一篇博客),其次,整合sqlSessionFactoryBean。具体请看下面:

2、前期准备:(1)、对mybatis有一定的了解,能够使用其基本功能。(2)、理解spring的相关原理和概念

3、总体的包和类等等
spring整合mybatis(入门级) - 不惊者 - 码农小屋
 

所以,在我们开始之前,请自己下载好相关的jar包,包括
(spring:)
http://repo.spring.io
(mybatis:)
https://github.com/mybatis/mybatis-3/releases
(mybatis-spring:)
https://github.com/mybatis/spring/releases

百度云下载链接
4、配置applicationContext.xml文件:(配置文件里面的前16行是我随便在网上找的,宜多不宜少)
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

<!-- 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost/test"/>
<property name="user" value="root"/>
<property name="password" value=""/>
</bean>

<!-- 注意:这个class是jar包中的 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>

<!-- 关联sqlSessionFacotry, 生成相关的sqlSession; 对mybatis的mapper接口,注入成beans -->
<!-- 注意:这个class是jar包中的 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 注意:这个是value,不是class -->
<property name="mapperInterface" value="com.dao.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

<!-- 这个和上面的bean是差不多的 -->
 <bean id="managerMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.dao.ManagerMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

<!-- 业务bean -->
<bean id="testService" class="com.impl.TestServiceImpl">
<property name="userMapper" ref="userMapper"/>
<property name="managerMapper" ref="managerMapper"/>
</bean>
</beans>


5、models,包括user和manager

public class User {

private int id;
private String name;
private String password;

public User(){

}

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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}


}


package com.models;

public class Manager {

private int id;
private String name;
private String password;


public Manager(){

}
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

6、mybatis的mapper接口:(没有,也不用实现类)
package com.dao;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import com.models.User;

public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
public User getUser(@Param("id") String userId);
}

import org.apache.ibatis.annotations.Select;

import com.models.Manager;
public interface ManagerMapper {
@Select("SELECT * FROM manager WHERE id = #{id}")
public Manager getManager(String managerID);
}

7、写到这里,我们的工作已经基本上完成了大部分,让我们写一个main函数测试一下:
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.dao.UserMapper;
import com.models.Manager;
import com.models.User;
import com.service.TestService;

public class SpringTest {
public static void main(String[] args) {
ApplicationContext aa = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
//在我数据库中的userId有1这一条
User user = (User)aa.getBean(UserMapper.class).getUser("1");
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getPassword());
}
}

8、接下来,我们写事物的业务接口和实现此接口的业务类:
先看业务接口:

package com.service;

import com.models.Manager;
import com.models.User;

public interface TestService {

public User doSomeBusinessStuff(String userID);

public Manager getManagerBusiness(String managerID);
}

再看看实现类:(注意,下面的两个setter方法不能省略,可以省略getter方法)

package com.impl;

import com.dao.ManagerMapper;
import com.dao.UserMapper;
import com.models.Manager;
import com.models.User;
import com.service.TestService;

public class TestServiceImpl implements TestService{

private UserMapper userMapper;
private ManagerMapper managerMapper;

public void setUserMapper(UserMapper userMapper){
this.userMapper = userMapper;
}


public void setManagerMapper(ManagerMapper managerMapper) {
this.managerMapper = managerMapper;
}

@Override
public User doSomeBusinessStuff(String userID) {
return this.userMapper.getUser(userID);
}

@Override
public Manager getManagerBusiness(String managerID) {
return this.managerMapper.getManager(managerID);
}
}

9、因为之前我们已经在applicationContext.xml文件中配置了上面这个业务实现类的bean,所以,我们的工作已经完成,let我们test一下:

package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.dao.UserMapper;
import com.models.Manager;
import com.models.User;
import com.service.TestService;

public class SpringTest {
public static void main(String[] args) {
ApplicationContext aa = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
/*User user = (User)aa.getBean(UserMapper.class).getUser("1");
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getPassword());*/
 

TestService service = aa.getBean(TestService.class);


//调用业务实现类的第一个方法

 User user = service.doSomeBusinessStuff("1");
System.out.println(user.getId());
System.out.println(user.getName());
System.out.println(user.getPassword());

 

//调用业务实现类的第二个方法

Manager manager = service.getManagerBusiness("1");
System.out.println("manager info = "+manager.getId()+"; "+manager.getName()+"; "+manager.getPassword());
}
}

10、跑起来了吗?come on!!!!!

参考文献:http://mybatis.github.io/spring/


##############################################################################

11、前面我们使用annotation配置mybatis的,但是在实际的项目开发中使用xml文件配置的方式比较多。
所以,下面我们在前面的基础之上使用xml文件配置:


(1)、新增加两个文件,也就是mybatis的xml配置文件,是在config.mappers包下面的:
spring整合mybatis(入门级) - 不惊者 - 码农小屋

<?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="com.dao.UserMapper">
<select id="getUser" parameterType="String" resultType="com.models.User">
select * from user where id = #{userID}
</select>
</mapper>

<?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="com.dao.ManagerMapper">
<select id="getManager" resultType="com.models.Manager" parameterType="String">
Select * From manager where id = #{managerID}
</select>
</mapper>

 (3)、修改spring的配置文件applicationContext.xml(只需增加下划线的配置文字即可,也别忘了删掉annotation的配置)
spring整合mybatis(入门级) - 不惊者 - 码农小屋
0 0