【SSM】MyBatis学习笔记-Day5

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/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context
       http://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 configuration
        PUBLIC "-//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;

    @Override
    public 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 mapper
        PUBLIC "-//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:指定创建映射器的接口。

发布了22 篇原创文章 · 获赞 1 · 访问量 849

猜你喜欢

转载自blog.csdn.net/weixin_43651049/article/details/103998558