栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SSM框架项目搭建(2)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SSM框架项目搭建(2)

Spring和myBatis整合过程

目录

Spring和myBatis整合过程

企业开发中需处理的问题

整合思路

目标:

整合步骤

Maven配置:

使用基于mybatis名为ehome的maven工程

注意配置中的maven默认配置文件和仓库位置:

注意maven配置pom中的基本参数

在dependencies中声明依赖

准备db.properties

准备Spring和MyBatis的配置文件

准备Spring的配置文件

MyBatis的配置

Spring和mybatis的单元测试

准备代码部分:

准备一个事务管理器管理事务

目的:

思路:

步骤


企业开发中需处理的问题
  1. 需要使用第三方性能优秀的数据库连接池
  2. 设置MyBatis,开启缓存; 其它大部分的配置工作会交接给Spring(mybatis-spring整合包)
  3. 管理mapper:

UserMapper(接口,Dao) -> 配置SQL -> SqlSession->mapper

UserMapper->crud

整合思路
  1. 新建一个maven工程(web工程,springmvc)
  2. 把mybatis中连接属性DataSource和数据库连接池的管理交给Spring

  1. 连接属性DataSource和数据库连接池是第三方插件已经完善了,我们需要借力(c3p0/dhcp/druid) , 采用druid实现数据源,再由Spring管理

  1. 让spring接管myBatis对于mapper的管理 , 通过spring和mybatis的整合包实现

  1. 为了实现SqlSessionFactory , 通过spring和mybatis的整合包实现SqlSessionFactoryBean的管理

目标:

@Autowired (或@Resource)

UserMapper userMapper = null;   

userMapper.selectById() 操作就好了

整合步骤

Maven配置:
  1. Spring的版本:4.3.20
  2. MyBatis的版本:3.4.6
  3. Spring-Mybaits整合包 1.3.0
  4. Junit 4.12
  5. MySQL connectior 驱动 5.1.48
  6. Druid 1.1.20

使用基于mybatis名为ehome的maven工程

脚手架如下:

 

注意配置中的maven默认配置文件和仓库位置:

 

 

注意maven配置pom中的基本参数



    1.8



   
       
            org.apache.maven.plugins
            maven-compiler-plugin
           
                ${java.version}
                ${java.version}
           

       

   

 

资源扫描路径的设置每每都是问题爆发的高发点:


   
    
        
             src/main/java
            
                 **/*.xml
            

        

    

在dependencies中声明依赖




    org.mybatis

    mybatis

    3.4.6







    mysql

    mysql-connector-java

    5.1.48







    org.springframework

    spring-context

    4.3.20.RELEASE







    org.springframework

    spring-core

    4.3.20.RELEASE







    org.springframework

    spring-beans

    4.3.20.RELEASE







    org.springframework

    spring-test

    4.3.20.RELEASE



  

    org.mybatis

    mybatis-spring

    1.3.0







    org.springframework

    spring-jdbc

    4.3.20.RELEASE







    junit

    junit

    4.12

    test





  com.alibaba

  druid

  1.1.20

可以把Spring的版本统一处理:


  UTF-8
  1.8
  1.8
  4.3.20.RELEASE

那么,Spring的相关依赖就可以写为下面这种方式:



  org.springframework
  spring-context
  ${spring-version}



  org.springframework
  spring-core
  ${spring-version}



  org.springframework
  spring-beans
  ${spring-version}



  org.springframework
  spring-test
  ${spring-version}

将来,若想要升级或调整Spring的版本,只需要改动Properties中的配置即可

添加完毕后 import

 

准备db.properties

在resources/properties目录下创建,并添加:

druid.driver=com.mysql.jdbc.Driver

druid.url=jdbc:mysql://localhost:3306/sasu?useSSL=false&characterEncoding=utf8

druid.username=root

druid.password=root

此处druid前缀作为一个标记,表明连接池的配置特点,不是必须的

准备Spring和MyBatis的配置文件

准备Spring的配置文件
通过context:property-placeholder加载db.properties配置文件
 

扫描指定包路径,自动装载目标Bean(带有特殊功能的注解@Component @Service @Controller)

配置数据源dataSource,通过druid第三方数据源/连接池



    

    

    

    

 
配置SqlSessionFactory , 通过整合包中提供的Bean
 


    

    

    

    

    

            

 
配置扫描器,用于扫描mapper目录
将扫描到的所有的mapper接口通过动态代理的方式创建实例,并装载到spring的bean容器中进行管理
 
 


    

    

    

 
红色标注的部分在配置时常常搞错: 我们需要配的是一个bean的名字,而不是bean本身,所以要用value而不能用ref;能不能用ref呢?不能,原因是spring和mybaits中存在命名的冲突,导致ref到的目标不是Spring中的bean

MyBatis的配置
            xml version="1.0" encoding="UTF-8" ?>

>



    

    



    

        

        

        

        

    



    

    





   



    



 

大家注意,我把大部分内容都注释了,保留下来是提醒我们:除了settings其他内容几乎都被Spring接管了

Spring和mybatis的单元测试

先做一个单元测试,测试Mapper是否被Spring注入成功:

@ContextConfiguration(locations = "classpath:spring.xml")

@RunWith(SpringJUnit4ClassRunner.class)

public class TestSpringMybatis {

    @Autowired

    SysUserMapper sysUserMapper = null;

    @Test

    public void test1(){

        SysUser byId = sysUserMapper.findById(1);

        System.out.println(byId);

    }

}

准备代码部分:

pojo:

Mapper: 逆向工程生成的模板

Service

要点:

  1. 在实现类上增加@Service
  2. @Resource和@Autowired的区别
  3. 在业务中操作中直接用mapper调用即可

业务层测试用例

可能会遇到的问题及解决方案:

  1. DaoSupport : 若使用了JdbcTemplate,需要spring-jdbc 支持 , 通过maven引入
  2. 逆向工程中, namespace名称中多了一个空格 需要去掉

准备一个事务管理器管理事务

目的:

正常完成就提交,出现异常就回滚 , 即 把业务操作用事务管理

思路:

从配置的角度: 声明事务管理器(配置dataSource)

利用注解的方式 @Tranactional 配置在指定的业务上(Service)

       而传统的做法,是spring的声明式事务()

将注解方式驱动起来(spring-config.xml配置)

步骤

创建事务管理器的bean

配置事务管理器 spring提供的 spring-jdbc



    

在UserServiceImpl上增加事务的注解

@Transactional

@Service("userService")

public class UserServiceImpl implements UserService {

将事务管理器的注解方式驱动起来(为了@Transactional)

注意: 针对事务的注解驱动,必须是tx的命名空间

如果提示动态代理的错误,则是由于使用了jdk动态代理,改成cglib的方式:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号