Mybatis整合Spring(ssm整合待续)-day04

   日期:2020-10-05     浏览:112    评论:0    
核心提示:目录Mybatis整合Spring1. 创建项目2. 导入jar包3. 配置mybatis的核心配置文件4. 在spring中配置数据源5. 在spring中配置SqlSessionFactory6. 写一个User类与它的映射文件7. 使用传统方式编写个UserDao与实现类8. 在spring中配置dao实现的bean9. 传统dao的测试10. 换成Mapper接口整合dao11. 在mybatis核心配置文件中加载映射文件12. 在Spring中配置MapperFactoryBean13. 使用b

目录

  • Mybatis整合Spring
    • 1. 创建项目
    • 2. 导入jar包
    • 3. 配置mybatis的核心配置文件
    • 4. 在spring中配置数据源
    • 5. 在spring中配置SqlSessionFactory
    • 6. 写一个User类与它的映射文件
    • 7. 使用传统方式编写个UserDao与实现类
    • 8. 在spring中配置dao实现的bean
    • 9. 传统dao的测试
    • 10. 换成Mapper接口整合dao
    • 11. 在mybatis核心配置文件中加载映射文件
    • 12. 在Spring中配置MapperFactoryBean
    • 13. 使用bean工厂来创建对象的测试
    • 14. 使用MapperScannerConfigurer批量扫描创建代理对象
    • 15. 使用MapperScannerConfigurer批量扫描创建代理对象测试

Mybatis整合Spring

  • 整合版本:
    • Spring 3.2
    • Mybaties 3.2.7
  • 项目结构:

1. 创建项目

  1. 创建一个javaweb项目
  2. 在WEB-INF下创建一个lib文件夹用来存放jar包

2. 导入jar包

  1. 导入mybatis核心包与依赖包

  2. 导入mysql数据库驱动包(根据自己数据库的版本导入)
  3. 导入数据库dbcp连接池
  4. 导入spring+mvc包

  5. 导入Mybatis-spring整合包
  6. 总的jar包

3. 配置mybatis的核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--别名配置-->
    <typeAliases>
        <!--定义单个别名--><!--这样配置用到全类名的地方就可以写成别名user-->
        <!--<typeAlias type="com.it.model.User" alias="user"></typeAlias>-->

        <!--批量配置别名-->
        <!--name:指定批量定义别名的类的包名,别名为类名(首字母大小写都可以)-->
        <!--这样配置就是该包下的类名的别名就为类名,大小写都可以 如:com.it.model包下的User类的别名就可以写为 User 或 user -->
        <package name="com.it.model"/>
    </typeAliases>

    <!--加载映射文件-->
    <mappers>
        <!--<mapper resource="com/it/sqlmap/User.xml"></mapper>-->
        <!--第一种:写映射文件名-->
        <!--<mapper resource="com/it/mapper/UserMapper.xml"></mapper>-->
        <!--第二种:使用完全限定路径【一般不用】-->
        <!--<mapper url="file:///D:\MyBatis_day01\src\com\it\mapper\UserMapper.xml"></mapper>-->
        <!--第三种:写类名(使用mapper接口的全限定名) 一定要有个同名映射文件与之对应,如果没有,在UserMapper接口中声明注解,否则报错-->
        <!--使用注解配置时,要删除或改名映射文件,否则报错-->
        <!--注意:不使用注解时,此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下-->
        <!--<mapper class="com.it.mapper.UserMapper"></mapper>-->
        <!--第四种:写包名【推荐使用】 注册指定包下的所有映射文件-->
        <!--注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下-->

        <mapper resource="com/it/sqlMap/User.xml"></mapper>

        <package name="com.it.mapper"/><!--注意这种方式(包配置)只适用于Mapper代理-->
    </mappers>
</configuration>

4. 在spring中配置数据源

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">


    <!-- 1.配置数据库,dbcp数据库连接池 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///mybatis_day01"/>
        <property name="username" value="root"/>
		<property name="password" value="root"/>
        <!--最大连接数-->
        <property name="maxActive" value="10"/>
        <!--最大空闲数-->
        <property name="maxIdle" value="5"/>
    </bean>
</beans>

5. 在spring中配置SqlSessionFactory

	<!--2.配置会话工厂-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sessionFactory">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
    </bean>

6. 写一个User类与它的映射文件

  • 为以下属性提供get/set、无参构造、符合自己使用的有参构造,toString
  • User.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离 注意:使用mapper代理开发时,namespace有特殊且重要的作用 -->
<mapper namespace="user">
    <!-- id:statement的id,要求在命名空间内唯一 parameterType:参数的java类型 resultType:查询出的单条结果集对应的java类型 #{}:表示一个占位符 ? #{id}:表示该占位符待接收参数的名称为id。注意:如果参数为简单类型时,#{}里面的参数名称可以是任意定义 -->
    <select id="findUserById" parameterType="int" resultType="com.it.model.User">
		SELECT * FROM USER WHERe id = #{id}
	</select>

</mapper>

7. 使用传统方式编写个UserDao与实现类

  • 与hibernate的使用类似,这里继承SqlSessionDaoSupport,通过它可以获取getSqlSession()方法来获取SqlSession对象,来操作数据库
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { 
    @Override
    public User findUserById(int id) { 
        return this.getSqlSession().selectOne("user.findUserById",id);
    }
}

8. 在spring中配置dao实现的bean

	<!--配置dao的几种方式-->
    <!--第一种-->
    <!--3.传统配置dao【现在一般不用】-->
    <bean class="com.it.dao.impl.UserDaoImpl" id="userDao">
        <property name="sqlSessionFactory" ref="sessionFactory"></property>
    </bean>

9. 传统dao的测试

	@Test
    public void test1(){ 
        //1.加载spring配置文件
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        //2.获取dao的bean
        UserDao userDao = (UserDao) context.getBean("userDao");

        //3.调用dao方法
        User user = userDao.findUserById(1);
        System.out.println(user);
    }

10. 换成Mapper接口整合dao

  1. 创建UserMapper接口(直接复制UserDao接口改名即可)
  2. 创建UserMapper.xml映射文件(直接复制User.xml改名即可)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离 注意:使用mapper代理开发时,namespace有特殊且重要的作用 -->
<mapper namespace="com.it.mapper.UserMapper">

    <select id="findUserById" parameterType="int" resultType="com.it.model.User">
		SELECT * FROM USER WHERe id = #{id}
	</select>

</mapper>

11. 在mybatis核心配置文件中加载映射文件

  • 上面在配置别名的时候已经给过代码
	<!--加载映射文件-->
    <mappers>
        <!--<mapper resource="com/it/sqlmap/User.xml"></mapper>-->
        <!--第一种:写映射文件名-->
        <!--<mapper resource="com/it/mapper/UserMapper.xml"></mapper>-->
        <!--第二种:使用完全限定路径【一般不用】-->
        <!--<mapper url="file:///D:\MyBatis_day01\src\com\it\mapper\UserMapper.xml"></mapper>-->
        <!--第三种:写类名(使用mapper接口的全限定名) 一定要有个同名映射文件与之对应,如果没有,在UserMapper接口中声明注解,否则报错-->
        <!--使用注解配置时,要删除或改名映射文件,否则报错-->
        <!--注意:不使用注解时,此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下-->
        <!--<mapper class="com.it.mapper.UserMapper"></mapper>-->
        <!--第四种:写包名【推荐使用】 注册指定包下的所有映射文件-->
        <!--注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下-->

        <mapper resource="com/it/sqlMap/User.xml"></mapper>

        <package name="com.it.mapper"/><!--注意这种方式(包配置)只适用于Mapper代理-->
    </mappers>

12. 在Spring中配置MapperFactoryBean

  • 使用工厂Bean生成userMapper对象
	<!--第二种-->
    <!--4.由spring创建一个userMapper对象,使用工厂来创建对象-->
    <bean class="org.mybatis.spring.mapper.MapperFactoryBean" id="userMapper">
        <property name="sqlSessionFactory" ref="sessionFactory"></property>
        <property name="mapperInterface" value="com.it.mapper.UserMapper"></property>
    </bean>

13. 使用bean工厂来创建对象的测试

	@Test
    public void test2(){ 
        //1.加载spring配置文件
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        //2.获取dao的bean
        UserMapper userMapper = (UserMapper) context.getBean("userMapper");

        //3.调用dao方法
        User user = userMapper.findUserById(1);
        System.out.println(user);
    }

14. 使用MapperScannerConfigurer批量扫描创建代理对象

  • 上面12的配置代码麻烦,每一个mapper就要创建一个工厂bean
	<!--第三种-->
    <!--批量创建mapper的bean对象 内部会扫描指定包下的mapper,为每一个接口创建代理对象,名字就是类名,首字母会自动改成小写 使用的时候直接取即可 注意: 1.jdk1.8 用这种方式,bean不能创建成功 ,改成jdk1.7的即可 2.或者spring我换成spring3.2.9或以上就OK了 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.it.mapper"></property>
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>
    </bean>

15. 使用MapperScannerConfigurer批量扫描创建代理对象测试

-测试与上一个测试相同,直接取userMapper即可(批量扫描会自动创建代理对象)

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服