这里是全局整合的工程结构
这里是整合思路步骤,具体详细见相对应代码
一、如何整合Spring和Mybatis的思路分析(整合的是原生的Dao);
1.需要先配置Mybatis的全局配置文件(在此之前需要先把工程结构搭建好)
2.需要配置spring的全局配置文件
3.然后配置mybatis的mapper的SQL映射配置文件,并把这个xml文件路径加载到Mybatis的全局配置文件中
4.创建对应数据库的实体类bean
5.实现Dao层要实现的功能接口(是增删改查的那种接口)
6.如果需要使用的是原生的Dao,就需要去写一个实现Dao接口的实现类(这里需要继承SqlSessionDaoSupport来得到sqlsession工厂)
7.最后是使用Junit测试(使用的时候需要先构建属性applicationContext来把spring的全局配置文件加载进来用ClassPathXmlApplicationContext方法)
1.需要先配置Mybatis的全局配置文件(在此之前需要先把工程结构搭建好)
<?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>
<!-- 加载属性文件 -->
<properties resource="db.properties">
<!--properties中还可以配置一些属性名和属性值 -->
<!-- <property name="jdbc.driver" value=""/> -->
</properties>
<!-- 全局配置参数,需要时再设置 -->
<!-- <settings>
</settings> -->
<!-- 别名定义 -->
<typeAliases>
<!--这个是批量别名定义,扫描po包下的类,来自动定义别名-->
<package name="cn.itcast.ssm.po"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis-->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 加载 的映射文件 -->
<mappers>
<!--这个是使用mapper代理的方法把映射写SQL语句的那个xml文件交给mybatis来管理-->
<mapper resource="sqlmap/User.xml"/>
<!--这个是批量加载mapper,mybatis会自动加载这个包下的所有mapper接口进行加载,前提是使用mapper代理的方法-->
<package name="cn.itcast.ssm.mapper"/>
</mappers>
</configuration>
2.需要配置spring的全局配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!--这个是为了加载配置文件db.properties文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--所以还需要配置数据源,jdcp(连接池)-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10"/>
<property name="minIdle" value="5"/>
</bean>
<!--这个是先把sqlSessionFactory给配置到spring容器中-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--加载mybatis的配置文件-->
<property name="configLocation" value="mybatis/SqlMapConfig.xml"/>
<!--加载mybatis的配置文件-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--这里是配置原始的Dao的-->
<bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
3.然后配置mybatis的mapper的SQL映射配置文件,并把这个xml文件路径加载到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">
<!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="test">
<!-- 在 映射文件中配置很多sql语句 -->
<!-- 需求:通过id查询用户表的记录 -->
<!-- 通过 select执行数据库查询
id:标识 映射文件中的 sql
将sql语句封装到mappedStatement对象中,所以将id称为statement的id
parameterType:指定输入 参数的类型,这里指定int型
-->
<select id="findUserById" parameterType="int" resultType="cn.itcast.ssm.po.User">
SELECT * FROM user WHERE id= #{value}
</select>
</mapper>
4.创建对应数据库的实体类bean
package cn.itcast.ssm.po;
/*
这个是一个对应数据库的实体类的对象
*/
public class User {
private int id;
private String name;
private String password;
private String email;
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;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
5.实现Dao层要实现的功能接口(是增删改查的那种接口)
package cn.itcast.ssm.dao;
import cn.itcast.ssm.po.User;
//这个是使用原始的dao开发技术来写的接口,然后再去实现
public interface UserDao {
//根据id查询用户信息
public User findUserById(int id) throws Exception;
}
6.如果需要使用的是原生的Dao,就需要去写一个实现Dao接口的实现类(这里需要继承SqlSessionDaoSupport来得到sqlsession工厂)
package cn.itcast.ssm.dao;
import cn.itcast.ssm.po.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;
//这个还是实现原生DAO方法的接口实现类,还需要继承SqlSessionDaoSupport这个类
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
//实现通过id来查询用户信息的实现接口
@Override
public User findUserById(int id) throws Exception {
//因为这里继承了SqlSessionDaoSupport这个接口,所以可以直接用它自己封装的getSqlSession()方法来得到sqlsession
SqlSession sqlSession = this.getSqlSession();
User user = sqlSession.selectOne("test.findUserById", id);
//因为sqlsession也直接都交给了spring来管理了,所以这里也不需要在自己手动去关闭sqlsession了
return user;
}
//实现来增加用户信息的实现接口
}
7.最后是使用Junit测试(使用的时候需要先构建属性applicationContext来把spring的全局配置文件加载进来用ClassPathXmlApplicationContext方法)
package test;
import cn.itcast.ssm.dao.UserDao;
import cn.itcast.ssm.po.User;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserDaoImplTest {
private ApplicationContext applicationContext;
@Before
public void setUp() throws Exception {
//这里是测试类,因为你需要把你的bean都交给spring来去管理,所以你需要得到spring的容器,也就是需要得到spring的全局配置文件
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
}
@Test
public void findUserById() throws Exception {
//然后就开始
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
User user = userDao.findUserById(1);
System.out.println(user.toString());
}
}