做网站送邮箱,上海企业公示,网站短信接口怎么做,免费网站制作作业持久层
目录
Mybatis 开发步骤回顾Mybatis 开发中存在的问题Spring 与 Mybatis 整合思路Spring 与 Mybatis 整合的开发步骤Spring 与 Mybatis 整合的编码搭建开发环境 pom.xmlSpring 配置文件的配置编码Spring 与 Mybatis 整合细节持久层整合总述
1、Spring 框架为什么要与持…持久层
目录
Mybatis 开发步骤回顾Mybatis 开发中存在的问题Spring 与 Mybatis 整合思路Spring 与 Mybatis 整合的开发步骤Spring 与 Mybatis 整合的编码搭建开发环境 pom.xmlSpring 配置文件的配置编码Spring 与 Mybatis 整合细节持久层整合总述
1、Spring 框架为什么要与持久层技术进行整合
JavaEE开发需要持久层进行数据库的访问操作JDBC、Hibernate、MyBatis 进行持久开发过程存在大量的代码冗余Spring 基于模板设计模式对于上述的持久层技术进行了封装
2、Spring 可以与哪些持久层技术进行整合
JDBC —— JDBCTemplateHibernateJPA—— HibernateTemplateMyBatis —— SqlSessionFactoryBean、MapperScannerConfigure
Mybatis 开发步骤回顾
实体类 User
public class User implements Serializable {private Integer id;private String name;private String password;public User() {}public User(Integer id, String name, String password) {this.id id;this.name name;this.password password;}public Integer getId() {return id;}public void setId(Integer 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;}
}实体别名 mybatis-config.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Confi 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationtypeAliasestypeAlias aliasuser typecom.yusael.mybatis.User//typeAliasesenvironments defaultmysqlenvironment idmysqltransactionManager typeJDBC/transactionManagerdataSource typePOOLEDproperty namedriver valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/yus?useSSLfalse/property nameusername valueroot/property namepassword value1234//dataSource/environment/environments
/configuration表 t_users
create table t_users values (id int(11) primary key auto_increment,name varchar(12),password varchar(12)
);创建 DAO 接口UserDAO
public interface UserDAO {public void save(User user);
}实现Mapper文件UserDAOMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespacecom.yusael.mybatis.UserDAOinsert idsave parameterTypeuserinsert into t_users(name, password) values (#{name}, #{password})/insert
/mapper注册 Mapper 文件 mybatis-config.xml
mappersmapper resourceUserDAOMapper.xml/
/mappersMybatisAPI 调用
public class TestMybatis {public static void main(String[] args) throws IOException {InputStream inputStream Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);SqlSession session sqlSessionFactory.openSession();UserDAO userDAO session.getMapper(UserDAO.class);User user new User();user.setName(yusael);user.setPassword(123456);userDAO.save(user);session.commit();}
}Mybatis 开发中存在的问题
问题配置繁琐、代码冗余
1. 实体
2. 实体别名 配置繁琐
3. 表
4. 创建 DAO 接口
5. 实现 Mapper 文件
6. 注册 Mapper 文件 配置繁琐
7. Mybatis API 调用 代码冗余Spring 与 Mybatis 整合思路 Spring 与 Mybatis 整合的开发步骤 配置文件ApplicationContext.xml进行相关配置只需要配置一次 编码 1.实体类 2.表 3.创建DAO接口 4.Mapper文件配置
Spring 与 Mybatis 整合的编码
搭建开发环境 pom.xml
dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.2.6.RELEASE/version
/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion2.0.4/version
/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.12/version
/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.43/version
/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.4/version
/dependencySpring 配置文件的配置
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd!--连接池--bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/yus?useSSLfalse/property nameusername valueroot/property namepassword value1234//bean!--创建SqlSessionFactory SqlSessionFactoryBean--bean idsqlSessionFactoryBean classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/!-- 指定实体类所在的包 --property nametypeAliasesPackage valuecom.yusael.entity/!--指定配置文件映射文件的路径还有通用配置--property namemapperLocationslistvalueclasspath:com.yusael.dao/*Mapper.xml/value/list/property/bean!--创建DAO对象 MapperScannerConfigure--bean idscanner classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namesqlSessionFactoryBeanName valuesqlSessionFactoryBean/!--指定DAO接口放置的包--property namebasePackage valuecom.yusael.dao//bean/beans编码
实体 com.yusael.entity.User
public class User implements Serializable {private Integer id;private String name;private String password;public Integer getId() {return id;}public void setId(Integer 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;}
}
表 t_user
create table t_users values (id int(11) primary key auto_increment,name varchar(12),password varchar(12)
);DAO接口 com.yusael.dao.UserDAO
public interface UserDAO {public void save(User user);
}Mapper文件配置 resources/applicationContext.xml
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd!--连接池--bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/yus?useSSLfalse/property nameusername valueroot/property namepassword value1234//bean!--创建SqlSessionFactory SqlSessionFactoryBean--bean idsqlSessionFactoryBean classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property nametypeAliasesPackage valuecom.yusael.entity/property namemapperLocationslistvalueclasspath:com.yusael.dao/*Mapper.xml/value/list/property/bean!--创建DAO对象 MapperScannerConfigure--bean idscanner classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namesqlSessionFactoryBeanName valuesqlSessionFactoryBean/property namebasePackage valuecom.yusael.dao//bean/beans测试
/*** 用于测试: Spring 与 Mybatis 的整合*/
Test
public void test() {ApplicationContext ctx new ClassPathXmlApplicationContext(/applicationContext.xml);UserDAO userDAO (UserDAO) ctx.getBean(userDAO);User user new User();user.setName(xiaojr);user.setPassword(999999);userDAO.save(user);
}Spring 与 Mybatis 整合细节
问题Spring 与 Myabatis 整合后为什么 DAO 不提交事务但是数据能够插入数据库中
Mybatis 提供的连接池对象 — 创建 ConnectionConnection.setAutoCommit(false) 手工的控制了事务操作完成后需要手工提交。DruidC3P0、DBCP作为连接池 — 创建 ConnectionConnection.setAutoCommit(true) 默认值为 true保持自动控制事务一条 sql 自动提交。
答案因为 Spring 与 Mybatis 整合时引入了外部连接池对象保持自动的事务提交这个机制Connection.setAutoCommit(true)不需要手工进行事务的操作也能进行事务的提交。
注意实战中还是会手工控制事务多条SQL一起成功一起失败后续 Spring 通过 事务控制 解决这个问题。