• mybatis和spring整合

    • 需要spring通过单例方式管理SqlSessionFactory
    • spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession
    • 持久层的mapper都需要由spring进行管理
    • 需要导入的jar包
  • 需要建立的文件

  • 需要建立的包
  • 在applicationContext.xml配置sqlSessionFactory
    • 创建applicationContext.xml

    • 配置applicationContext.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:context="http://www.springframework.org/schema/context"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"><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties"/><!-- 数据源,使用dbcp --><!--driverClassName:url:username:password:maxActive:maxIdle:--><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!--<property name="maxActive" value="10"/>--><property name="maxIdle" value="5"/></bean><!-- 配置SqlSessionFactory --><!--class:设置为mybatis-spring.jar中的类id:唯一表示标识--><bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 加载mybatis的配置文件 --><property name="configLocation" value="mybatis/SqlMapConfig.xml"/><!-- 加载数据源 --><property name="dataSource" ref="dataSource"/></bean>
        </beans>

  •  整合代码及其bug
    • 若报找不到org.springframework.dao.support.DaoSupport的类文件

      • 导入spring-tx-4.3.5.RELEASE.jar
    • 若报java.lang.ClassNotFoundException: org.apache.commons.pool2.PooledObjectFactory

      • 导入commons-pool2-2.6.1.jar
    • 若报java.lang.NoClassDefFoundError: org/springframework/aop/support/AopUtils

      • 导入spring-aop-4.3.5.RELEASE.jar
    • 若报nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
      • 导入spring-jdbc-4.3.5.RELEASE.jar
      • 原生dao
        /*** dao接口实现类需要注入SqlSessionFactory,通过spring进行注入* 这里通过spring声明配置方式,配置dao的bean*/
        public interface UserDao {public abstract List<User> selectAllUser();}/*** UserDao的实现类*/
        public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {@Overridepublic List<User> selectAllUser() {//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession connection = this.getSqlSession();List<User> users = connection.selectList("user.selectAllUser");//方法结束就自动关闭,所以不需要close();//connection.close();return users;}
        }<!-- 在applicationContext.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:context="http://www.springframework.org/schema/context"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"><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties"/><!-- 数据源,使用dbcp --><!--driverClassName:url:username:password:maxActive:maxIdle:--><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!--<property name="maxActive" value="10"/>--><property name="maxIdle" value="5"/></bean><!-- 配置SqlSessionFactory --><!--class:设置为mybatis-spring.jar中的类id:唯一表示标识--><bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 加载mybatis的配置文件 --><property name="configLocation" value="mybatis/SqlMapConfig.xml"/><!-- 加载数据源 --><property name="dataSource" ref="dataSource"/></bean><!-- 原始dao接口 --><bean id="userDao" class="cn.muriel.ssm.dao.impl.UserDaoImpl"><property name="sqlSessionFactory" ref="SqlSessionFactory"/></bean></beans><!-- 在userMapper.xml配置 --><?xml version="1.0" encoding="UTF-8" ?><!-- 此时您可能想知道SqlSession或Mapper类究竟执行了什么。MyBatis提供的全套功能可以通过使用多年来MyBatis流行的基于XML的映射语言来实现。如果您以前使用过MyBatis,那么您将很熟悉这个概念,但是对XML映射文档进行了大量改进,以后会很清楚。 --><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间。作用对sql进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用 --><mapper namespace="cn.muriel.ssm.dao.UserDao"><select id="selectAllUser" resultType="cn.muriel.mybatis.po.User">select * from user</select></mapper><!-- 测试 -->public class TestUtil {private static ApplicationContext applicationContext;//在setUp这个方法得到spring容器public static void main(String[] args) {applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");UserDao userDao = (UserDao) applicationContext.getBean("userDao");JSONArray sendJson = JSONArray.fromObject(userDao.selectAllUser());System.out.println(sendJson + "");}
        }

      • 代理mapper
        /*** dao接口实现类需要注入SqlSessionFactory,通过spring进行注入* 这里通过spring声明配置方式,配置dao的bean*/
        public interface UserMapper {public abstract List<User> selectAllUser();}/*** UserDao的实现类*/
        public class UserDaoImpl extends SqlSessionDaoSupport implements UserMapper {@Overridepublic List<User> selectAllUser() {//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession connection = this.getSqlSession();List<User> users = connection.selectList("user.selectAllUser");//方法结束就自动关闭,所以不需要close();//connection.close();return users;}
        }<!-- 在applicationContext.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:context="http://www.springframework.org/schema/context"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"><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties"/><!-- 数据源,使用dbcp --><!--driverClassName:url:username:password:maxActive:maxIdle:--><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!--<property name="maxActive" value="10"/>--><property name="maxIdle" value="5"/></bean><!-- 配置SqlSessionFactory --><!--class:设置为mybatis-spring.jar中的类id:唯一表示标识--><bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 加载mybatis的配置文件 --><property name="configLocation" value="mybatis/SqlMapConfig.xml"/><!-- 加载数据源 --><property name="dataSource" ref="dataSource"/></bean><!-- mapper配置 --><!--class为mybatis-spring.jar下的类MapperFactoryBean:根据mapper接口生成代理对象--><!-- UserMapper.java和userMapper.xml在同一个包下 --><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="cn.muriel.ssm.mapper.UserMapper"/><!-- 若ref改为value,则报ConversionNotSupportedException --><property name="sqlSessionFactory" rel="SqlSessionFactory"/></bean></beans><!-- 在userMapper.xml配置 --><?xml version="1.0" encoding="UTF-8" ?><!-- 此时您可能想知道SqlSession或Mapper类究竟执行了什么。MyBatis提供的全套功能可以通过使用多年来MyBatis流行的基于XML的映射语言来实现。如果您以前使用过MyBatis,那么您将很熟悉这个概念,但是对XML映射文档进行了大量改进,以后会很清楚。 --><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间。作用对sql进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用 --><mapper namespace="cn.muriel.ssm.mapper.UserMapper"><select id="selectAllUser" resultType="cn.muriel.mybatis.po.User">select * from user</select></mapper><!-- 测试 -->public class TestUtil {private static ApplicationContext applicationContext;//在setUp这个方法得到spring容器public static void main(String[] args) {applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");JSONArray sendJson = JSONArray.fromObject(userMapper.selectAllUser());System.out.println(sendJson + "");}
        }

      • mapper的扫描配置
        /*** dao接口实现类需要注入SqlSessionFactory,通过spring进行注入* 这里通过spring声明配置方式,配置dao的bean*/
        public interface UserMapper {public abstract List<User> selectAllUser();}/*** UserDao的实现类*/
        public class UserDaoImpl extends SqlSessionDaoSupport implements UserMapper {@Overridepublic List<User> selectAllUser() {//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession connection = this.getSqlSession();List<User> users = connection.selectList("user.selectAllUser");//方法结束就自动关闭,所以不需要close();//connection.close();return users;}
        }<!-- 在applicationContext.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:context="http://www.springframework.org/schema/context"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"><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties"/><!-- 数据源,使用dbcp --><!--driverClassName:url:username:password:maxActive:maxIdle:--><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/><!--<property name="maxActive" value="10"/>--><property name="maxIdle" value="5"/></bean><!-- 配置SqlSessionFactory --><!--class:设置为mybatis-spring.jar中的类id:唯一表示标识--><bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 加载mybatis的配置文件 --><property name="configLocation" value="mybatis/SqlMapConfig.xml"/><!-- 加载数据源 --><property name="dataSource" ref="dataSource"/></bean><!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创    建代理对象并且在spring容器中注册 --><!-- 自动扫描出来的mapper的bean的id为mapper类名(首字母小写) --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!--指定扫描的包名指定mapper接口的包名,mybatis自动扫描包下边所以mapper接口进行加载遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中如果扫描多个包,每个包中间使用逗号分隔--><property name="basePackage" value="cn.muriel.ssm.mapper"/><!-- 数据源 --><property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/></bean></beans><!-- 在userMapper.xml配置 --><?xml version="1.0" encoding="UTF-8" ?><!-- 此时您可能想知道SqlSession或Mapper类究竟执行了什么。MyBatis提供的全套功能可以通过使用多年来MyBatis流行的基于XML的映射语言来实现。如果您以前使用过MyBatis,那么您将很熟悉这个概念,但是对XML映射文档进行了大量改进,以后会很清楚。 --><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间。作用对sql进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用 --><mapper namespace="cn.muriel.ssm.mapper.UserMapper"><select id="selectAllUser" resultType="cn.muriel.mybatis.po.User">select * from user</select></mapper><!-- 测试 -->public class TestUtil {private static ApplicationContext applicationContext;//在setUp这个方法得到spring容器public static void main(String[] args) {applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");JSONArray sendJson = JSONArray.fromObject(userMapper.selectAllUser());System.out.println(sendJson + "");}
        }

    

转载于:https://www.cnblogs.com/fatRabbit-/p/10542030.html

mybatis基础(下)相关推荐

  1. javaweb实训第六天下午——Mybatis基础

    Mybatis基础 1.课程介绍 2.为什么需要Mybatis 3.初识Mybatis 3.1.Mybatis是什么 3.1.1.什么是框架 3.1.2.什么叫数据库持久化 3.1.3.什么是ORM ...

  2. Mybatis基础学习之万能的Map和模糊查询

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个Mybatis ...

  3. MyBatis基础学习知识点2

    本文衔接MyBatis基础学习知识点1,继续对以下两个问题进行探讨 1.dao配置文件主要是用来干什么的?如何进行配置? 2.使用测试方法测试程序运行是如何实现的?每条语句起什么作用? 目录 dao配 ...

  4. Mybatis基础学习之一级缓存和二级缓存的简单使用

    前言: 小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师. 这个Mybatis ...

  5. java mybatis基础

    java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...

  6. MyBatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 本文授权转载请注明来自FreeBuf.COM 链接:https:/ ...

  7. MyBatis基础入门《九》ResultMap自动匹配

    MyBatis基础入门<九>ResultMap自动匹配 描述: Mybatis执行select查询后,使用ResultMap接收查询的数据结果. 实体类:TblClient.java 接口 ...

  8. Mybatis基础:增删改查、模糊查询、多条件查询

    Mybatis基础:增删改查.模糊查询.多条件查询http://www.bieryun.com/3132.html 1.新建测试数据库,根据实体类属性创建 2.实体类 [java] view plai ...

  9. 一种在外部中心化基础下的网络空间去中心化充盈区块链系统

    本文是<赛博空间学与赛博学>的第四章 赛博空间充盈计划 第四章内容全部一起放出,请点击下面推送阅读.可辅助上一期视频理解:网络补全计划! 区块链技术本质上就是赛博空间学的产物.在区块链的区 ...

  10. (19)一篇掌握MySQL数据库基础下 基本操作(外键约束、建表原则、多表查询、子查询)

    MySQL数据库基础下 一.修改表--添加外键约束 二.多表之间的建表原则 1.建数据库原则:通常情况下,一个项目/应用建一个数据库 2.多表之间的表原则: (1)一对多:分类和商品 (一个分类对应多 ...

最新文章

  1. 淘宝李晓拴:淘宝网PHP电子商务应用
  2. python从安装开始加粉_清华教授用了12小时讲完的Python,整整400集,拿走不谢!...
  3. 使用 libevent 和 libev 提高网络应用性能
  4. win10计算机无限弹网页,win10系统浏览网页时频繁弹出广告怎么办 Window10阻止网页弹出广告的四种方法...
  5. leetcode 移动零
  6. 怎么查看电脑有没有python_使用python获取电脑的磁盘信息方法
  7. CSS3 之 flex
  8. Cocos Creator 获取当前URL取参数
  9. pythonpid传递函数_python实现PID算法及测试的例子
  10. 蓝桥杯单片机备赛笔记
  11. 自适应增强算法Adaboost——前人栽树后人乘凉
  12. 有了这个 Python 库,以后再也不用写正则表达式了
  13. 【毕业设计系列】005:视频图像数字水印matlab GUI系统设计
  14. UNITER: UNiversal Image-TExt Representation Learning
  15. java问题解读,String类为什么是final的
  16. 浙大小姐姐,真有你的!
  17. bigDecimal除法取整数
  18. STM32F1案例 ST7735 TFT液晶显示屏综合库使用
  19. 牛客网-Verilog篇
  20. 【一篇无聊的影评】吐槽《从你的全世界路过》

热门文章

  1. STM32:使用外部中断控制对射式红外传感器并计次
  2. 怎么启用对远程服务器的访问,未启用对服务器的远程访问怎么办
  3. 社区专家谈 12306
  4. Go语言学习:Channel
  5. .mpp文件的使用技巧
  6. java迁移框架_Java敏捷数据库迁移框架——Flyway
  7. 机械键盘——红轴、黑轴、茶轴、青轴、奶轴、X轴的故事
  8. Python爬取实习僧职位信息
  9. CentOS7/rhel7 T440P 控制散热风扇转速等级
  10. 使用Hourglass网络来理解人体姿态