1 创建复杂对象

复杂对象: 类中没有构造方法,或者构造方法不能调用如接口类型或抽象类实例
1.编写ConnectionFactoryBean的代码如下:

package com.txw.factory;import org.springframework.beans.factory.FactoryBean;
import java.sql.Connection;
import java.sql.DriverManager;
/*** @author Adair* E-mail: 1578533828@qq.com*/
public class ConnectionFactoryBean implements FactoryBean<Connection> {@Overridepublic Connection getObject() throws Exception {Class.forName("com.mysql.jdbc.Driver");return DriverManager.getConnection("jdbc:mysql://192.168.64.128:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai","root","123456");}@Overridepublic Class<?> getObjectType() {return Connection.class;}@Overridepublic boolean isSingleton() {return false;}
}

如图所示:
2.配置工厂管理的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--管理 核心业务对象 目标对象--><bean id="connectionFactoryBean" class="com.txw.factory.ConnectionFactoryBean"></bean>
</beans>

如图所示:
3.编写SpringTest的代码如下:

package com.txw.factory;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/*** 测试* @author Adair* E-mail: 1578533828@qq.com*/
public class SpringTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("factory/spring.xml");ConnectionFactoryBean connectionFactoryBean = (ConnectionFactoryBean) context.getBean("connectionFactoryBean");System.out.println(connectionFactoryBean);}
}

如图所示:

2 SM整合思路

2.1 spring框架的作用

spring框架 项目管理框架 主要负责项目中组件对象的创建。

2.2 Mybatis框架的作用

Mybatis框架 持久层框架 主要用来简化数据库访问的操作。

2.3 整合思路

整合思路: 两个框架作用不同,貌似没有什么联系,更深入看才能看出所谓Spring整合Mybatis,其实就是通过spring框架接管mybatis框架中核心对象的创建

2.4 mybatis中的核心对象有哪些

Mybatis的核心对象为: SqlSessionFactory 整合就是通过Spring管理SqlSessionFactory对象的创建。

2.5 整合思路图示

3 SM整合DAO编程步骤

1.引入相关的依赖的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.txw</groupId><artifactId>spring-03</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><!--依赖坐标--><dependencies><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.8</version></dependency><!--spring 4.3.2相关依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.2.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.2.RELEASE</version></dependency><!--mybatis-spring整合jar--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!--数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><build><finalName>spring-03</finalName></build>
</project>

如图所示:
2.创建数据库及表结构的SQL语句如下:

drop table t_user;
CREATE TABLE `t_user` (`id` varchar(40) NOT NULL,`name` varchar(40) DEFAULT NULL,`age` int(3) DEFAULT NULL,`birthday` timestamp NULL DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

如图所示:
3.编写的User的代码如下:

package com.txw.entity;import java.io.Serializable;
import java.util.Date;
/*** 用户实体类* @author Adair* E-mail: 1578533828@qq.com*/
@SuppressWarnings("all")   // 注解警告信息
public class User implements Serializable {private int id;private String name;  // 姓名private int age;  // 年龄private Date birthday;  //  生日public User() {}public User(int id, String name, int age, Date birthday) {this.id = id;this.name = name;this.age = age;this.birthday = birthday;}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;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", birthday=" + birthday +'}';}
}

如图所示:
4.编写UserDAO的代码如下:

package com.txw.dao;import com.txw.entity.User;
import java.util.List;
/*** 用户持久层* @author Adair* E-mail: 1578533828@qq.com*/
@SuppressWarnings("all")   // 注解警告信息
public interface UserDAO {/*** 查询所有* @return*/public List<User> findAll();
}

如图所示:
5.编写UserDaoMapper.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="com.txw.dao.UserDAO"><!--查询所有--><select id="findAll" resultType="com.txw.entity.User">select * from t_user</select>
</mapper>

如图所示:
6.编写Spring-myabtis.xml的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--创建数据源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://192.168.64.128:3306/test?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="123456"/></bean><!--创建sqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" ><array><value>classpath:com/txw/mapper/UserDAOMapper.xml</value></array></property></bean><!--创建DAO--><bean id="userDAO" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="sqlSessionFactory" ref="sqlSessionFactory"/><property name="mapperInterface" value="com.txw.dao.UserDAO"/></bean>
</beans>

如图所示:
7.编写SpringTest的代码如下:

package com.txw.test;import com.txw.dao.UserDAO;
import com.txw.entity.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
/*** 测试类* @author Adair* E-mail: 1578533828@qq.com*/
public class SpringTest {@Testpublic void testFindAll(){ApplicationContext context = new ClassPathXmlApplicationContext("Spring-myabtis.xml");UserDAO userDAO = (UserDAO) context.getBean("userDAO");List<User> users = userDAO.findAll();for (User user : users) {System.out.println(user);}}
}

如图所示:

4 SM整合Service编程步骤

如图所示:
1.编写的UserService的代码如下:

package com.txw.service;import com.txw.entity.User;
import java.util.List;
/*** 用户业务层* @author Adair* E-mail: 1578533828@qq.com*/
@SuppressWarnings("all")  // 注解警告信息
public interface UserService {/*** 查询所有* @return*/public List<User> findAll();
}

如图所示:
2.编写的UserServiceImpl的代码如下:

package com.txw.service.impl;import com.txw.dao.UserDAO;
import com.txw.entity.User;
import com.txw.service.UserService;
import java.util.List;
/*** 用户业务层* @author Adair* E-mail: 1578533828@qq.com*/
@SuppressWarnings("all")  // 注解警告信息
public class UserServiceImpl implements UserService {private UserDAO userDAO;public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}/*** 查询所有* @return*/@Overridepublic List<User> findAll() {return userDAO.findAll();}
}

如图所示:
3.在Spring-myabtis.xml添加的代码如下:

<?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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://192.168.64.128:3306/test?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="123456"/></bean><!--创建sqlSessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" ><array><value>classpath:com/txw/mapper/UserDAOMapper.xml</value></array></property></bean><!--创建DAO--><bean id="userDAO" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="sqlSessionFactory" ref="sqlSessionFactory"/><property name="mapperInterface" value="com.txw.dao.UserDAO"/></bean><!--创建事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!--配置事务属性--><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="save*"/><tx:method name="update*"/><tx:method name="delete*"/><tx:method name="find*"/></tx:attributes></tx:advice><!--配置事务切面--><aop:config><aop:pointcut id="pc" expression="within(com.txw.service.*)"/><aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/></aop:config><!--配置Service组件--><bean id="userService" class="com.txw.service.impl.UserServiceImpl"><property name="userDAO" ref="userDAO"/></bean>
</beans>

如图所示:

5 事务属性

5.1 事务传播属性

propagation: 传播REQUIRED:            需要事务,外部存在事务融入当前事务,外部没有事务,开启新的事务。SUPPORTS:            支持事务,外部存在事务融入当前事务,外部没有事务,不开启新的事务。REQUIRES_NEW:        每次开启新的事务,如果外部存在事务外部事务挂起,开启新的事务运行,运行结束后回复外部事务。NOT_SUPPORTED:       不支持事务,如果外部存在事务外部事务挂起,已非事务方式运行。NEVER:                 不支持事务,存在事务报错。MANDATORY:             强制事务没有事务报错。NESTED:              嵌套事务,数据库不支持。

5.2 事务的隔离级别

isolation 隔离级别DEFAULT:           采用数据库默认隔离级别。READ_UNCOMMITTED:   读未提交。READ_COMMITTED:    读提交 用来避免脏读现象出现的   oracle默认隔离级别。REPEATABLE_READ:     可重复读主要是用来避免不可重复读现象出现的 (在一次事务中一方更新,导致两次查询结果不一致这种情况叫不可重复读)  mysql默认隔离级别。SERIALIZABLE:     序列化读 用来避免幻影读现象出现          (在一次事务中一方插入,导致两次查询结果不一致这种情况叫幻影读)。

5.3 读写和异常性

 readonly `true:    本次事务只读。`false:   本次事务非只读。<tx:method name="save*" propagation="REQUIRES_NEW" read-only="true|false" isolation="SERIALIZABLE"/>rollback-for && no-rollback-for=""rollback-for: 遇到什么类异常回滚。no-rollback-for: 遇到什么类异常不回滚。<tx:method name="save*" rollback-for="" no-rollback-for="" propagation="REQUIRES_NEW" read-only="true" isolation="SERIALIZABLE"/>timeout 超时性timeout: -1 永不超时。

Spring+Mybatis整合相关推荐

  1. springMVC+Spring+mybatis整合配置版与注解版

    springMVC+Spring+mybatis整合 , 使用配置版来完成: -----------------------------前端 1.创建web系统,导入jar包: spring的jar包 ...

  2. java spring+mybatis整合实现爬虫之《今日头条》搞笑动态图片爬取

    java spring+mybatis整合实现爬虫之<今日头条>搞笑动态图片爬取(详细) 原文地址原博客地址 先上效果图 抓取的动态图: 数据库: 一.此爬虫介绍 今日头条本身就是做爬虫的 ...

  3. mybatis学习(十一)——springmvc++spring+mybatis整合

    做任何一个项目都以一个需求,这里先定义一下需求:利用三大框架查询酒店列表. 一.搭建开发环境 1.创建一个web项目 我这里用的是 jdk1.8+tomact7.0 2.创建hotel表 CREATE ...

  4. 保姆级Spring+Mybatis整合的简单增删改查功能实现

    Springboot和Mybatis整合实现增删改查等 0.文章中pageHelper相关的操作是分页查询的东西与本文无关 1.首先创建一个Springboot的项目 1.1Java一般选择的是8,看 ...

  5. Jstorm+Spring+mybatis整合

    在现有的jstorm框架下,有一个需求:jstorm要对接mysql数据库的实时读取数据, 通过bolt处理,可能要调用service层的框架,最后保存到数据库. 在网上寻找了一下,发现storm集成 ...

  6. jstorm mysql_Jstorm+Spring+mybatis整合

    在现有的jstorm框架下,有一个需求:jstorm要对接mysql数据库的实时读取数据, 通过bolt处理,可能要调用service层的框架,最后保存到数据库. 在网上寻找了一下,发现storm集成 ...

  7. java使用druid maven_SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置...

    一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...

  8. SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

    一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...

  9. 解决spring mybatis 整合后mapper接口注入失败

    spring整合mybatis,在dao层我们只写一个接口,配置相应的*mapper.xml文件, 报如下错误: 1 org.springframework.beans.factory.Unsatis ...

  10. spring+mybatis整合读取不了配置文件

    报错如下: java.sql.SQLException: unkow jdbc driver : ${jdbc.url} 其余错误就不贴了,主要原因是没有读取到配置文件 读取配置文件代码: <b ...

最新文章

  1. 2017前端开发者必学清单
  2. 基于Spring可扩展Schema提供自定义配置支持
  3. Google 开源 AdaNet:快速灵活的轻量级 AutoML 框架
  4. 职业规划纵向横向_收下这份《职业规划喂饭式指南》
  5. 17-8-26-WebApp总结
  6. 上传网站到服务器的tomcat
  7. 文字处理技术:完成了对表格的布局处理
  8. 【智能电网】分数阶微积分在决策系统中的应用,通过决策树实现智能电网管理(Matlab代码实现)
  9. 【百度编辑器】修改上传图片缩略图大小
  10. ROS下里程计辅助2D激光雷达去运动畸变
  11. 【渝粤题库】广东开放大学 金融经济学 形成性考核
  12. 浅谈自然语言处理(NLP)和 自然语言理解(NLU)
  13. 在html页面引入外部html的方法 (使用第三方插件)
  14. python wait notify_java与python多线程wait,notify操作比较
  15. 1.3 “音乐”小程序项目
  16. BZOJ 4668: 冷战
  17. hdu3182 状态压缩水题
  18. paraview vtk文件乱码_如何在ParaView中为一系列传统VTK文件设置自定义时间步长值?...
  19. JAVA抽象类接口初始化块实验_抽象类和接口 - 逝水无痕7777的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. 深圳大学计算机专业考研复试难吗,深圳大学2021计算机与软件考研数据分析

热门文章

  1. uni-app实现XCode苹果本地离线打包APP
  2. 推荐一个好用的搜索微信公众号文章的搜索引擎
  3. 惠普HPE服务器升级iLO4固件版本
  4. 谁是 GameFi 3 月最大的赢家| March Monthly Report
  5. 从零开始学WEB前端——HTML实战练习
  6. 踩坑指南!pytorch1.2.0安装!又是猛男落泪的一天!
  7. 【百度编辑器】修改上传图片缩略图大小
  8. P4816 [USACO15DEC]High Card Low Card G 题解
  9. 用texstudio写伪代码
  10. 微信怎样关闭QQ文件服务器,如何屏蔽QQ和微信的外发文件?