• Mybatis与Spring的集成


    目录

    一、Mybatis与spring集成

    1.导入pom依赖

    2.创建spring配置文件applicationContext

     3.注解式开发

    二、Aop整合pagehelper插件

    4、Spring Test+junit完美组合


    一、Mybatis与spring集成

    1.导入pom依赖

    配置文件
                spring-hibernate.xml
                    注册数据库连接信息文件
                    配置数据库连接池
                    配置sessionfactory工厂信息-》hibernate.cfg.xml
                    配置hibernatetemplete
                    配置声明式事务

     1.1 添加spring相关依赖(5.0.2.RELEASE)


           spring-core
           spring-beans
           spring-context
           spring-orm
           spring-tx
           spring-aspects
           spring-web 

    1.2 添加mybatis相关依赖
           mybatis核心:mybatis(3.4.5)
           Mybatis分页:pagehelper(5.1.2) 

    1.4 添加dbcp2连接池
           commons-dbcp2(2.1.1)
           commons-pool2(2.4.3) 

     1.5 添加日志配置(2.9.1)
           log4j-core
           log4j-api
           log4j-web

      1.6 其他
           junit(4.12)
           javax.servlet-api(4.0.0)
           lombok(1.18.2)

       注:使用mybatis-generator插件,pom文件添加支持   

     

    2.创建spring配置文件applicationContext

    2.1 注解式开发
       开启注解
       
       
       
       
       component-scan base-package="com.zking.oa"/>

       2.2 引入外部jdbc配置文件
       
     
       2.3 配置dbcp2数据库连接池
       详见“dbcp2.txt”

       2.4 spring和mybatis整合
       详见“spring与mybatis整合.txt”

     3.注解式开发

    1. ssh中数据的增删改查spring的配置如下
    2. @Repository
    3. <bean id=bookDao class=""/>
    4. @Service
    5. <bean id=bookService class="">
    6. @Autowired/@Resource:
    7. <property name=bookDao ref=bookDao/>
    8. bean>
    9. @Constroller
    10. <bean id=bookAction class="">
    11. @Autowired/@Resource:
    12. <property name=bookService ref=bookService/>
    13. bean>
    14. spring ioc注入方式
    15. set
    16. 构造
    17. 自动装配
    18. bytype 根据属性对应的接口在spring的上下文匹配实现类
    19. byname 根据属性名在spring上下文中寻找对应的id的Bean
    20. hibernate与spring测试
    21. applicationContext applicationContext = new classpathxmlappli..("appplicationContext.xml");
    22. applicationContext。getBean("xxxservice");

    @Repository:将DAO类声明为Bean
       @Service:通常作用在业务层
       @Constroller:通常作用在控制层,将在Spring MVC中使用
       @Component:是一个泛化的概念,仅仅表示spring中的一个组件(Bean),可以作用在任何层次
       @Scope:模式声明(singleton|prototype)
       @Autowired:将自动在代码上下文与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方
       @Resource:
       1)@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
       2)指定了name或者type则根据指定的类型去匹配bean
       3)指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错 

    1. <beans xmlns="http://www.springframework.org/schema/beans"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    4. xmlns:aop="http://www.springframework.org/schema/aop"
    5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    6. <context:annotation-config/>
    7. <context:component-scan base-package="com.javaxl.ssm"/>
    8. <context:property-placeholder location="classpath:jdbc.properties"/>
    9. <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
    10. destroy-method="close">
    11. <property name="driverClassName" value="${jdbc.driver}"/>
    12. <property name="url" value="${jdbc.url}"/>
    13. <property name="username" value="${jdbc.username}"/>
    14. <property name="password" value="${jdbc.password}"/>
    15. <property name="initialSize" value="10"/>
    16. <property name="maxTotal" value="100"/>
    17. <property name="maxIdle" value="50"/>
    18. <property name="minIdle" value="10"/>
    19. <property name="maxWaitMillis" value="-1"/>
    20. bean>
    21. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    22. <property name="dataSource" ref="dataSource"/>
    23. <property name="mapperLocations" value="classpath*:com/javaxl/ssm/**/mapper/*.xml"/>
    24. <property name="typeAliasesPackage" value="com/javaxl/ssm/**/model"/>
    25. <property name="plugins">
    26. <array>
    27. <bean class="com.github.pagehelper.PageInterceptor">
    28. <property name="properties">
    29. <value>
    30. helperDialect=mysql
    31. value>
    32. property>
    33. bean>
    34. array>
    35. property>
    36. bean>
    37. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    38. <property name="basePackage" value="com/javaxl/ssm/**/mapper"/>
    39. <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    40. bean>
    41. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    42. <property name="dataSource" ref="dataSource" />
    43. bean>
    44. <tx:annotation-driven transaction-manager="transactionManager" />
    45. <aop:aspectj-autoproxy/>
    46. beans>

     

    二、Aop整合pagehelper插件

    4、Spring Test+junit完美组合

    1. package com.zking.ssm.biz;
    2. import com.zking.ssm.model.Book;
    3. import com.zking.ssm.model.BookVo;
    4. import com.zking.ssm.util.PageBean;
    5. import java.util.List;
    6. import java.util.Map;
    7. public interface BookBiz {
    8. public int deleteByPrimaryKey(Integer bid);
    9. public Book selectByPrimaryKey(Integer bid);
    10. public List selectByIn(List bookIds);
    11. public List selectBooksLike1(String bname);
    12. public List selectBooksLike2(String bname);
    13. public List selectBooksLike3(String bname);
    14. List list1();
    15. List list2();
    16. List list3(BookVo vo);
    17. List list4();
    18. Map list5(Map map);
    19. List listPager(Map map, PageBean pageBean);
    20. List list6(BookVo bookVo);
    21. List list7(BookVo bookVo);
    22. }
    1. package com.zking.ssm.biz.impl;
    2. import com.github.pagehelper.PageHelper;
    3. import com.github.pagehelper.PageInfo;
    4. import com.zking.ssm.biz.BookBiz;
    5. import com.zking.ssm.mapper.BookMapper;
    6. import com.zking.ssm.model.Book;
    7. import com.zking.ssm.model.BookVo;
    8. import com.zking.ssm.util.PageBean;
    9. import org.springframework.beans.factory.annotation.Autowired;
    10. import org.springframework.stereotype.Service;
    11. import java.util.List;
    12. import java.util.Map;
    13. @Service
    14. public class BookBizImpl implements BookBiz {
    15. @Autowired
    16. private BookMapper bookMapper;
    17. // alt+insert 快速提供set/get/tostring/构造方法
    18. // alt+enter 快速构建实现类,填充代码的前半部分 ctrl+1
    19. // public BookMapper getBookMapper() {
    20. // return bookMapper;
    21. // }
    22. // public void setBookMapper(BookMapper bookMapper) {
    23. // this.bookMapper = bookMapper;
    24. // }
    25. @Override
    26. public int deleteByPrimaryKey(Integer bid) {
    27. return bookMapper.deleteByPrimaryKey(bid);
    28. }
    29. @Override
    30. public Book selectByPrimaryKey(Integer bid) {
    31. return bookMapper.selectByPrimaryKey(bid);
    32. }
    33. @Override
    34. public List<Book> selectByIn(List bookIds) {
    35. return bookMapper.selectByIn(bookIds);
    36. }
    37. @Override
    38. public List<Book> selectBooksLike1(String bname) {
    39. return bookMapper.selectBooksLike1(bname);
    40. }
    41. @Override
    42. public List<Book> selectBooksLike2(String bname) {
    43. return bookMapper.selectBooksLike2(bname);
    44. }
    45. @Override
    46. public List<Book> selectBooksLike3(String bname) {
    47. return bookMapper.selectBooksLike3(bname);
    48. }
    49. @Override
    50. public List<Book> list1() {
    51. return bookMapper.list1();
    52. }
    53. @Override
    54. public List<Book> list2() {
    55. return bookMapper.list2();
    56. }
    57. @Override
    58. public List<Book> list3(BookVo vo) {
    59. return bookMapper.list3(vo);
    60. }
    61. @Override
    62. public List<Map> list4() {
    63. return bookMapper.list4();
    64. }
    65. @Override
    66. public Map list5(Map map) {
    67. return bookMapper.list5(map);
    68. }
    69. @Override
    70. public List<Map> listPager(Map map, PageBean pageBean) {
    71. // pageHelper分页插件相关的代码
    72. if(pageBean!=null&&pageBean.isPagination()){
    73. PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    74. }
    75. List<Map> maps = bookMapper.listPager(map);
    76. if(pageBean!=null&&pageBean.isPagination()){
    77. // 处理查询结果的前提是需要分页,是需要分页的
    78. PageInfo info = new PageInfo(maps);
    79. pageBean.setTotal(info.getTotal()+"");
    80. }
    81. return maps;
    82. }
    83. @Override
    84. public List<Book> list6(BookVo bookVo) {
    85. return bookMapper.list6(bookVo);
    86. }
    87. @Override
    88. public List<Book> list7(BookVo bookVo) {
    89. return bookMapper.list7(bookVo);
    90. }
    91. }
    1. package com.zking.ssm.mapper;
    2. import com.zking.ssm.model.Book;
    3. import com.zking.ssm.model.BookVo;
    4. import org.apache.ibatis.annotations.Param;
    5. import org.springframework.stereotype.Repository;
    6. import java.util.List;
    7. import java.util.Map;
    8. @Repository
    9. public interface BookMapper {
    10. int deleteByPrimaryKey(Integer bid);
    11. int insert(Book record);
    12. int insertSelective(Book record);
    13. Book selectByPrimaryKey(Integer bid);
    14. int updateByPrimaryKeySelective(Book record);
    15. int updateByPrimaryKey(Book record);
    16. // 通过in关键字进行查询:讲解foreach 标签的使用
    17. // 如果说参数是非实体类(book,Order,....),那么急的加上注解 @param,bookIds是对应collection属性的
    18. List selectByIn(@Param("bookIds") List bookIds);
    19. List selectBooksLike1(@Param("bname") String bname);
    20. List selectBooksLike2(@Param("bname") String bname);
    21. List selectBooksLike3(@Param("bname") String bname);
    22. // list1 list2的结论是,对于单表查询而言,可以用resultmap/resulttype接收,但是多表必须用resultmap接收
    23. List list1();
    24. List list2();
    25. // 如果要传入多个查询参数,必须以对象的方式进行传递
    26. // 举例:select * from t_mvc_book where bid in (1,2,3,4,5,6) and bname in ("圣墟","不死不休")
    27. List list3(BookVo vo);
    28. // 说明了不管返回1条数据,还是多条数据,都应该用java.util.Map进行接受
    29. // 如果是1条数据,那么返回值是Map
    30. // 如果是多条数据,那么返回值List
    31. List list4();
    32. Map list5(Map map);
    33. // 利用第三方插件进行分页
    34. List listPager(Map map);
    35. /**
    36. * 处理特殊字符
    37. * @param bookVo
    38. * @return
    39. */
    40. List list6(BookVo bookVo);
    41. /**
    42. * 处理特殊字符
    43. * @param bookVo
    44. * @return
    45. */
    46. List list7(BookVo bookVo);
    47. }

     

    1. package com.xnx.ssm;
    2. import com.zking.ssm.biz.BookBiz;
    3. import com.zking.ssm.biz.impl.BookBizImpl;
    4. import com.zking.ssm.model.BookVo;
    5. import com.zking.ssm.util.PageBean;
    6. import org.junit.After;
    7. import org.junit.Before;
    8. import org.junit.Test;
    9. import org.junit.runner.RunWith;
    10. import org.springframework.beans.factory.annotation.Autowired;
    11. import org.springframework.test.context.ContextConfiguration;
    12. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    13. import java.util.Arrays;
    14. import java.util.HashMap;
    15. import java.util.List;
    16. import java.util.Map;
    17. @RunWith(SpringJUnit4ClassRunner.class)
    18. @ContextConfiguration(locations={"classpath:applicationContext-mybatis.xml"})
    19. public class BookBizImplTest2 {
    20. @Autowired
    21. private BookBiz bookBiz;
    22. // private SqlSession sqlSession;
    23. @Before
    24. public void setUp() throws Exception {
    25. System.out.println("初始化方法");
    26. }
    27. @After
    28. public void tearDown() throws Exception {
    29. System.out.println("方法测试结束");
    30. }
    31. @Test
    32. public void deleteByPrimaryKey() {
    33. bookBiz.deleteByPrimaryKey(44);
    34. }
    35. @Test
    36. public void selectByPrimaryKey() {
    37. System.out.println("测试的业务方法");
    38. // System.out.println(bookBiz.getBookMapper());
    39. System.out.println(bookBiz.selectByPrimaryKey(43));
    40. }
    41. @Test
    42. public void test3() {
    43. int[] ints={};
    44. // 将数组变成字符串 1,2,3,4,5,6
    45. StringBuffer sb=new StringBuffer();
    46. for (int i:ints){
    47. sb.append(",").append(i);
    48. }
    49. String s=sb.toString();
    50. System.out.println(s.substring(1));
    51. }
    52. @Test
    53. public void getBookMapper() {
    54. }
    55. @Test
    56. public void setBookMapper() {
    57. }
    58. @Test
    59. public void selectByIn() {
    60. List<Integer> bookIds = Arrays.asList(new Integer[]{31, 32, 33, 34});
    61. bookBiz.selectByIn(bookIds).forEach(System.out::println);
    62. }
    63. @Test
    64. public void selectBooksLike1() {
    65. bookBiz.selectBooksLike1("%圣墟%").forEach(System.out::println);
    66. }
    67. @Test
    68. public void selectBooksLike2() {
    69. bookBiz.selectBooksLike2("%圣墟%").forEach(System.out::println);
    70. }
    71. @Test
    72. public void selectBooksLike3() {
    73. bookBiz.selectBooksLike3("圣墟").forEach(System.out::println);
    74. }
    75. @Test
    76. public void list1() {
    77. bookBiz.list1().forEach(System.out::println);
    78. }
    79. @Test
    80. public void list2() {
    81. bookBiz.list2().forEach(System.out::println);
    82. }
    83. @Test
    84. public void list3() {
    85. BookVo vo=new BookVo();
    86. vo.setBookIds(Arrays.asList(new Integer[]{31,32,33,34}));
    87. bookBiz.list3(vo).forEach(System.out::println);
    88. }
    89. @Test
    90. public void list4() {
    91. bookBiz.list4().forEach(System.out::println);
    92. }
    93. @Test
    94. public void list5() {
    95. Map map=new HashMap();
    96. map.put("bid",32);
    97. System.out.println(bookBiz.list5(map));
    98. }
    99. @Test
    100. public void listPager() {
    101. Map map=new HashMap();
    102. map.put("bname","圣墟");
    103. // bookBiz.listPager(map).forEach(System.out::println);
    104. // 查询出第二页的20条数据
    105. PageBean pageBean = new PageBean();
    106. pageBean.setPage(2);
    107. pageBean.setRows(20);
    108. bookBiz.listPager(map,pageBean).forEach(System.out::println);
    109. }
    110. @Test
    111. public void list6() {
    112. BookVo vo=new BookVo();
    113. vo.setMax(45);
    114. vo.setMin(35);
    115. bookBiz.list6(vo).forEach(System.out::println);
    116. }
    117. @Test
    118. public void list7() {
    119. BookVo vo=new BookVo();
    120. vo.setMax(45);
    121. vo.setMin(35);
    122. bookBiz.list7(vo).forEach(System.out::println);
    123. }
    124. }

     

  • 相关阅读:
    MES管理系统的生产模块与ERP有何差异
    MySql主从复制(博主已踩过所有坑...)
    springboot毕设项目大型企业员工信息管理系统9thmk(java+VUE+Mybatis+Maven+Mysql)
    【C】自定义类型(二)位段,枚举,联合
    acwing算法基础之搜索与图论--DFS
    jQuery基础----常用的选择器
    Vue(4)
    leetcode刷题日记:168. Excel Sheet Column Title(Excel表列名称)
    Spring Cloud Netflix Hystrix
    Android A13 CTS 测试问题部分总结
  • 原文地址:https://blog.csdn.net/m0_67864917/article/details/126338744