ssm整合通用mapper
1.加入通用mapper依赖
1 2 3 4 5 6 | <!--通用Mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.1.4</version> </dependency> |
完整的pom.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | <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>com.qingfeng</groupId> <artifactId>SSM-Mapper</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <spring.version>5.0.5.RELEASE</spring.version> <mybatis.version>3.4.5</mybatis.version> <mybatis.spring.version>1.3.1</mybatis.spring.version> <mybatis.paginator.version>1.2.15</mybatis.paginator.version> <junit.version>4.12</junit.version> <jackson.version>2.9.4</jackson.version> <druid.version>1.1.0</druid.version> <mysql-connector-java>5.1.30</mysql-connector-java> <spring.security.version>5.0.5.RELEASE</spring.security.version> </properties> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- MyBatis整合Spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> <!-- Mybatis的分页插件 --> <dependency> <groupId>com.github.miemiedev</groupId> <artifactId>mybatis-paginator</artifactId> <version>${mybatis.paginator.version}</version> </dependency> <!-- jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> <!--通用Mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.1.4</version> </dependency> <!-- 数据源/数据库连接池 --> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- MySQL数据库连接驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java}</version> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.12</version> </dependency> <!--引入Servlet支持 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <!-- 指定端口 --> <port>9002</port> <!-- 请求路径 --> <path>/</path> </configuration> </plugin> </plugins> </build> </project> |
和通用 Mapper 以前版本一样,可以直接使用 tk.mybatis 提供的 tk.mybatis.spring.mapper.MapperScannerConfigurer 进行配置,这个配置和
MyBatis 官方提供的 org.mybatis.spring.mapper.MapperScannerConfigurer 区别只是第一层的包名, tk 和 org 。所以使用这种方式时,如果你项目已经使用 org. 进行了配置,只需要改成 tk. 即可。
1 2 3 4 5 6 7 8 | <bean id= "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" > <!--加载mybatis的配置文件--> <property name= "configLocation" value= "classpath:mybatis-config.xml" /> <!-- 指定数据源,值为以上配置的数据源 --> <property name= "dataSource" ref = "dataSource" /> <!--指定mapper.xml映射文件的位置--> <property name= "mapperLocations" value= "classpath:mapper/*.xml" /> </bean> |
完整的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | <?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:tx= "http://www.springframework.org/schema/tx" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" > <bean id= "propertyConfigurer" class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" > <property name= "ignoreUnresolvablePlaceholders" value= "true" /> <property name= "locations" > <list> <value>classpath:db.properties</value> </list> </property> </bean> <bean id= "dataSource" class = "com.alibaba.druid.pool.DruidDataSource" init-method= "init" destroy-method= "close" > <property name= "driverClassName" value= "${db.driverClassName}" /> <property name= "url" value= "${db.url}" /> <property name= "username" value= "${db.username}" /> <property name= "password" value= "${db.password}" /> <property name= "initialSize" value= "3" /> <property name= "minIdle" value= "3" /> <property name= "maxActive" value= "20" /> <property name= "maxWait" value= "60000" /> <property name= "filters" value= "stat,wall" /> </bean> <bean id= "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" > <!--加载mybatis的配置文件--> <property name= "configLocation" value= "classpath:mybatis-config.xml" /> <!-- 指定数据源,值为以上配置的数据源 --> <property name= "dataSource" ref = "dataSource" /> <!--指定mapper.xml映射文件的位置--> <property name= "mapperLocations" value= "classpath:mapper/*.xml" /> </bean> <bean class = "tk.mybatis.spring.mapper.MapperScannerConfigurer" > <!-- 指定接口文件的位置 --> <property name= "basePackage" value= "com.qingfeng.dao" /> <!--指定sqlSessionFactory,值为以上配置的sqlSessionFactory--> <property name= "sqlSessionFactoryBeanName" value= "sqlSessionFactory" /> </bean> <!-- tx事务 --> <bean id= "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" > <property name= "dataSource" ref = "dataSource" /> </bean> <!-- 启动注解驱动 --> <tx:annotation-driven transaction-manager= "transactionManager" /> <!-- druid --> <!--监控数据相关的--> <bean id= "stat-filter" class = "com.alibaba.druid.filter.stat.StatFilter" > <!--当时间超过3000毫秒,这就是个慢sql,需要我们去处理--> <property name= "slowSqlMillis" value= "3000" /> <!--发现了慢SQL,可以以log的日志计录下来--> <property name= "logSlowSql" value= "true" /> <property name= "mergeSql" value= "true" /> </bean> <bean id= "wall-filter" class = "com.alibaba.druid.wall.WallFilter" > <!--指定监控的db是mysql--> <property name= "dbType" value= "mysql" /> </bean> </beans> |
实体类映射
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1.表名可以使用@Table(name = "tableName" )进行指定,对不符合第一条默认规则的可以通过这种方式指定表名. 2.字段默认和@Column一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式. 3.可以使用@Column(name = "fieldName" )指定不符合第3条规则的字段名 4.使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用. 5.建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键. 6.默认情况下,实体类中如果不存在包含@Id注解的字段,所有的字段都会作为主键字段进行使用(这种效率极低). 7.实体类可以继承使用,可以参考测试代码中的com.github.abel533.model.UserLogin2类. 8.由于基本类型,如 int 作为实体类字段时会有默认值0,而且无法消除,所以实体类中建议不要使用基本类型. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | package com.qingfeng.pojo; import java.io.Serializable; import java.util.Date; import javax.persistence.Id; import javax.persistence.Table; /** * 用户实体类 * @author Administrator * */ @Table(name= "tb_user" ) public class TBUser implements Serializable{ /** * */ private static final long serialVersionUID = -1223633684656774146L; @Id private Long id; //id private String username; //用户名 private String password; //密码,加密存储 private String phone; //注册手机号 private String email; //注册邮箱 private Date created; //创建时间 private String name; //真实姓名 private String status; //使用状态(1正常 0非正常) private String qq; //QQ号码 public Long getId() { return id; } public void setId(Long id) { this .id = id; } public String getUsername() { return username; } public void setUsername(String username) { this .username = username; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } public String getPhone() { return phone; } public void setPhone(String phone) { this .phone = phone; } public String getEmail() { return email; } public void setEmail(String email) { this .email = email; } public Date getCreated() { return created; } public void setCreated(Date created) { this .created = created; } public String getName() { return name; } public void setName(String name) { this .name = name; } public String getStatus() { return status; } public void setStatus(String status) { this .status = status; } public String getQq() { return qq; } public void setQq(String qq) { this .qq = qq; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + ", phone=" + phone + ", email=" + email + ", created=" + created + ", name=" + name + ", status=" + status + ", qq=" + qq + "]" ; } } |
创建Mapper接口
1 2 3 4 5 6 7 8 9 10 11 12 13 | package com.qingfeng.dao; import com.qingfeng.pojo.TBUser; import tk.mybatis.mapper.common.Mapper; /** * 继承通用Mapper * @author Administrator * */ public interface UserMapper extends Mapper<TBUser> { } |
这里继承了 tk.mybatis.mapper.common.Mapper 接口,在接口上指定了泛型类型 Brand 。当你继承了 Mapper 接口后,此时就已经有了针对 Brand 的大量方法
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package com.qingfeng; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.qingfeng.dao.UserMapper; import com.qingfeng.pojo.TBUser; public class TestUserMapper { private AbstractApplicationContext ac; private UserMapper userMapper; @Before public void doBefore() { ac = new ClassPathXmlApplicationContext( "classpath*:applicationContext.xml" ); userMapper = ac.getBean( "userMapper" , UserMapper. class ); } @After public void doAfter() { ac.close(); } @Test public void testUser() { List<TBUser> selectAll = userMapper.selectAll(); for (TBUser user:selectAll) { System. out .println(user); } } } |
结果:
1 2 | User [id=1, username=admin, password=123456, phone=13699996666, email=1412330@qq.com, created=Thu Jul 30 23:23:29 CST 2020, name=qq, status=1, qq=1412330] User [id=2, username=spring, password=$2a$10$rIxa8dDL8F8Bf.TeC5rOeev96e0wTo0FIuLmtdJ6T/a8CptHlAlga, phone=13698566966, email=123456@qq.com, created=Thu Jul 30 02:16:36 CST 2020, name=spring, status=1, qq=123456] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南