项目结构截图放在文末了,图片太大怕影响观看体验,想模仿搭建项目的可以拉到底看下截图再动手不迟。
第一步:依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--spring-boot mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--spring-boot web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--添加tk-mapper依赖-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
<!--druid依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.3</version>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
第二步:配置数据库信息,开启执行SQL打印
server:
port: 6677
spring:
#数据源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource #Druid连接池
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root #数据库用户名
password: 123456 #数据库密码
driver-class-name: com.mysql.cj.jdbc.Driver #mysql驱动
initialSize: 10 #初始化连接池大小
minIdle: 10 #初始化最小连接池数量
maxActive: 100 #初始化最大连接池数量
maxWait: 6000 #配置获取连接等待超时的时间
timeBetweenEvictionRunsMills: 6000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
minEvictableIdleTimeMillis: 30000 #配置一个连接在池中最小生存的时间,单位是毫秒
validationQuery: SELECT 'x' #测试连接
#tk-mybatis执行数据库操作的时候打印SQL日志(debug前面的key是mapper文件的包名,一定不能写错,否则打印不出日志)
logging:
level:
com.slm.tkmybatis.project.dao: debug
mybatis:
mapper-locations: classpath:/mapper/*.xml
第三步:配置通用mapper
①mapper配置
/**
* 通用mapper配置了类
*/
@Configuration
@AutoConfigureAfter(MybatisAutoConfiguration.class)
public class MapperScannerConfig {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
//mapper类的包名--即操作数据库的对应到数据表的Mapper.java类的包名
mapperScannerConfigurer.setBasePackage("com.slm.tkmybatis.project.dao");
Properties properties = new Properties();
properties.setProperty("mappers", BaseMapper.class.getName());
properties.setProperty("notEmpty","false");
properties.setProperty("IDENTITY", "MYSQL");
properties.setProperty("ORDER","BEFORE");
mapperScannerConfigurer.setProperties(properties);
return mapperScannerConfigurer;
}
}
②基础删除功能mapper
public interface DeleteMapper<T> extends Marker,
tk.mybatis.mapper.common.base.delete.DeleteMapper<T>,
DeleteByPrimaryKeyMapper<T>,
DeleteByConditionMapper<T>,
DeleteByIdsMapper<T>{
}
③基础新增功能mapper
public interface InsertMapper<T> extends Marker,
tk.mybatis.mapper.common.base.BaseInsertMapper<T>,
InsertSelectiveMapper<T>,
MySqlMapper<T>{
}
④基础查询功能mapper
public interface SelectMapper<T> extends Marker,
SelectOneMapper<T>,
tk.mybatis.mapper.common.base.select.SelectMapper<T>,
SelectAllMapper<T>,
SelectCountMapper<T>,
SelectByPrimaryKeyMapper<T>,
ExistsWithPrimaryKeyMapper<T>,
SelectByIdsMapper<T>,
SelectByConditionMapper<T>,
SelectCountByConditionMapper<T>,
SelectByExampleMapper<T>
{
}
⑤基础修改功能mapper
public interface UpdateMapper<T> extends Marker,
UpdateByPrimaryKeyMapper<T>,
UpdateByPrimaryKeySelectiveMapper<T>,
UpdateByConditionMapper<T>,
UpdateByConditionSelectiveMapper<T>,
UpdateByExampleSelectiveMapper<T> {
}
⑥基础增删改查功能mapper
public interface BaseMapper<T> extends InsertMapper<T>,DeleteMapper<T>,UpdateMapper<T>,SelectMapper<T>, ConditionMapper<T>, IdsMapper<T>, ExampleMapper<T>, InsertListMapper<T>{
}
第四步:创建业务mapper(这里只是创建业务mapper,先不写具体接口,继承BaseMapper后就可以使用BaseMapper的基础方法了)
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
第五步:创建实体类
@Data
@Table(name="user")
public class User implements Serializable {
//在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
private static final long serialVersionUID = 190783327737397579L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")
private Integer id;
@Column
private String userName;
@Column
private String userPhone;
}
第六步:创建controller
@RestController
@RequestMapping("tk")
public class TKMybatisController {
@Resource
UserMapper userMapper;
@GetMapping("getUser")
public Map<String,Object> getUser(){
Map<String,Object> result = new HashMap<>();
//selectByPrimaryKey是框baseMapper中的方法,我并没有在mapper中写这个方法
User user = userMapper.selectByPrimaryKey(1);
result.put("code",200);
result.put("data",user);
return result;
}
}
数据库脚本
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`user_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `user_name_index`(`user_name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '比比东', '123456');
INSERT INTO `user` VALUES (2, '千仞雪', '123456');
第七步:测试
第八步:三种 写法
①调用baseMapper基础方法
User user = userMapper.selectByPrimaryKey(1);
在上面的测试接口getUser中我用基础mapper中的selectByPrimaryKey写了个接口
②xml文件中写原生SQL(mapper.xml和mapper.java文件分别在哪个路径下创建不知道的可以拉到文末看截图)
- mapper接口==(文件名:UserMapper.java)==
@Mapper
public interface UserMapper extends BaseMapper<User> {
User selectById(@Param("id") Integer id);
}
- mapper.xml (文件名: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.slm.tkmybatis.project.dao.UserMapper">
<select id="selectById" resultType="com.slm.tkmybatis.project.model.User">
select id,user_name as userName,user_phone as userPhone from user where id=${id}
</select>
</mapper>
mapper接口和mapper的xml文件的文件名一定要一致
③mapper接口中通过tk-mybatis注解写原生SQL语句
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("select id,user_name as userName,user_phone as userPhone from user where id=${id}")
User searchUser(@Param("id") Integer id);
}
感觉这三种写法各自有适合的应用场景,后面学习中再摸索吧,下篇文章研究研究根据库表结构自动生成mapper和实体
项目结构图: