spring和mybatis的整合简介
来源:互联网 发布:gfxbench数据库 编辑:程序博客网 时间:2024/06/14 10:25
今天我来说一下我spring和mybatis的整合,我也是才学这个只能给大家讲一些粗浅的,有大神路过请指点一二 ,谢谢 好现在我们开始讲解
首先 我们还是需要导入jar包,这次我们需要的jar包比较多
第二步搭建整体的框架
包括:dao接口层,mapper.xml
pojo层,User
service层 service接口
serviceImpl 接口实现层
servlet控制层
第三步 搭建好框架之后我们就开始配置xml
创建一个mybatis-cfg.xml文件
创建一个beans.xml文件
第四步配置数据源:
编写beans.xml配置文件,将DataSource数据源,通过配置sqlsessionFactoryBean读取mybatis的核心配置文件,并且扫描实体类】
数据源配置如下 可以说是创建一个驱动类:
<!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/zhanghao?characterEncoding=UTF-8"></property> <property name="username" value="zhanghao"></property> <property name="password" value="zhanghao"></property> </bean>
这里的class的值是一个数据源驱动管理类,而且每个property的命名也是有缘由的,通过jar包的反编译我们可以看到这个我也截了一段给大家看一下
public class DriverManagerDataSource extends AbstractDriverBasedDataSource{ public DriverManagerDataSource() { } public DriverManagerDataSource(String url) { setUrl(url); } public DriverManagerDataSource(String url, String username, String password) { setUrl(url); setUsername(username); setPassword(password); } public DriverManagerDataSource(String url, Properties conProps) { setUrl(url); setConnectionProperties(conProps); } public void setDriverClassName(String driverClassName) { Assert.hasText(driverClassName, "Property 'driverClassName' must not be empty"); String driverClassNameToUse = driverClassName.trim(); try { Class.forName(driverClassNameToUse, true, ClassUtils.getDefaultClassLoader()); } catch (ClassNotFoundException ex) { throw new IllegalStateException("Could not load JDBC driver class [" + driverClassNameToUse + "]", ex); }
第四步,利用bean创建一个sqlSessionFactoryBean
<!--配置SqlSessionFactoryBean读取mybatis核心配置文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-cfg.xml" /> <property name="typeAliasesPackage" value="cn.mmmm.pojo" /> </bean>
这是初始化sqlSessionFactoryBean,property的name是对应类的属性,这些都是通过反编译jar得到的这里也给大家截了一些
private static final Log LOGGER = LogFactory.getLog(SqlSessionFactoryBean.class); private Resource configLocation; private Resource[] mapperLocations; private DataSource dataSource; private TransactionFactory transactionFactory; private Properties configurationProperties; private SqlSessionFactoryBuilder sqlSessionFactoryBuilder; private SqlSessionFactory sqlSessionFactory; private String environment; private boolean failFast; private Interceptor[] plugins; private TypeHandler<?>[] typeHandlers; private String typeHandlersPackage; private Class<?>[] typeAliases; private String typeAliasesPackage; private Class<?> typeAliasesSuperType; private DatabaseIdProvider databaseIdProvider; private ObjectFactory objectFactory; private ObjectWrapperFactory objectWrapperFactory;
这是对应的一些属性,我没有都配置,只把用到的配置了
第五步 配置扫描mapper的映射接口类
<!-- 扫描mybatis映射接口类 --> <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="cn.mmmm.mapper.UserMapper"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean>
这也是对应的类,我也反编译了,截取了属性给大家看
private Class<T> mapperInterface;
这是这个类的唯一一个属性是对应的接口,第二个是和工厂发生关系,这相当于写到getmapper的地方
马上就要到头了坚持一下,第六步:创建service实现类:引用userMapper
<!-- 创建service实现类 --> <bean id="userService" class="cn.mmmm.service.impl.UserServiceImpl"> <property name="userMapper" ref="userMapper"></property> </bean>
到这我们其实可以去写一个测试类看看准确性了我 这也提供了测试类 方便大家,其实写这个主要是细心,我有时候也会因为马虎而费好大的劲;
测试:
package cn.bjsxt.test;import java.util.List;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.mmmm.service.impl.UserServiceImpl;public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml"); UserServiceImpl us = (UserServiceImpl) ac.getBean("userService"); System.out.println(us.findAll());}}
最后我们要加一个事务管理,为什么要加入事务管理呢?大家知道事务的四大特性吗?原子性,一致性,隔离性,持久性。因为有了事务,我们的数据才会更安全,减少不安全因素
这里一次我就都给出了
1.在sping配置文件中添加命名空间
2.添加事务管理类
3.配置事务通知
4.配置事务的切面
<!-- 创建事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 配置事务传播特性:propagation:REQUIRED:每次查询的时候,看是否开启事务,如果没有开启事务,则开启事务 --> <tx:attributes> <tx:method name="add" propagation="REQUIRED"/> <tx:method name="delete" propagation="REQUIRED" /> <tx:method name="update" propagation="REQUIRED"/> <tx:method name="get" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <aop:pointcut expression="execution(* cn.mmmm.service.impl.*.*(..))" id="pointcut"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> </aop:config>
最后说一下事务的传播特性
1、Propagation.REQUIRED
方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。
2、Propagation.REQUIRES_NEW
无论何时自身都会开启事务
3、Propagation.SUPPORTS
自身不会开启事务,在事务范围内则使用相同事务,否则不使用事务
4、Propagation.NOT_SUPPORTED
自身不会开启事务,在事务范围内使用挂起事务,运行完毕恢复事务
5、Propagation.MANDATORY
自身不开启事务,必须在事务环境使用否则报错
6、Propagation.NEVER
自身不会开启事务,在事务范围使用抛出异常
7、Propagation.NESTED
如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。需要JDBC3.0以上支持。
- spring和mybatis的整合简介
- spring 和 mybatis 的整合
- Mybatis 和 Spring 的整合
- Spring和Mybatis的整合
- Mybatis和Spring的整合
- Mybatis和spring的整合
- mybatis和Spring的整合
- spring和mybatis的整合
- Mybatis和Spring的整合
- Mybatis和Spring整合
- mybatis和spring整合
- spring和mybatis整合
- Spring和MyBatis整合
- mybatis和spring整合
- spring和mybatis整合
- spring和mybatis整合
- Spring和Mybatis整合
- Spring和MyBatis整合
- ubuntu下从源码编译比特币(Bitcoin)客户端
- IO流
- python远程调用rpc模块xmlrpclib
- 使用Docker搭建hadoop集群
- Android Studio自用配置
- spring和mybatis的整合简介
- 4833: [Lydsy2017年4月月赛]最小公倍佩尔数
- First集和Follow集,FirstVt集和LastVt集的计算
- 17 WebGL在缓冲区中存入顶点的多个类型数据
- hibernate的环境搭建及简单的增删改查
- Android Volley框架定制PostUploadRequest上传文件(图片)
- 计算机网络漫谈之应用层
- 病毒侵袭 HDU
- 去摘,遥不可及的星~