SpringBoot整合MyBatis框架
SpringBoot的源码我全部放在下面链接上了,链接里面有我整理的SpringBoot整合其他技术的源码以及教程,还有SpringBoot的其他学习资料,欢迎大家来下载学习,如果该教程对你有所帮助,还请star支持一下,谢谢!
源码链接:https://gitee.com/oldou/springbootstudy
数据库
sql文件放在了项目源码的resources目录下。
创建项目
新建一个SpringBoot项目,添加以下启动器:
添加以下依赖:
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 添加数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!--添加Thymeleaf启动器依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
全局配置文件
spring:
datasource:
username: root
password: root
# ?serverTimezone=UTC解决时区的报错
url: jdbc:mysql://localhost:3306/oldou?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource # 使用druid数据源
#Spring Boot 默认是不注入这些属性值的,需要自己绑定
#druid 数据源专有配置
initialSize: 5
minIdle: 5
maxActive: 20
# 连接等待超时时间
maxWait: 60000
# 配置检测可以关闭的空闲连接间隔时间
timeBetweenEvictionRunsMillis: 60000
# 配置连接在池中的最小生存时间
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
# 关闭模板引擎的缓存
thymeleaf:
cache: false
# Mybatis的配置
mybatis:
# 扫描classpath中mapper目录下的映射配置文件,针对于映射配置文件放到了 resources 目录下
mapper-locations: classpath:mybatis/mapper/*.xml
type-aliases-package: com.oldou.pojo
业务代码的编写
实体类:
@Data //get、set、toString等方法
@AllArgsConstructor //有参构造
@NoArgsConstructor //创建无参构造
public class User {
private int id;
private String name;
private String pwd;
}
Mapper层
- 接口:
@Mapper
@Repository
public interface UserMapper {
//查询全部用户
List<User> queryAllUser();
//根据ID查询用户
User queryUserByID(int id);
//更新用户信息
int updateUser(User user);
//删除用户
int deleteUser(int id);
//增加用户
void addUser(User user);
}
- UserMapper.xml
在resources下新建mybatis/mapper/UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.oldou.mapper.UserMapper">
<select id="queryAllUser" resultType="User" useCache="true">
select * from user;
</select>
<select id="queryUserByID" parameterType="int" resultType="User" useCache="true">
select * from user where id = #{id};
</select>
<insert id="addUser" parameterType="User">
insert into user (id,name,pwd)
values(#{id},#{name},#{pwd});
</insert>
<update id="updateUser" parameterType="User" >
update user set name=#{name},pwd=#{pwd} where id=#{id};
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
</mapper>
业务层
- 接口
public interface UserService {
//查询全部用户
List<User> queryAllUser();
//根据ID查询用户
User queryUserByID(int id);
//更新用户信息
int updateUser(User user);
//删除用户
int deleteUser(int id);
//增加用户
void addUser(User user);
}
- 接口实现类
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> queryAllUser() {
return userMapper.queryAllUser();
}
@Override
public User queryUserByID(int id) {
return userMapper.queryUserByID(id);
}
@Override
public int updateUser(User user) {
return userMapper.updateUser(user);
}
@Override
public int deleteUser(int id) {
return userMapper.deleteUser(id);
}
@Override
public void addUser(User user) {
userMapper.addUser(user);
}
}
Controller层
@Controller
public class UserConyroller {
@Autowired
private UserService userService;
//跳转到主页
@RequestMapping({
"/","/index","/index.html"})
public String index(){
return "index";
}
@RequestMapping("/user/findUserAll")
public String getAllUser(Model model){
List<User> list = userService.queryAllUser();
model.addAttribute("list",list);
return "showUser";
}
@RequestMapping("/user/toAddUser")
public String toAddUser(){
return "addUser";
}
@RequestMapping("/user/addUser")
public String addUser(User user){
userService.addUser(user);
return "ok";
}
@RequestMapping("/user/preUpdateUser")
public String preUpdateUser(int id,Model model){
User user = userService.queryUserByID(id);
model.addAttribute(user);
return "updateUser";
}
@RequestMapping("/user/updateUser")
public String updateUser(User user){
int flag = userService.updateUser(user);
if(flag>0){
return "ok";
}else {
return "error";
}
}
@RequestMapping("/user/deleteUser")
public String deleteUser(int id){
int i = userService.deleteUser(id);
if(i>0){
return "ok";
}else {
return "error";
}
}
}
前端代码我就不放出来了,在源码中的templates目录下,启动项目可以实现增删改查。