springboot整合mybatis
一.添加相关依赖和配置插件
配置资源拷贝插件的原因:maven 默认只把 src/main/resources 里面的非.java 文件进行编译到classes ,书写sql的xml文件与dao放置在src/main/java相同的包路径下,在使用的时候会因为这个原因找不到对应的xml文件,从而报错。
如果希望 src/main/java 下的文件也被编辑到 classes 中,需要在pom.xml中配置资源拷贝。
<!--配置Generator插件--> <!--通过配置文件将数据库中的表在指定的包下生成xml配置文件和实体类和dao类--> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.4</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> </dependencies> <!--指定配置文件的路径--> <configuration> <configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin> </plugins> <!--配置资源拷贝插件--> <resources> <resource> <directory>src/main/java</directory> <includes> <!--当逆向工程生成的配置xml与dao类在同一包下 通过资源拷贝配置--> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <!--配置资源拷贝插件会使默认配置失效,为了将application.peoperties和thymeleaf模板文件添加到编译文件中去--> <include>**/*.*</include> <include>**/*.yml</include> <include>**/*.properties</include> </includes> </resource> </resources> generatorConfig.xml如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="123456"> </jdbcConnection> <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userId="yycg" password="yycg"> </jdbcConnection> --> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="com.mc_74120.springbootmybatis.pojo" targetProject="./src/main/java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.mc_74120.springbootmybatis.mapper" targetProject="./src/main/java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.mc_74120.springbootmybatis.mapper" targetProject="./src/main/java"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table tableName="user"></table> <!-- <table schema="" tableName="sys_user"></table> <table schema="" tableName="sys_role"></table> <table schema="" tableName="sys_permission"></table> <table schema="" tableName="sys_user_role"></table> <table schema="" tableName="sys_role_permission"></table> --> <!-- 有些表的字段需要指定java类型 <table schema="" tableName=""> <columnOverride column="" javaType="" /> </table> --> </context> </generatorConfiguration>
配置好后
即可生成逆向工程
最后 在springboot的主启动类上加
@SpringBootApplication @MapperScan("com.mc_74120.springbootmybatis.mapper")//指定扫描接口与配置文件的包名
若mybatis的映射文件不在mapper包下
则在application文件中 添加:mybatis.mapper.locations=classpath:/mapper/*.xml
此时 @MapperScan注解只能扫描到接口 无法扫描到映射文件
二.进行测试
1.因为已经生成了dao层的配置文件和接口 只需要写service层和controller层即可
2.controller层
package com.mc_74120.springbootmybatis.controller;
import com.mc_74120.springbootmybatis.pojo.User;
import com.mc_74120.springbootmybatis.service.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserServiceImpl userService;
@PostMapping("/addUser")
public String addUser(User user){
try {
userService.addUser(user);
}
catch (Exception e){
e.printStackTrace();
return "error";
}
return "redirect:/ok";
}
@GetMapping("findAllUser")
public String findAllUser(Model model){
try {
List<User> users= userService.findAllUser();
model.addAttribute("userList",users);
}
catch (Exception e){
e.printStackTrace();
return "error";
}
return "selectUser";
}
@GetMapping("/preUpdate")
public String preUpdate(@RequestParam Integer id,Model model){
try {
User user= userService.preUpdate(id);
model.addAttribute("user",user);
}
catch (Exception e){
e.printStackTrace();
return "error";
}
return "updateUser";
}
@PostMapping("/updateUser")
public String updateUser(User user){
try {
userService.updateUser(user);
}
catch (Exception e){
e.printStackTrace();
return "error";
}
return "redirect:/ok";
}
@GetMapping("/deleteUser")
public String deleteUser(Integer id){
try {
userService.deleteUser(id);
}
catch (Exception e){
e.printStackTrace();
return "error";
}
return "ok";
}
@ExceptionHandler(value = {java.lang.NullPointerException.class})
public ModelAndView nullPointExceptionHandler(Exception e,ModelAndView ModelAndView){
ModelAndView.addObject("err",e.toString());
ModelAndView.setViewName("");
return ModelAndView;
}
}
3.service层
package com.mc_74120.springbootmybatis.service;
import com.mc_74120.springbootmybatis.mapper.UserMapper;
import com.mc_74120.springbootmybatis.pojo.User;
import com.mc_74120.springbootmybatis.pojo.UserExample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
@Transactional
public void addUser(User user) {
userMapper.insert(user);
}
@Override
@Transactional
public List<User> findAllUser() {
UserExample userExample=new UserExample();
return userMapper.selectByExample(userExample);
}
@Override
public User preUpdate(Integer id) {
return userMapper.selectByPrimaryKey(id);
}
@Override
@Transactional
public void updateUser(User user) {
userMapper.updateByPrimaryKeySelective(user);
}
@Override
@Transactional
public void deleteUser(Integer id) {
userMapper.deleteByPrimaryKey(id);
}
}
package com.mc_74120.springbootmybatis.service;
import com.mc_74120.springbootmybatis.pojo.User;
import java.util.List;
public interface UserService {
void addUser(User user);
List<User> findAllUser();
User preUpdate(Integer id);
void updateUser(User user);
void deleteUser(Integer id);
}