(修改完成)spring 梳理12--简单整合mybatis 动态Mapper(常用)

目录:

 

 

 

1. pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <!-- 测试相关 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- springmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <!-- servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency>
        <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>
        <!-- mybatis 相关 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!-- 数据库连接驱动 相关 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!-- 提供了对JDBC操作的完整封装 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.10.RELEASE</version>
        </dependency>
        <!-- 织入 相关 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>
        <!-- spring,mybatis整合包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.2</version>
        </dependency>
        <!-- 集成德鲁伊使用 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.18</version>
        </dependency>
        <!--集成日志-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.11.1</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.4.RELEASE</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <!-- 配置jdk -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <!-- 资源路径 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>


    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>
pom.xml

 

 

2. db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?
useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

注意 第二行url最后两行的数据库登陆

 

 

3. mybatis-config.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>


    <settings>
        <!--开启驼峰式命名-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

</configuration>
mybatis-config.xml

 

 

4. application.xml

<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">

    <!--扫包,com.xinzhi底下都扫扫看-->
    <context:component-scan base-package="com.xinzhi"/>

    <!--第三种方式:注解实现-->
    <aop:aspectj-autoproxy/>

    <!-- 加载外部的数据库信息 -->
    <context:property-placeholder location="db.properties"/>

    <!-- Mapper 扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 扫描 cn.wmyskxz.mapper 包下的组件 -->
        <property name="basePackage" value="com.xinzhi.dao"/>
    </bean>


    <!--配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的-->
    <bean id="dataSource"
          class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>


    <!--配置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="mappers/*.xml"/>
    </bean>


    <!--注册sqlSessionTemplate , 关联sqlSessionFactory-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--利用构造器注入-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>






</beans>

 

 

 

5. User

package com.xinzhi.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
 * @author sr
 * @date 2021/1/24
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String username;
    private String password;
}
User.java

 

 

6. UserMapper

不需要实现,只要一个接口 一个xml即可

package com.xinzhi.dao;

import com.xinzhi.entity.User;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author sr
 * @date 2021/1/25
 */
@Mapper
public interface UserMapper {
    /**
     * 保存User
     * @param user
     */
    void saveUser(User user);
}

 

 

7. 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.xinzhi.dao.UserMapper">

    <insert id="saveUser" parameterType="com.xinzhi.entity.User">
        insert into user(u_id,u_user_name,u_password) values (#{id},#{username},#{password})
    </insert>

</mapper>

 

 

8. 测试

import com.xinzhi.dao.UserMapper;
import com.xinzhi.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @author sr
 * @date 2021/1/24
 */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application.xml")
public class TestFirst {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testCreateBean(){
        userMapper.saveUser(new User(4,"sunrui","123456"));
    }

}

 

 

 

 

以上是增加一条记录,删、改、查后续试试

 

 

 

 

 

 

配置文件:

<!-- Mapper 扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <!-- 扫描 cn.wmyskxz.mapper 包下的组件 -->
  <property name="basePackage" value="com.xinzhi.dao"/>
</bean>

<!--配置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/xinzhi/dao/*.xml"/> </bean>

 

 

在【mapper】下新建一个【UserQueryMapper】代理接口,并使用注解:

public interface UserMapper {
  /**
  * 获取所有的用户
  * @return
  */
  List<User> getAllUsers();
  ...
}

 

 

不需要实现,只要一个接口一个xml即可

 

 

测试

@Test
public void testFindAll(){
  UserMapper mapper = (UserMapper) context.getBean("userMapper");
  List<User> users = mapper.getAllUsers();
  for (User user : users) {
    System.out.println(user);
  }
}

 

 

结果:

User{id=1, username='楠哥', password='123456'}
User{id=3, username='磊哥', password='987654'}
User{id=5, username='微微姐', password='12345678'}
User{id=6, username='微微姐', password='12345678'}
可以看到,查询结果和之前非 Mapper 代理的查询结果一样

 

 

 

当然有的人连配置文件也不想要

@Mapper
public interface AdminMapper {
  /**
  * 保存管理员
  * @param admin
  * @return
  */
  @Insert("insert into admin (username,password) values (#{username},#{password})")
  int saveAdmin(Admin admin);

  
/**   * 更新管理员   * @param admin   * @return   */   @Update("update admin set username=#{username} , password=#{password} where id = #{id}")   int updateAdmin(Admin admin);

  
/**   * 删除管理员   * @param id   * @return   */   @Delete("delete from admin where id=#{id}")   int deleteAdmin(int id);

  
/**   * 根据id查找管理员   * @param id   * @return   */   @Select("select id,username,password from admin where id=#{id}")   Admin findAdminById(@Param("id") int id);

  
/**   * 查询所有的管理员   * @return   */   @Select("select id,username,password from admin")   List<Admin> findAllAdmins(); }

 

 

一般使用动态mapper,使用动态代理完成工作,一般会使用xml和mappeer配合使用。这才是最佳实践。

posted @ 2021-01-24 13:49  Master_Sun  阅读(160)  评论(0编辑  收藏  举报