热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【SSM】MyBatis学习笔记Day5

5.1整合环境搭建5.1.1准备jar包Springaopalliance-1.0.jaraspectjweaver-1.8.10.jarspring-aop-4.3.6.

5.1 整合环境搭建


5.1.1 准备jar包



  1. Spring
    aopalliance-1.0.jar
    aspectjweaver-1.8.10.jar
    spring-aop-4.3.6.RELEASE.jar
    spring-aspects-4.3.6.RELEASE.jar
    spring-beans-4.3.6.RELEASE.jar
    spring-context-4,3.6.RELEASE.jar
    spring-core-4.3.6.RELEASE.jar
    spring-expression-4.3.6.RELEASE.jar
    spring-jdbc-4.3.6.RELEASE.jar
    spring-tx-4.3.6.RELEASE.jar



  2. MyBatis
    ant-1.9.6.jar
    ant-launcher-1.9.6.jar
    asm-5.1.jar
    cglib-3.2.4.jar
    commons-logging-1.2.jar
    javassist-3.21.0-GA.jar
    log4j-1.2.17.jar
    log4j-api-2.3ar
    log4j-core-2.3.jar
    mybatis-3.4.2.jar
    ognl-3.1.12.jar
    slf4j-api-1.7.22.jar
    slf4j-log4j12-1.7.22.jar



  3. 整合所需中间jar包
    MyBatis-Spring-1.3.1.jar



  4. 数据库驱动jar包
    mysql-connector-java-5.1.7-bin.jar



  5. 数据源所需JAR
    commons-dbcp2-2.1.1.jar
    commons-pool2-2.4.2.jar




5.1.2 编写配置文件

创建工程,添加jar包。




示例5-1

创建db.properties、Spring配置文件、MyBatis配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=root
jdbc.maxTotal=30
jdbc.maxIdle=10
jdbc.initialSize=5

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<!-- 1.连接数据库-->
<!-- 读取db.properties--><context:property-placeholder location="db.properties"/>
<!-- 配置数据源--><bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"><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="maxTotal" value="${jdbc.maxTotal}"/><property name="maxIdle" value="${jdbc.maxIdle}"/><property name="initialSize" value="${jdbc.initialSize}"/></bean><!-- 事务管理器,依赖数据源--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 注册事务管理器驱动,开启事务注解--><tx:annotation-driven transaction-manager="transactionManager"/><!-- 配置MyBatis工厂--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源--><property name="dataSource" ref="dataSource"/>
<!-- 指定核心配置文件位置--><property name="configLocation" value="classpath:mybatis-config.xml"/></bean></beans>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置别名--><typeAliases><package name="com.ssm.po"/></typeAliases>
<!-- 配置mapper--><mappers></mappers>
</configuration>



5.2 整合


5.2.1 传统DAO开发整合

需要编写dao接口以及接口实现类,向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession。


SqlSessionTemplate:Mybatis-Spring的核心类,它负责管理MyBatis的SqlSession,调用MyBatis的SQL方法。当调用SQL方法时,SqlSessionTemplate将会保证使用的SqlSession和当前Spring的事务是相关的。它还管理SqlSession的生命周期,包含必要的关闭、提交和回滚操作。 
SqlSessionDaoSupport:一个抽象支持类,它继承了DaoSupport类,主要是作为DAO的基类来使用。可以通过SqlSessionDaoSupport类的getSqlSession()方法来获取所需的SqlSession。





示例5-2


1.实现持久层



  1. 创建com.ssm.po包,创建User

package com.ssm.po;public class User {private Integer id;private String username;private String jobs;private String phone;@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", jobs='" + jobs + '\'' +", phOne='" + phone + '\'' +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getJobs() {return jobs;}public void setJobs(String jobs) {this.jobs = jobs;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}
}


  1. 创建映射文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ssm.po.User"><select id="findUserById" parameterType="Interger" resultType="User">select * from t_user where id=#{id}</select>
</mapper>

在MyBatis中配置

<mappers><mapper resource="com/ssm/mapper/UserMapper.xml"</mappers>

2.实现DAO层



  1. 创建com.ssm.dao,创建接口UserDao,编写方法

package com.ssm.dao;import com.ssm.po.User;public interface UserDao {public User findUserById(Integer id);
}


  1. 创建com.ssm.dao.Impl,创建接口实现类

package com.ssm.dao.impl;import com.ssm.dao.UserDao;
import com.ssm.po.User;
import org.mybatis.spring.support.SqlSessionDaoSupport;public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {public User findUserById(Integer id) {return this.getSqlSession().selectOne("com.ssm.mapper.UserMapper.findUserById",id);}
}


  1. 在applicationContext.xml中实例化UserDaoImpl

<bean id="userDao" class="com.ssm.dao.impl.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean>

3.整合测试

创建com.ssm.test包,编写测试类

package com.ssm.test;import com.ssm.dao.UserDao;
import com.ssm.po.User;
import org.apache.ibatis.session.SqlSession;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class findUserByIdDaoTest {public static void main(String[] args){
// 初始化Spring容器,加载配置文件ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
// 通过容器获取实例UserDao userDao= (UserDao) applicationContext.getBean("userDao");
// 调用方法User user=userDao.findUserById(1);System.out.println(user);}
}



5.2.2 mapper接口方式的开发整合


1.基于MapperFactoryBean的整合


mapperInterface:用于指定接口。 
SqlSessionFactory:用于指定SqlSessionFactory。 
SqlSessionTemplate:用于指定SqlSessionTemplate。若与SqlSessionFactory同时设定,则只会启用SqlsessionTemplate





示例 5-3



  1. mapper下创建接口

package com.ssm.mapper;import com.ssm.po.User;public interface UserMapper {public User findUserById(Integer id);
}


  1. 引入MyBatis配置

  2. 在Spring中创建id为userMapper的bean

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.ssm.mapper.UserMapper"/><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean>


  1. 编写测试类

package com.ssm.test;import com.ssm.mapper.UserMapper;
import com.ssm.po.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class findUserByIdMapperTest {public static void main(String[] args){ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");UserMapper userMapper= (UserMapper) applicationContext.getBean("userMapper");User user=userMapper.findUserById(1);System.out.println(user);}
}

虽然使用Mapper接口编程的方式很简单,但是在具体使用时还是需要遵循以下规范。
(1)Mapper接口的名称和对应的Mapper.xml映射文件的名称必须一致。
(2)Mapper.xml文件中的namespace与Mapper接口的类路径相同(即接口文件和映射文件需要放在同一个包中)。
(3)Mapper接口中的方法名和Mapper.xml中定义的每个执行语句的id相同。
(4)Mapper接口中方法的输入参数类型要和Mapper.xml中定义的每个SQL的parameterType的类型相同。
(5)Mapper接口方法的输出参数类型要和Mapper.xml中定义的每个SQL的resultType的类型相同。只要遵循了这些开发规范,MyBatis就可以自动生成Mapper接口实现类的代理对象,从而简化开发。





2. 基于MapperScannerConfigurer的整合


basePackage:指定映射接口文件所在的包路径,当需要扫描多个包时可以使用分号或逗号作为分隔符。指定包路径后,会扫描该包及其子包中的所有文件。 
annotationClass:指定要扫描的注解名称,只有被注解标识的类才会被配置为映射器。 
sqlSessionFactoryBeanName:指定在Spring中定义的SqlSessionFactory的Bean名称。 
sqlSessionTemplateBeanName:指定在Spring中定义的SqlSessionTemplate的Bean名称。若定义此属性,则sqlSessionFactoryBeanName将不起作用。 
markerInterface:指定创建映射器的接口。



推荐阅读
author-avatar
飘零-遗忘_106
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有