一、框架配置
我是在上一篇的demo基础上增加的,上一篇地址: IDEA创建一个springboot项目(一)
配置的话非常简单,我用的是SpringBoot,直接引入:
<!-- TKMytis框架 mybatis自动生成 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.0.0</version>
</dependency>
application.yml配置
###################################################################
server:
#端口号
port: 8088
############################################################################
#链接数据库配置
spring:
datasource:
#数据库名称
name: demo
url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false #url
#数据库账号
username: root
#数据库密码
password: 123456
driver-class-name: com.mysql.jdbc.Driver
###########################################################################################33
##mybatis配置
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.demo.model.entity
创建一个baseMapper
注意:如果启动报错
原因,项目未扫描到 mapper 包。
解决:在项目启动类上加注解 @MapperScan
参考链接
package com.example.demo.mapper;
import tk.mybatis.mapper.common.ConditionMapper;
import tk.mybatis.mapper.common.ExampleMapper;
import tk.mybatis.mapper.common.IdsMapper;
import tk.mybatis.mapper.common.special.InsertListMapper;
/**
* @param
* @return 安装说明https://www.cnblogs.com/jpfss/p/11363367.html
* @author:liuyu
* @创建日期:2020年3月5日
* @功能说明:TKMytis框架通用mapper,用于自动生成增删改查代码
*https://blog.csdn.net/id19870510/article/details/79552997
* TKMytis框架通用mapper不能跟其它的mapper放一起,basePackage的属性值 不能包含通用mapper所在的包
*/
public interface baseMapper<T> extends tk.mybatis.mapper.common.BaseMapper<T>, ExampleMapper<T>, ConditionMapper<T>, IdsMapper<T>, InsertListMapper<T> {
}
创建baseService继承自baseMapper
package com.example.demo.service;
import com.example.demo.mapper.baseMapper;
/**
* @param
* @return 安装说明https://www.cnblogs.com/jpfss/p/11363367.html
* @author:liuyu
* @创建日期:2020年3月5日
* @功能说明:TKMytis框架通用service,用于自动生成增删改查代码
*/
public interface baseService<T> extends baseMapper<T> {
}
创建baseService的实现类baseServiceImpl implements baseService
package com.example.demo.serviceImpl;
import com.example.demo.service.baseService;
import org.springframework.stereotype.Service;
/**
* @version Revision 1.0.0
* @版权:版权所有 (c) 2018 安装说明https://www.cnblogs.com/jpfss/p/11363367.html
* @see:
* @创建日期:2020年3月2日 @功能说明: @begin
* @修改记录:
* @修改后版本 修改人 修改内容
* @2020年3月2日 liuyu TKMytis框架通用service,用于自动生成增删改查代码
* @end
*/
@Service
public abstract class baseServiceImpl<T> implements baseService<T> {
}
这样我们就基本完成了配置。
二、类配置方法
1、实体类
创建一个实体类userEntity与数据库进行映射,此时我们使用JPA的注解:
package com.example.demo.model;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @version Revision 1.0.0
* @版权:版权所有 (c) 2018
* @see:
* @创建日期:2020年3月2日 @功能说明: @begin
* @修改记录:
* @修改后版本 修改人 修改内容
* @2020年3月2日 liuyu 创建
* @end
*/
@SuppressWarnings("serial")
@Table(name = "user")
public class userEntity {
@Column(name = "id")
@Id
private String id;
//姓名
@Column(name = "user_name")
private String userName;
//年龄
@Column(name = "user_age")
private String userAge;
//地址
@Column(name = "address")
private String address;
//职位
@Column(name = "position")
private String position;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
其中@Table即数据表表名,@Column即列名,@Id作为主键,需要注意,@Id注解不可有多个,@Transient即冗余字段,不与数据库任何字段对应。
分享一个小技巧,实际项目中我们可能存在多数据源的情况,如果使用的是sqlserver,且多个数据库均在同一台服务器下且配置的账号均拥有权限,
则@Table注解中可以写成“{数据库名}.{架构名}.{表名}”,如:@Table(name=“db.dbo.tableName”)
而不需要再额外配置数据源
2、mapper类
创建userMapper类
package com.example.demo.mapper;
import com.example.demo.model.userEntity;
public interface userMapper extends baseMapper<userEntity> {
}
3、Service类
创建userService接口
package com.example.demo.service;
import com.example.demo.model.userEntity;
public interface userService {
void deleteUser(String id) throws Exception;
void updateUser(userEntity userEntity) throws Exception;
userEntity selectUser(String id) throws Exception;
void addUser(userEntity userEntity) throws Exception;
List<userEntity> getUser(String userName,String userAge) throws Exception;
}
创建userServiceImpl实现类
package com.example.demo.serviceImpl;
import com.example.demo.mapper.userMapper;
import com.example.demo.model.userEntity;
import com.example.demo.service.userService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/**
* @version Revision 1.0.0
* @版权:版权所有 (c) 2018
* @see:
* @创建日期:2020年3月2日 @功能说明: @begin
* @修改记录:
* @修改后版本 修改人 修改内容
* @2020年3月2日 liuyu 创建
* @end
*/
@Service
public class userServiceImpl implements userService {
@Autowired
private userMapper mapper;
/**
* @param
* @return
* @author:liuyu
* @创建日期:2020年3月5日
* @功能说明:根据id删除
*/
@Override
public void deleteUser(String id) throws Exception {
mapper.deleteByPrimaryKey(id);
}
/**
* @param
* @return
* @创建日期:2020年3月5日
* @功能说明:修改
*/
@Override
public void updateUser(userEntity userEntity) throws Exception {
mapper.updateByPrimaryKeySelective(userEntity);
}
/**
* @param
* @return
* @创建日期:2020年3月5日
* @功能说明:根据id查询
*/
@Override
public userEntity selectUser(String id) throws Exception {
userEntity user = mapper.selectByPrimaryKey(id);
return user;
}
/**
* @param
* @return
* @创建日期:2020年3月5日
* @功能说明:新增
*/
@Override
public void addUser(userEntity userEntity) throws Exception {
mapper.insertSelective(userEntity);
}
/**
* @param
* @return
* @author:liuyu
* @创建日期:2020年3月5日
* @功能说明:根据名字和年龄获取信息
*/
@Override
public List<userEntity> getUser(String userName, String userAge) throws Exception {
Example example = new Example(userEntity.class);
Example.Criteria criteria = example.createCriteria();
if (userName!=null&&userName!=null) {
criteria.andEqualTo("userName", userName);
}
if (userAge!=null&&userAge!=null) {
criteria.andEqualTo("userAge", userAge);
}
// example.setOrderByClause(" create_time desc");//这句话是根据create_time字段倒叙排序
List<userEntity> selectByExample = mapper.selectByExample(example);
return selectByExample;
}
}
4、Controller类
创建userController类
package com.example.demo.controller;
import com.example.demo.model.userEntity;
import com.example.demo.service.userService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @version Revision 1.0.0
* @版权:版权所有 (c) 2018
* @see:
* @创建日期:2020年3月2日 @功能说明: @begin
* @修改记录:
* @修改后版本 修改人 修改内容
* @2020年3月2日 liuyu 创建
* @end
*/
@RestController
@RequestMapping("/user")
public class userController {
@Autowired
private userService service;
/**
* @param
* @return
* @author:liuyu
* @创建日期:2020年3月5日
* @功能说明:插入数据
* 浏览器地址输入:http://127.0.0.1:8088/user/insertUser
*/
@RequestMapping("insertUser")
public void insertUser(){
try {
userEntity entity = new userEntity();
entity.setId("2727625255252");
entity.setUserName("张三");
entity.setUserAge("23");
entity.setAddress("北京胡同");
entity.setPosition("学生");
service.addUser(entity);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param
* @return
* @author:liuyu
* @创建日期:2020年3月5日
* @功能说明:根据id查询信息
* 浏览器地址输入:http://127.0.0.1:8088/user/selectUserById
*/
@RequestMapping("selectUserById")
public void selectUserById(){
try {
userEntity entity = service.selectUser("2727625255252");
//这边输出的是引用地址,debug看就可以看到entity是有值的
System.out.println(entity);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param
* @return
* @author:liuyu
* @创建日期:2020年3月5日
* @功能说明:根据条件查询
* 浏览器地址输入:http://127.0.0.1:8088/user/selectUser
*/
@RequestMapping("selectUser")
public void selectUser(){
try {
String userName = "李四";
String age = "22";
List<userEntity> list = service.getUser(userName,age);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param
* @return
* @author:liuyu
* @创建日期:2020年3月5日
* @功能说明:根据id删除
* http://127.0.0.1:8088/user/deleteUserById
*/
@RequestMapping("deleteUserById")
public void deleteUserById(){
try {
service.deleteUser("2727625255257");
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后启动浏览器输入地址就可以访问了,如果要看整合了swagger效果的看我下一篇,
界面是这样的:
三、出现的错误
- 启动 springboot 项目报错:
Field xxMapper in xx.service.impl.xxServiceImpl required a bean of type ‘xx.mapper.xxMapper’
原因:项目未扫描到 mapper 包。
解决:在项目启动类上加注解 @MapperScan
2. 启动 springboot 项目报错:
原因:TKMytis框架通用mapper跟其它的mapper放一起,我这边的就是baseMapper和userMapper放一起了,
解决:我把baseMapper移到其它文件下去了
上面的demo下载
链接:https://pan.baidu.com/s/1FVqqzQo3t6wJ26y8tZcDhA
提取码:j13i
数据库下载地址:
链接:https://pan.baidu.com/s/1_zOSjyF9abk6pZb5cuqZLQ
提取码:oso7
其它下载地址:https://download.csdn.net/download/weixin_43085797/12291906
/*
Navicat Premium Data Transfer
Source Server : liuyu
Source Server Type : MySQL
Source Server Version : 50724
Source Host : localhost:3306
Source Schema : demo
Target Server Type : MySQL
Target Server Version : 50724
File Encoding : 65001
Date: 01/04/2020 14:55:43
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` char(18) CHARACTER SET utf8 COLLATE utf8_croatian_ci NOT NULL COMMENT 'id',
`user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
`user_age` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '年龄',
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
`position` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '职位',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('2727625255252', '张三', '23', '北京胡同', '学生', NULL);
INSERT INTO `user` VALUES ('2727625255253', '李四', '66', '上海胡同', '小白领', NULL);
INSERT INTO `user` VALUES ('2727625255254', '李四', '22', '厦门胡同', '销售员', NULL);
INSERT INTO `user` VALUES ('2727625255255', '李四', '22', '广州胡同', '美女', NULL);
INSERT INTO `user` VALUES ('2727625255256', '李四', '22', '深圳胡同', '作家', NULL);
INSERT INTO `user` VALUES ('2727625255257', '删除', '44', '删除', '纱窗', NULL);
SET FOREIGN_KEY_CHECKS = 1;
下一篇:springboot项目(三)整合swagge接口测试框架
参考文章:https://www.cnblogs.com/jpfss/p/11363367.html