Mybatis学习三

myBatis与Spring整合之前,使用myBatis

1)手动加载MyBatis的核心配置文件,在核心配置文件中使用映射器加载Sql映射文件

2)需要手动创建SqlSessionFactory

3)手动创建SqlSession对象,或者获取动态代理对象进行操作。

 

myBatis与Spring整合,要考虑哪些问题

1)SqlSessionFactory对象应该放到Spring容器中,以单例的形式存在,由Spring帮助我们创建对象,然后通过set注入对属性进行赋值。

2)数据库连接、数据库连接池以及事务,都应该交给Spring容器来进行管理。

3)Mapper代理形式中,应该从Spring容器中,直接获取mapper的动态代理对象(接口的实现类)。

//传统的dao开发宗,应该从Spring容器中获得SqlSession对象。

 

整合需要的jar包:

Spring的jar包; Mybatis的jar包; Mysql的数据库驱动jar包;数据库连接池的jar包;Spring+mybatis的整合包(整合包里面有很多可以直接拿来用的类)。


1) Spring整合Mybatis之原始Dao开发

2) Spring整合Mybatis之Mapper动态代理开发

3) Spring整合Mybatis之Mapper动态代理扫描开发(核心)


配置文件
1.spring的配置文件
2.mybatisS的配置文件sqlmapConfig.xml
applicationContext.xml

对于spring来说,mybatis是另外一个架构,需要整合jar包。SqlSessionFactoryBean属于mybatis-spring这个jar包.

代码规范:在src下创建一个config文件夹,专门用于放配置文件。
SqlSessionFactoryBean对象的两个属性:注入数据源和注入核心配置文件
MapperScannerConfigurer:扫描要指定基本包以及子包,基本包里面是所有的mapping接口文件
修改SqlMapConfig.xml配置文件。Mapper映射器只保留包扫描的方式。
pojo:简单java对象。
myBatis:核心配置文件和SQL映射文件
输入映射和输出映射:输入参数映射,返回值映射(自动映射和手动映射)
动态Sql:if标签 where标签 sql片段 Foreach标签
关联查询:一对一关联  一对多关联
实体模型之间的继承关系


Spring配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

	<!-- Spring核心配置文件 -->
	<!-- 属性文件所在的位置 -->
	<!-- 通过属性文件的形式配置数据源 -->
	<context:property-placeholder location="classpath:db.properties" />

	<!-- 配置数据源和数据库连接池 -->
	<!-- EL表达式:表示变量名称 -->
	<!-- BasicDataSource数据库连接池类,需要设置参数才能获取到连接,几乎所有的数据库连接池都是这样的 -->
	<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>

	<!-- SqlSessionFactory交给Spring容器来进行管理 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!--1、注入数据源和数据库连接池 -->
		<property name="dataSource" ref="dataSource" />
		<!--2、核心配置文件的位置 -->
		<property name="configLocation" value="classpath:sqlMapConfig.xml" />
	</bean>

	<!-- 三种开发方式 -->
	<!-- 1、整合原始dao开发 -->
	<bean id="userDao" class="com.spring.cn.dao.UserDaoImpl">
		<!-- 主要用于获取session对象 -->
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

	<!-- 2、mapper动态接口开发 :MapperFactoryBean工厂 -->
	<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
		<property name="mapperInterface" value="com.spring.cn.mapper.UserMapper"></property>
	</bean>
	
	<!-- 3、Mapper动态代理扫描开发-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 自动寻找session工厂 -->
		<property name="basePackage" value="com.spring.cn.mapper.UserMapper"/>
	</bean>
</beans>


属性文件,一些常用的数据库配置:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.227:3306/***?characterEncoding=utf-8
jdbc.username=root
jdbc.password=mysql123

sqlMapConfig.xml

<?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>
	<!--核心配置文件 -->
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
	</environments>

	<mappers>
		<mapper resource="UserMapper.xml"/>
		<mapper resource="UserMap.xml"/>
	</mappers>
</configuration>


测试代码:

package com.spring.cn.junit;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.cn.dao.UserDaoImpl;
import com.spring.cn.entity.User;
import com.spring.cn.mapper.UserMapper;

public class TestDao {

	/**
	 * 传统dao开发,插入用户
	 */
	@Test
	public void testInsertUser() {
		//加载Spring配置文件
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		//让Spring容器为我们创建对象
		UserDaoImpl userDaoImpl = (UserDaoImpl) ac.getBean("userDao");
		//调用对象中的方法
		userDaoImpl.insertUser();
	}
	
	/**
	 * mapper动态接口开发
	 */
	@Test
	public void testFindUserById(){
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserMapper userMapper = (UserMapper) ac.getBean("userMapper");
		User user = userMapper.findUserById(4);
		System.out.println(user.toString());
	}
	
	/*
	 * 工作中最常用的开发:mapper动态接口扫描开发
	 */
	@Test
	public void testScannerMapper(){
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserMapper userMapper = ac.getBean(UserMapper.class);
		User user = userMapper.findUserById(4);
		System.out.println(user.toString());
	}
}


传统的dao开发:

package com.spring.cn.dao;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import com.spring.cn.entity.User;

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

	// extends SqlSessionDaoSupport 主要是为了获取SqlSession对象
	public void insertUser() {
		SqlSession sqlSession = this.getSqlSession();
		User user = new User();

		user.setAge(100);
		user.setName("天涯海角!");
		
		sqlSession.insert("insertNewUser", user);
	}
}

sql映射文件:

<?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">
<mapper namespace="com.spring.cn.dao.UserDaoImpl">
	<!-- 使用dao进行开发插入新用户 -->
	<insert id="insertNewUser" parameterType="com.spring.cn.entity.User">
		insert into user(age,name) values(#{age},#{name});
	</insert>
</mapper>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值