spring

53 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

spring

1、整合Mybatis

步骤:

  1. 导入相关jar包
  • junit
  • mybatis
  • mysql数据库
  • spring相关
  • aop织入器
  • mybatis-spring整合包【重点】在此还导入了lombok包。
  • 配置Maven静态资源过滤问题!
     <dependencies>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.12</version>
         </dependency>
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis</artifactId>
             <version>3.5.6</version>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.47</version>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
             <version>5.2.0.RELEASE</version>
         </dependency>
         <!--Spring操作数据库的话,还需要一个spring-jdbc
                -->
         <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-jdbc</artifactId>
             <version>5.2.0.RELEASE</version>
         </dependency>
         <dependency>
             <groupId>org.aspectj</groupId>
             <artifactId>aspectjweaver</artifactId>
             <version>1.8.13</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis-spring</artifactId>
             <version>2.0.2</version>
         </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <version>1.18.10</version>
         </dependency>
     </dependencies>
 ​
     <build>
         <resources>
             <resource>
                 <directory>src/main/java</directory>
                 <includes>
                     <include>**/*.properties</include>
                     <include>**/*.xml</include>
                 </includes>
                 <filtering>true</filtering>
             </resource>
     </build>
 ​
  1. 编写配置文件
  2. 测试

1.1 回忆mybatis

  1. 编写pojo实体类
 @Data
 public class User {
     private int id;
     private String name;
     private String pwd;
 }
 ​
  1. 编写实现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>
        <package name="com.kuang.pojo"/>
    </typeAliases>
 ​
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
 ​
    <mappers>
        <package name="com.kuang.dao"/>
    </mappers>
 </configuration>
 ​
  1. 编写UserMapper接口
 public interface UserMapper {
     public List<User> selectUser();
 }
 ​
  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.kuang.mapper.UserMapper">
 ​
     <!--sql-->
     <select id="selectUser" resultType="user">
         select * from mybatis.user
     </select>
 </mapper>
 ​
  1. 测试
 @Test
 public void selectUser() throws IOException {
 ​
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = sqlSessionFactory.openSession();
 ​
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
 ​
    List<User> userList = mapper.selectUser();
    for (User user: userList){
        System.out.println(user);
   }
 ​
    sqlSession.close();
 }
 ​

1.2 Mybatis-Spring

什么是MyBatis-Spring?

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。

文档链接:mybatis.org/spring/zh/i…

如果使用 Maven 作为构建工具,仅需要在 pom.xml 中加入以下代码即可:

         <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis-spring</artifactId>
             <version>2.0.2</version>
         </dependency>
 ​

整合实现一:

  1. 引入Spring配置文件spring-dao.xml
 <?xml version="1.0" encoding="GBK"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd
 ​
 </beans>
 ​
  1. 配置数据源替换mybaits的数据源
     <!--DataSource:使用Spring的数据源替换Mybatis的配置 c3p0 dbcp druid
     我们这里使用Spring提供的JDBC:-->
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
         <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
         <property name="username" value="root"/>
         <property name="password" value="123456"/>
     </bean>
 ​
  1. 配置SqlSessionFactory,关联MyBatis
     <!--sqlSessionFactory-->
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource" />
         <!--关联mybatis配置文件-->
         <property name="configLocation" value="classpath:mybatis-config.xml"/>
         <property name="mapperLocations" value="classpath:com/kuang/mapper/*.xml"/>
     </bean>
 ​
  1. 注册sqlSessionTemplate,关联sqlSessionFactory
     <!--SqlSessionTemplate:就是我们使用的sqlSession-->
     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
         <!--只能使用构造器注入sqlSessionFactory,因为它没有set方法-->
         <constructor-arg index="0" ref="sqlSessionFactory" />
     </bean>
 ​
  1. 需要UserMapper接口的UserMapperImpl 实现类,私有化sqlSessionTemplate
 public class UserMapperImpl implements UserMapper {
 ​
     //我们的所有操作,都使用sqlSession来执行,在原来,现在都使用SqlsessionTemplate
     private SqlSessionTemplate sqlSession;
 ​
     public void setSqlSession(SqlSessionTemplate sqlSession) {
         this.sqlSession = sqlSession;
     }
 ​
     public List<User> selectUser() {
         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
         return mapper.selectUser();
     }
 }
 ​
  1. 将自己写的实现类,注入到Spring配置文件中。
     <bean id="userMapper" class="com.kuang.mapper.UserMapperImpl">
         <property name="sqlSession" ref="sqlSession"/>
     </bean>
 ​
  1. 测试使用即可!
     @Test
     public void test () throws IOException {
 ​
         ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
         
         UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
         for (User user : userMapper.selectUser()) {
             System.out.println(user);
         }
     }
 ​

结果成功输出!现在我们的Mybatis配置文件的状态!发现都可以被Spring整合!

 <?xml version="1.0" encoding="GBK" ?>
 <!DOCTYPE configuration
         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <!--configuration core file-->
 <configuration>
     
     <typeAliases>
         <package name="com.kuang.pojo"/>
     </typeAliases>
 ​
 </configuration>
 ​

整合实现二:

mybatis-spring1.2.3版以上的才有这个,官方文档截图:

dao继承Support类 , 直接利用 getSqlSession() 获得 , 然后直接注入SqlSessionFactory . 比起整合方式一 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好 . 可跟踪源码查看。

image-20221022092355261

测试:

  1. 将我们上面写的UserMapperImpl修改一下为UserMapperImpl2
 package com.kuang.mapper;
 ​
 ​
 import com.kuang.pojo.User;
 import org.mybatis.spring.support.SqlSessionDaoSupport;
 ​
 import java.util.List;
 ​
 /**
  * FileName:     UserMapperImpl2
  * CreateBy:     IntelliJ IDEA
  * Author:       wei
  * Date:         2022-10-22
  * Description :
  */
 public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper {
 ​
 ​
     @Override
     public List<User> selectUser() {
         return getSqlSession().getMapper(UserMapper.class).selectUser();
     }
 }
 ​
  1. 注入到Spring配置文件中
  <bean id="userMapper2" class="com.kuang.mapper.UserMapperImpl2">
         <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
     </bean>
  1. 测试
     @Test
     public void test () throws IOException {
 ​
         ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
         
         UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
         for (User user : userMapper.selectUser()) {
             System.out.println(user);
         }
     }
 ​