spring和mybatis整合

1.整合思路

需要spring通过单例方式管理SqlSessionFactory。

spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)

持久层的mapper都需要由spring进行管理。

2.整合环境

创建一个新的java工程(接近实际开发的工程结构)

jar包:

mybatis3.2.7的jar包

spring3.2.0的jar包

mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,mybatis和spring整合由mybatis提供

全部jar包

工程结构(这里是基于eclipse)

3.sqlSessionFactory

在applicationContext.xml配置sqlSessionFactory和数据源

sqlSessionFactory在mybatis和spring的整合包下。

<!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 数据源,使用dbcp --><bean id="dataSource" class="org.apache.commons.dbcp.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><!-- sqlSessinFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 加载mybatis的配置文件 --><property name="configLocation" value="mybatis/SqlMapConfig.xml" /><!-- 数据源 --><property name="dataSource" ref="dataSource" /></bean>

4.1原始dao开发(和spring整合后,下面从原始到最终有三种整合,依次过渡,重点掌握4.3)

1.User.xml

在SqlMapconfig.xml中加载User.xml

2.dao(实现类继承SqlSessionDaoSupport)

dao接口实现类需要注入SqlSessoinFactory,通过spring进行注入。

这里spring声明配置方式,配置dao的bean:

让UserDaoImpl实现类继承SqlSessionDaoSupport

3.配置dao

在applicationContext.xml中配置dao。

4.测试程序

4.2mapper代理开发(在mybatis(2)中有对其规范的详解,请务必遵守规范才可使用

代理开发相关规范

1、在mapper.xml中namespace等于mapper接口地址

2、mapper.java接口中的方法名和mapper.xml中statement的id一致

3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。

4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

1.mapper.xml和mapper.java(在同一包下)

2.通过MapperFactoryBean创建代理对象(务必满足相关规范

此方法问题:

需要针对每个mapper进行配置,麻烦。

4.3通过MapperScannerConfigurer进行mapper扫描(建议使用)

测试代码

逆向工程

1.什么是逆向工程

mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po..)

企业实际开发中,常用的逆向工程方式:

由于数据库的表生成java代码。

2.下载逆向工程

3.使用方法(会用)

1.运行逆向工程

建议使用java程序方式,不依赖开发工具。(任何环境下都可用此法)

2.生成代码配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="testTables" targetRuntime="MyBatis3"><commentGenerator><!-- 是否去除自动生成的注释 true:是 : false:否 --><property name="suppressAllComments" value="true" /></commentGenerator><!--数据库连接的信息:驱动类、连接地址、用户名、密码 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"password="mysql"></jdbcConnection><!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userId="yycg"password="yycg"></jdbcConnection> --><!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- targetProject:生成PO类的位置 --><javaModelGenerator targetPackage="cn.itcast.ssm.po"targetProject=".\src"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /><!-- 从数据库返回的值被清理前后的空格 --><property name="trimStrings" value="true" /></javaModelGenerator><!-- targetProject:mapper映射文件生成的位置 --><sqlMapGenerator targetPackage="cn.itcast.ssm.mapper" targetProject=".\src"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /></sqlMapGenerator><!-- targetPackage:mapper接口生成的位置 --><javaClientGenerator type="XMLMAPPER"targetPackage="cn.itcast.ssm.mapper" targetProject=".\src"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /></javaClientGenerator><!-- 指定数据库表 --><table tableName="items"></table><table tableName="orders"></table><table tableName="orderdetail"></table><table tableName="user"></table></context>
</generatorConfiguration>

3.执行生成程序

生成后的代码:

4.使用生成的代码

需要将生成工程中所生成的代码拷贝到自己的工程中。

测试ItemsMapper中的方法

//自定义条件查询@Testpublic void testSelectByExample() {ItemsExample itemsExample = new ItemsExample();//通过criteria构造查询条件ItemsExample.Criteria criteria = itemsExample.createCriteria();criteria.andNameEqualTo("笔记本3");//可能返回多条记录List<Items> list = itemsMapper.selectByExample(itemsExample);System.out.println(list);}//根据主键查询@Testpublic void testSelectByPrimaryKey() {Items items = itemsMapper.selectByPrimaryKey(1);System.out.println(items);}//插入@Testpublic void testInsert() {//构造 items对象Items items = new Items();items.setName("手机");items.setPrice(999f);itemsMapper.insert(items);}//更新数据@Testpublic void testUpdateByPrimaryKey() {//对所有字段进行更新,需要先查询出来再更新Items items = itemsMapper.selectByPrimaryKey(1);items.setName("水杯");itemsMapper.updateByPrimaryKey(items);//如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新//itemsMapper.updateByPrimaryKeySelective(record);}

java元婴期(26)----java进阶(mybatis(5)---spring和mybatis整合(重点)逆向工程(会用))相关推荐

  1. java元婴期(29)----java进阶(springmvc(3)---springmvc和mybatis整合参数绑定(上))

    springmvc和mybatis整合 需求 使用springmvc和mybatis完成商品列表查询. 整合思路 springmvc+mybaits的系统架构: 第一步:整合dao层 mybatis和 ...

  2. java元婴期(25)----java进阶(mybatis(4)---高级映射查询缓存)

    1.需要用到的数据模型(这是后面高级查询需要用到的实例) 用户表user:          记录了购买商品的用户信息 订单表:orders          记录了用户所创建的订单(购买商品的订单) ...

  3. java元婴期(23)----java进阶(mybatis(2)---mapper代理mybatis核心配置文件输入输出映射)

    1.mapper代理 1.mybatis开发dao的方法----引入(为啥要使用mapper代理) 1.SqlSession使用范围 1.SqlSessionFactoryBuilder 通过SqlS ...

  4. java元婴期(17)----java进阶(spring(1)----spring基本概念IOC)

    1.spring是什么? Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Orien ...

  5. mybatis和spring框架的整合

    Mybatis+Sping整合 mybatis+spring整合 整合思路 思路:将mybatis框架的对象,交给spring管理. 把SqlSessionFactory对象,交给spring管理 把 ...

  6. mybatis和spring第一个整合程序

    知识点: 一.mybatis创建dao代理对象 StudentDao dao = sqlSession.getMapper(StudentDao.class); List<Student> ...

  7. java元婴期(22)----java进阶(mybatis(1)---mybatis框架概述入门程序)

    1.对原生态jdbc程序中问题总结(为啥要用mybatis) 1.数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能. 设想:使用数据库连接 ...

  8. java元婴期(20)----java进阶(spring(4)---spring aop编程(全自动)AspectJ)

    spring aop编程:全自动[掌握] 从spring容器获得目标类,如果配置aop,spring将自动生成代理. 要确定目标类,aspectj 切入点表达式,导入jar包(maven项目直接导入相 ...

  9. java元婴期(19)----java进阶(spring(3)----AOP相关概念实现方式)

    AOP介绍 什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是O ...

最新文章

  1. docker安装在服务器的那个位置,docker容器卷通常会放在什么位置
  2. shell之字体颜色显示
  3. 什么?还有可以攻击telegram和其他APP的恶意软件
  4. 论文阅读笔记:A Fast Triangle-Triangle Intersection Test
  5. python2.7是什么_python2.7是什么
  6. 必知必会 | 关于Redis缓存这三大问题,必知必会
  7. php页面采集正则,PHP simple_html_dom.php+正则 采集文章代码
  8. MTK 驱动---(11) EMI定制
  9. LeetCode刷题(14)
  10. 进阶运维:SSH无缝切换远程加密
  11. Excel如何一次性将多行多列表格颠倒行顺序
  12. (2) python--pandas
  13. matlab 相位解旋绕,相位解缠绕方法-南京航空航天大学学报.PDF
  14. Drupal漏洞复现:CVE-2019-6341
  15. Oracle PLSQL
  16. python中国最好大学排名_三分钟实现爬取中国前20大学排名
  17. redis解决(DENIED Redis is running in protected mode because prote)
  18. 【学习笔记】:Multi-mode Transformer Transducer with Stochastic Future Context
  19. qq企业邮箱 pop3服务器是什么意思,腾讯QQ企业邮箱POP3/SMTP设置
  20. php版葫芦侠签到,葫芦侠三楼一键签到工具

热门文章

  1. java中使用json以及所导入的包
  2. linux配置接口多地址,Linux /etc/network/interfaces配置接口方法
  3. 用html标记语言,HTML标记语言——引用
  4. PHP密码复杂性验证,JS检查密码强度 检查密码复杂度
  5. centos7 mysql二进制_centos7+mysql5.7二进制安装
  6. 怎样用springboot开发cs_springboot开发之配置自定义的错误界面和错误信息
  7. UPS电源报警器一直响是什么问题?
  8. UPS故障案例集(一)
  9. 卡巴斯基授权许可文件_安全许可证的申请流程有哪些?
  10. 成功解决ValueError: Input contains NaN, infinity or a value too large for dtype('float64').