第一步:环境搭建
我们新建一个项目,注意比之前不使用数据库多导入了关于sql的两个依赖,分别是,JDBC API
、 MySQL Driver
和Mybatis Framework
第二步:配置数据库连接信息
application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
第三步:实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
private double money;
}
第四步:mapper接口
package com.lucius.dao;
import com.lucius.pojo.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface UserDao {
/**
* 通过名字查询用户信息
*/
@Select("SELECT * FROM myuser WHERE name = #{name}")
User findUserByName(@Param("name") String name);
/**
* 查询所有用户信息
*/
@Select("SELECT * FROM myuser")
List<User> findAllUser();
/**
* 插入用户信息
*/
@Insert("INSERT INTO myuser(name, age,money) VALUES(#{name}, #{age}, #{money})")
void insertUser(@Param("name") String name, @Param("age") Integer age, @Param("money") Double money);
/**
* 根据 id 更新用户信息
*/
@Update("UPDATE myuser SET name = #{name},age = #{age},money= #{money} WHERE id = #{id}")
void updateUser(@Param("name") String name, @Param("age") Integer age, @Param("money") Double money,
@Param("id") int id);
/**
* 根据 id 删除用户信息
*/
@Delete("DELETE from user WHERE id = #{id}")
void deleteUser(@Param("id") int id);
}
注意事项:
- 这里使用的是注解的方式进行底层开发
- @Mapper :表示本类是一个 MyBatis 的 Mapper,等价于以前 Spring 整合 MyBatis 时的 Mapper 接口
@controller
用来定义控制层的组件@service
用来定义业务层的组件@repository
用来定义持久层的组件
第四步:service层
package com.lucius.service;
import com.lucius.dao.UserDao;
import com.lucius.pojo.User;
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 UserService {
@Autowired
private UserDao userDao;
/**
* 根据名字查找用户
*/
public User selectUserByName(String name) {
return userDao.findUserByName(name);
}
/**
* 查找所有用户
*/
public List<User> selectAllUser() {
return userDao.findAllUser();
}
/**
* 插入两个用户
*/
public void insertService() {
userDao.insertUser("SnailClimb", 22, 3000.0);
userDao.insertUser("Daisy", 19, 3000.0);
}
/**
* 根据id 删除用户
*/
public void deleteService(int id) {
userDao.deleteUser(id);
}
/**
* 模拟事务。由于加上了 @Transactional注解,如果转账中途出了意外 SnailClimb 和 Daisy 的钱都不会改变。
*/
@Transactional
public void changemoney() {
userDao.updateUser("SnailClimb", 22, 2000.0, 3);
// 模拟转账过程中可能遇到的意外状况
int temp = 1 / 0;
userDao.updateUser("Daisy", 19, 4000.0, 4);
}
}
注意事项:
- 这里使用了自动注入
第五步:Controller层
package com.lucius.controller;
import com.lucius.pojo.User;
import com.lucius.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;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/query")
public User testQuery() {
return userService.selectUserByName("Daisy");
}
}
注意事项:
- 其实每一层的关系真的很明确!!!!!!