SpringBoot2.x-myBatis简单使用
开发工具:IDEA2019
一、加入springBoot和myBatis需要的依赖包(pom.xml)
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>**项目组织id**</groupId>
<artifactId>**项目名**</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>**项目名**</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、对springBoot的application.yml(application.propertys)进行配置
spring:
datasource:
#数据库的驱动类型
driver-class-name: com.mysql.jdbc.Driver
#数据库用户名
username: ****
#数据库密码
password: ****
#数据库地址+数据库名
url: jdbc:mysql://localhost:3306/**数据库名**?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
thymeleaf:
cache: false
mybatis:
#给类起别名 com.xgg.dev是定义项目组织id(groupId)
# type-aliases-package需要加载到启动器的父级
type-aliases-package: com.xgg.dev.项目名
#扫描mapper.xml文件
mapper-locations: classpath:mapper/*.xml
#添加日志信息 com.xgg.dev是定义项目组织id(groupId)
logging:
level:
com:
xgg:
dev: debug
三、环境配置完毕,以简单的用户表为例进行实现
(1)实体类
public class User {
private Integer id;
private String userName;
private String userHome;
//省略set/get
}
(2)UserMapper接口
注意:切记加上@Mapper注解,否则mapper扫描不到报错
package com.xgg.dev.test_ssm.user.dao;
import com.xgg.dev.test_ssm.user.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
//查询所有
List<User> queryAll();
//查询单个
User findUserById(Integer id);
//增加用户
int addUser(User user);
//修改用户
int updaUser(User user);
//删除用户
int delUser(Integer id);
}
(3)UserMapper.xml
对UserMapper接口进行实现,并将查询结果根据对映的实体类进行输出
mybatis不同于hibernate
mybatis是直接操作表,实体类用来接受查询结果和传参
hibernate是通过操作绑定好的实体类去操作表
<?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接口 -->
<mapper namespace="com.xgg.dev.test_ssm.user.dao.UserMapper">
<!-- 管理映射关系:id表示唯一标识,返回类型 type是表对应的实体类 -->
<resultMap id="userMap" type="User">
<!-- cloumn是在数据库中的字段,property是实体类中对应的属性 -->
<id column="id" property="id"></id>
<result column="user_name" property="userName"></result>
<result column="user_home" property="userHome"></result>
</resultMap>
<!-- 查询所有 -->
<select id="queryAll" resultMap="userMap">
SELECT u.id,u.user_name,u.user_home
FROM user u
</select>
<!-- 按id查询 -->
<select id="findUserById" resultMap="userMap">
SELECT u.id,u.user_name,u.user_home
FROM user u
where id=#{id}
</select>
<!-- 添加用户 -->
<insert id="addUser" >
insert into user(user_name,user_home) values(#{userName},#{userHome});
</insert>
<!-- 修改用户信息 -->
<update id="updaUser" >
UPDATE user SET user_name=#{userName},user_home=#{userHome} WHERE id=#{id}
</update>
<!-- 删除用户 -->
<delete id="delUser">
delete from user where id=#{id}
</delete>
</mapper>
(4)IUserService接口
public interface IUserService {
//查询所有
List<User> queryAll();
//查询单个
User findUserById(Integer id);
//增加用户
int addUser(User user);
//修改用户
int updaUser(User user);
//删除用户
int delUser(Integer id);
}
(5)UserService实现类
service调用持久层(dao)方法进行接口的实现(可以将多个不同的mapper方法整合成自己需要的方法)
@Transactional():注解式事务
rollbackFor = Exception.class:任何异常(Exception)都会进行事务回滚(rollbackFor)
@Service
@Transactional(rollbackFor = Exception.class)
public class UserService implements IUserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> queryAll() {
return userMapper.queryAll();
}
@Override
public User findUserById(Integer id) {
return userMapper.findUserById(id);
}
@Override
public int addUser(User user) {
return userMapper.addUser(user);
}
@Override
public int updaUser(User user) {
return userMapper.updaUser(user);
}
@Override
public int delUser(Integer id) {
return userMapper.delUser(id);
}
}
(6)Controller控制层
package com.xgg.dev.test_ssm.user.web;
import com.xgg.dev.test_ssm.user.pojo.User;
import com.xgg.dev.test_ssm.user.service.IUserService;
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;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
//查询所有用户
@RequestMapping("queryAll")
private List<User> queryAll() {
return userService.queryAll();
}
//查询单个
@RequestMapping("/findUserById")
private User findUserById(Integer id) {
return userService.findUserById(id);
}
//增加用户
@RequestMapping("/addUser")
public int addUser(User user) {
return userService.addUser(user);
}
//修改用户信息
@RequestMapping("/updaUser")
public int updaUser(User user) {
return userService.updaUser(user);
}
//删除用户
@RequestMapping("/delUser")
public int delUser(Integer id) {
return userService.delUser(id);
}
}