SpringBoot使用Druid数据源整合MyBatis框架

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目录下,启动项目可以实现增删改查。

猜你喜欢

转载自blog.csdn.net/weixin_43246215/article/details/108543218