(修改完成)spring 梳理12--简单整合mybatis 动态Mapper(常用)
目录:
1. pom.xml
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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>
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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>
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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; }
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配合使用。这才是最佳实践。