第一步:增加mybatis相关依赖
我们只需要加上pom.xml文件这些依赖即可。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<!-- pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!-- druid 数据库连接框架-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
第二步:增加统一的mapper接口
在utils包中创建一个统一的mapper接口,后面所有的mapper类都会继承这个接口。
package com.mikechen.utils;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* 继承自己的MyMapper
*
*/
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
//TODO
//FIXME 特别注意,该接口不能被扫描到,否则会出错
}
特别注意:该接口不能被扫描到,否则会出错。所以我把这个接口放在了utils包中。
第三步:更改application.properties配置文件
主要是mybatis相关的数据库配置。
############################################################
# 数据源相关配置,这里用的是阿里的druid 数据源
############################################################
spring.datasource.url=jdbc:mysql://localhost:3306/zwz_test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.stat-view-servlet.allow=true
############################################################
# mybatis 相关配置
############################################################
mybatis.type-aliases-package=com.weiz.pojo
mybatis.mapper-locations=classpath:mapper/*.xml
mapper.mappers=com.weiz.utils.MyMapper #这个MyMapper 就是我之前创建的mapper统一接口。后面所有的mapper类都会继承这个接口
mapper.not-empty=false
mapper.identity=MYSQL
# 分页框架
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
这里的配置有点多,不过最基本的配置都在这。
第四步:Mybatis Generator自动生成代码
创建GeneratorDisplay类,运行即可自动生成相关的代码,如下所示:
package com.mikechen.utils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
public class GeneratorDisplay {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorDisplay generatorSqlmap = new GeneratorDisplay();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
第五步:在service包下创建UserService及UserServiceImpl接口实现类
1、创建UserService接口类
public interface UserService {
public void saveUser(SysUser user) throws Exception;
public void updateUser(SysUser user);
public void deleteUser(String userId);
public SysUser queryUserById(String userId);
public List<SysUser> queryUserList(SysUser user);
public List<SysUser> queryUserListPaged(SysUser user, Integer page, Integer pageSize);public void saveUserTransactional(SysUser user);
}
2、创建UserServiceImpl实现类
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private SysUserMapper userMapper;
@Override
public void saveUser(SysUser user) throws Exception {
userMapper.insert(user);
}
@Override
public void updateUser(SysUser user) {
userMapper.updateByPrimaryKeySelective(user);
}
@Override
public void deleteUser(String userId) {
userMapper.deleteByPrimaryKey(userId);
}
@Override
public SysUser queryUserById(String userId) {
return userMapper.selectByPrimaryKey(userId);
}
@Override
public List<SysUser> queryUserList(SysUser user) {
return null;
}
@Override
public List<SysUser> queryUserListPaged(SysUser user, Integer page, Integer pageSize) {
// 分页功能实现
PageHelper.startPage(page,pageSize);
Example example = new Example(SysUser.class);
Example.Criteria criteria = example.createCriteria();
if (!StringUtils.isEmptyOrWhitespace(user.getUsername())) {
criteria.andLike("username", "%" + user.getUsername() + "%");
}
if (!StringUtils.isEmptyOrWhitespace(user.getNickname())) {
criteria.andLike("nickname", "%" + user.getNickname() + "%");
}
List<SysUser> userList = userMapper.selectByExample(example);
return userList;
}
@Override
public void saveUserTransactional(SysUser user) {
}
}
第六步:编写controller层,增加MybatisController控制器
package com.weiz.controller;
import com.weiz.utils.JSONResult;
import com.weiz.pojo.SysUser;
import com.weiz.service.UserService;
import org.n3r.idworker.Sid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("mybatis")
public class MyBatisCRUDController {
@Autowired
private UserService userService;
@Autowired
private Sid sid;
@RequestMapping("/saveUser")
public JSONResult saveUser() throws Exception {
// 自动生成ID,也可以直接用uuid
String userId = sid.nextShort();
SysUser user = new SysUser();
user.setId(userId);
user.setUsername("spring boot" + new Date());
user.setNickname("spring boot" + new Date());
user.setPassword("abc123");
user.setIsDelete(0);
user.setRegistTime(new Date());
userService.saveUser(user);
return JSONResult.ok("保存成功");
}
@RequestMapping("/updateUser")
public JSONResult updateUser() {
SysUser user = new SysUser();
user.setId("10011001");
user.setUsername("10011001-updated" + new Date());
user.setNickname("10011001-updated" + new Date());
user.setPassword("10011001-updated");
user.setIsDelete(0);
user.setRegistTime(new Date());
userService.updateUser(user);
return JSONResult.ok("保存成功");
}
@RequestMapping("/deleteUser")
public JSONResult deleteUser(String userId) {
userService.deleteUser(userId);
return JSONResult.ok("删除成功");
}
@RequestMapping("/queryUserById")
public JSONResult queryUserById(String userId) {
return JSONResult.ok(userService.queryUserById(userId));
}
@RequestMapping("/queryUserList")
public JSONResult queryUserList() {
SysUser user = new SysUser();
user.setUsername("spring boot");
user.setNickname("lee");
List<SysUser> userList = userService.queryUserList(user);
return JSONResult.ok(userList);
}
@RequestMapping("/queryUserListPaged")
public JSONResult queryUserListPaged(Integer page) {
if (page == null) {
page = 1;
}
int pageSize = 10;
SysUser user = new SysUser();
List<SysUser> userList = userService.queryUserListPaged(user, page, pageSize);
return JSONResult.ok(userList);
}
@RequestMapping("/queryUserByIdCustom")
public JSONResult queryUserByIdCustom(String userId) {
return JSONResult.ok(userService.queryUserByIdCustom(userId));
}
@RequestMapping("/saveUserTransactional")
public JSONResult saveUserTransactional() {
String userId = sid.nextShort();
SysUser user = new SysUser();
user.setId(userId);
user.setUsername("lee" + new Date());
user.setNickname("lee" + new Date());
user.setPassword("abc123");
user.setIsDelete(0);
user.setRegistTime(new Date());
userService.saveUserTransactional(user);
return JSONResult.ok("保存成功");
}
}
第七步:在启动主类添加扫描器
在SpringBootStarterApplication 启动类中增加包扫描器。
@SpringBootApplication
//扫描 mybatis mapper 包路径
@MapperScan(basePackages = "com.mikechen.mapper")
//扫描 所有需要的包, 包含一些自用的工具类包 所在的路径
@ComponentScan(basePackages = {"com.mikechen","org.n3r.idworker"})
public class SpringBootStarterApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootStarterApplication.class, args);
}
}
第八步:测试
在浏览器输入controller里面定义的路径即可,只要你按照上面的步骤一步一步来,基本上就没问题。