MyBatis入门第2天--MyBatis与Spring整合及逆向工程

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 2016.06.28 lutianfei none

spring和mybatis整合

  • 整合思路

    • 需要spring通过单例方式管理SqlSessionFactory。
    • spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)
    • 持久层的mapper都需要由spring进行管理。
  • 整合环境
  • 创建一个新的java工程(接近实际开发的工程结构)
  • jar包:
    • mybatis3.2.7的jar包
    • spring3.2.0的jar包
    • mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,现在mybatis和spring整合由mybatis提供。
    • 全部jar包(含springmvc)

  • 工程结构

第一步:整合配置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>

原始dao开发(和spring整合后)

  • sqlmap/User.xml

  • 在SqlMapconfig.xml中加载User.xml

  • dao(实现类继承SqlSessionDaoSupport)

  • 之前dao接口实现类需要注入SqlSessoinFactory,通过spring进行注入。
  • 这里使用spring声明配置方式,配置dao的bean:
    • 让UserDaoImpl实现类继承SqlSessionDaoSupport

  • 配置dao
    • 在applicationContext.xml中配置dao接口
    <!-- 原始dao接口 -->

    <bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean
  • 测试程序

    • source_folder/UserDaoImplTest.java
public class UserDaoImplTest {

    private ApplicationContext applicationContext;

    //在setUp这个方法得到spring容器
    @Before
    public void setUp() throws Exception {
        applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
    }

    @Test
    public void testFindUserById() throws Exception {

        UserDao userDao = (UserDao) applicationContext.getBean("userDao");

        //调用userDao的方法
        User user = userDao.findUserById(1);

        System.out.println(user);

    }

}

mapper代理开发

  • Usermapper.xml和Usermapper.java

    • 将之前工程中拷贝过来删改包路径即可。
  • 通过MapperFactoryBean创建代理对象
    • 因为UserMapper不是接口类型,所以要用MapperFactoryBean来生成接口类型

  • 此方法问题:
    • 需要针对每个mapper进行配置,麻烦。
通过MapperScannerConfigurer进行mapper扫描(建议使用)

* 这里通过basePackage属性配置了mapper的扫描路径后,在SqlMapperConfig.xml中就不用配置扫描路径了。

  • 这里使用sqlSessionFactoryBeanName属性是因为如果配置的是sqlSessionFactory属性,将不会先加载数据库配置文件及数据源配置(db.properties

  • 测试代码


逆向工程

  • mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po..)
  • 企业实际开发中,常用的逆向工程方式:由于数据库的表生成java代码。
  • 下载逆向工程

使用方法(会用)

  • 运行逆向工程

  • 建议使用java程序方式,不依赖开发工具。
  • 生成代码配置文件(有4处需要修改的地方)
    • 生成PO类的位置 : cn.itcast.ssm.po
    • mapper映射文件生成的位置 : cn.itcast.ssm.mapper
    • mapper接口生成的位置 : cn.itcast.ssm.mapper
    • 指定数据库表:
      <table tableName="items"></table>
      <table tableName="orders"></table>
      <table tableName="orderdetail"></table>
      <table tableName="user"></table>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//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>
  • 执行生成程序

  • 生成后的代码

使用生成的代码

  • 需要将生成工程中所生成的代码拷贝到自己的工程中。
  • 测试ItemsMapper中的方法
//自定义条件查询
    @Test
    public 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);

    }

    //根据主键查询
    @Test
    public void testSelectByPrimaryKey() {
        Items items = itemsMapper.selectByPrimaryKey(1);
        System.out.println(items);
    }

//插入
    @Test
    public void testInsert() {
        //构造 items对象
        Items items = new Items();
        items.setName("手机");
        items.setPrice(999f);
        itemsMapper.insert(items);
    }

//更新数据
    @Test
    public void testUpdateByPrimaryKey() {

        //对所有字段进行更新,需要先查询出来再更新
        Items items = itemsMapper.selectByPrimaryKey(1);

        items.setName("水杯");

        itemsMapper.updateByPrimaryKey(items);
        //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新
        //itemsMapper.updateByPrimaryKeySelective(record);

    }
时间: 2024-08-05 13:19:24

MyBatis入门第2天--MyBatis与Spring整合及逆向工程的相关文章

MyBatis入门第2天--MyBatis基础知识(二)

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.26 lutianfei none mybatis开发dao的方法 SqlSession使用范围 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder. 在需要创建SqlSess

MyBatis入门第2天--高级映射与查询缓存

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.28 lutianfei none mybatis框架执行过程: 1.配置mybatis的配置文件,SqlMapConfig.xml(名称不固定) 2.通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂 SqlSessionFactory在实际使用时按单例方式. 3.通过SqlSessionFactory创建SqlSession SqlSession是一个面向用户接口(提供操

解析Mybatis入门第三天

目的:使用mybatis对数据的一些标签的使用和表与表之间的一对多和多对一的查询方式. 例如:if.where.foreach 前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的Maven工程可以参考入门第一天的详解).    数据库的使用和前两天的一样,除此之外,新添加两张表,方便后面对一对多和多对一的操作打基础. 同样先查看整个项目的结构: 开始进入代码编辑... 在前两次的使用的数据库的基础上创建两张表. CREATE TABLE `account` ( `ID` i

Mybatis中Mapper代理形式开发与spring整合

1.导入jar包 2.分包 cogfig:存放配置文件 mapper:存放映射与接口 pojo:存放实体类 test:测试代码 3.编写配置文件 SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybat

Spring MVC入门第2天--Spring、SpringMVC与MyBatis三大框架整合

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.07.01 lutianfei none springmvc和mybatis整合 需求: 使用springmvc和mybatis完成商品列表查询. 整合思路 spring+springmvc+mybaits的系统架构: 第一步:整合dao层 mybatis和spring整合,通过spring管理mapper接口. 使用mapper的扫描器自动扫描mapper接口在spring中进行注册. 第二步:整合service层

spring 整合Mybatis 《错误集合,总结更新》

错误:nested exception is java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor  运行环境:jdk1.7.0_17 + tomcat 7 + eclipse spring整合mybatis启动时候出现這个错误: SEVERE: Exception sending context initialized event to listener instance of class org

Spring整合MyBatis完整示例

为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简单的图书管理功能,主要使用到的技术包含Spring.MyBatis.Maven.MySQL及简单MVC等.最后的运行效果如下所示: 项目结构如下: 一.新建一个基于Maven的Web项目 1.1.创建一个简单的Maven项目,项目信息如下: 1.2.修改层面信息,在项目上右键选择属性,再选择“Project

分析下为什么spring 整合mybatis后为啥用不上session缓存

因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验下(spring整合mybatis略,网上一堆),先看看mybatis级别的session的缓存 放出打印sql语句 configuration.xml 加入 <settings> <!-- 打印查询语句 --> <setting name="logImpl"

spring整合mybatis(hibernate)配置

一.Spring整合配置Mybatis spring整合mybatis可以不需要mybatis-config.xml配置文件,直接通过spring配置文件一步到位.一般需要具备如下几个基本配置. 1.配置数据源(连接数据库最基本的属性配置,如数据库url,账号,密码,和数据库驱动等最基本参数配置) 1 <!-- 导入properties配置文件 --> 2 <context:property-placeholder location="classpath*:/jdbc.prop