Maison >Java >javaDidacticiel >Spring+SpringMVC+MyBatis apprentissage et construction approfondis-Intégration MyBatis et Spring
Veuillez indiquer la source de réimpression :
Comme mentionné précédemment : Spring+SpringMVC+MyBatis apprentissage et construction approfondis (8) - Cache de requêtes MyBatis
<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 "><!-- 加载配置文件 --><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><!-- SqlSessionFactory配置 --><!-- 让Spring管理SqlSessionFactory使用mybatis和spring整合包中的 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据库连接池 --><property name="dataSource" ref="dataSource" /><!-- 加载mybatis的全局配置文件 --><property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /></bean></beans>4. Trois méthodes d'écriture du Mapper 4.1 Développement dao original (après intégration avec spring) 4.1. .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="test"><!--在映射文件中配置很多sql语句 --><!--需求:通过id查询用户表的记录 --><!--id:标识映射文件中的sql,称为statement的id。将sql语句封装在mapperStatement的对象中,所有id称为Statement的id; parameterType:指定输入参数的类型,这里指定int型; #{}:表示一个占位符; #{id}:其中id表示接收输入的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以是value或其它名称; resultType:指定输出结果所映射的Java对象类型,select指定resultType表示将单条记录映射成Java对象。 --><select id="findUserById" parameterType="int" resultType="joanna.yan.po.User">select * from user where id=#{value}</select> </mapper>Charger l'utilisateur.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> <!-- 批量别名的定义: package:指定包名,mybatis会自动扫描包中的pojo类,自定义别名,别名就是类名(首字母大写或小写都可以) --> <typeAliases> <package name="joanna.yan.po"/> </typeAliases><mappers><mapper resource="sqlmap/User.xml"/><!-- 批量加载映射配置文件,mybatis自动扫描包下的mapper接口进行加载; 遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中; 以上规范的前提是:使用的是mapper代理方法; --><package name="joanna.yan.mapper"/></mappers> </configuration>4.1. SqlSessionDaoSupport)
public interface UserDao {//根据id查询用户信息public User findUserById(int id) throws Exception; }la classe d'implémentation de l'interface dao doit injecter SqlSessionFactory jusqu'au printemps. Ici, nous utilisons la méthode de configuration de la déclaration Spring pour configurer les beans dao :
Laissez la classe d'implémentation UserDaoImpl hériter de SqlSessionDaoSupport.
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{ @Overridepublic User findUserById(int id) throws Exception {//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession sqlSession=this.getSqlSession(); User user=sqlSession.selectOne("test.findUserById", id);return user; } }4.1.3 Configurer dao Configurer dao dans applicationContext.xml.
<!-- 方法一:原始dao接口 --><bean id="userDao" class="joanna.yan.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>4.1.4 programme de test
public class UserDaoImplTest {private ApplicationContext applicationContext; @Beforepublic void setUp(){ applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); } @Testpublic void findUsetByIdTest() throws Exception{ UserDao userDao=(UserDao) applicationContext.getBean("userDao"); User user=userDao.findUserById(1); System.out.println(user); } }4.2Développement d'agent mapper4.2.1mapper.xml et mapper.java
<?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有特殊作用,namespace等于mapper接口地址 --><mapper namespace="joanna.yan.mapper.UserMapper"><select id="findUserById" parameterType="int" resultType="user">select * from user where id=#{value}</select></mapper>
public interface UserMapper {public User findUserById(int id) throws Exception; }4.2 .2 Créez un objet proxy via MapperFactoryBean et configurez le mappeur dans applicationContext.xml.
<!-- 方法二:mapper配置 MapperFactoryBean:根据mapper接口生成代理对象 --><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="joanna.yan.mapper.UserMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>4.2.3 Procédure de test
public class UserMapperTest {private ApplicationContext applicationContext; @Beforepublic void setUp(){ applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); } @Testpublic void findUsetByIdTest() throws Exception{ UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper"); User user=userMapper.findUserById(1); System.out.println(user); } }Problèmes avec cette méthode : besoin de tester chacun La configuration du mappeur est problématique. 4.3 Analyse du mappeur via MapperScannerConfigurer (recommandé) Configurer l'analyse par lots du mappeur dans applicationContext.xml.
<!-- 方法三:mapper批量扫描 从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册 遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录中。 自动扫描出来的mapper的bean的id为mapper类名(首字母小写) --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 指定扫描的包名 如果扫描多个包,每个包中间使用半角逗号分隔 --><property name="basePackage" value="joanna.yan.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean>À l'heure actuelle, la configuration du mappeur de chargement par lots sous joanna.yan.mapper dans SqlMapConfig.xml peut être omise.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!