• 学习springboot整合mybatis并编写测试类


    报名立减200元。暑假直降6888。

    邀请链接:http://www.jnshu.com/login/1/20535344

    邀请码:20535344

    遇到的问题:

    1.原因是在启动类上只有一个@MapperScan注解。需要配置这个注解的basePackages。

    @MapperScan(basePackages = {"com.chenxin.springboot_0702"})

    之后删除掉@EnableAutoConfiguration和@ComponentScan(basePackages = {"com.chenxin.springboot_0702"})也照样运行成功。

     第二个问题:测试类 里面用@Autowired注解自动装配UserMapper时会有提示报错,但是执行起来没有问题,可以通过。

    改成@Resource注解则没有红线了。

          

    首先配置pom.xml文件。springboot的项目都是jar包,不是war包。还有就是依赖模块spring-boot-starter-jdbc不需要,因为在mybatis-spring-boot-starter中已经包含了。

    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.chenxin</groupId>
        <artifactId>springboot_0702</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springboot_0702</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- Junit依赖 -->
            <!--junit不需要springboot已经自动加载了。-->
         <!--spring-boot-starter-jdbc已经包含在了mybatis-spring-boot-starter中了。-->
    <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.5</version> </dependency> <!--引入mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <!--mybatis分页插件--> <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

    application.properties

    #配置mysql的连接配置
    spring.datasource.url=jdbc:mysql://localhost:3306/testx
    spring.datasource.username=root
    spring.datasource.password=123
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    接着是model类。

    | users | CREATE TABLE `users` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(45) NOT NULL,
      `password` varchar(145) NOT NULL,
      `name` varchar(45) DEFAULT NULL,
      `courseId` int(11) DEFAULT NULL,
      `image` varchar(150) DEFAULT NULL,
      `email` varchar(45) DEFAULT NULL,
      `address` varchar(45) DEFAULT NULL,
      `phone` varchar(45) DEFAULT NULL,
      `createdAt` bigint(20) DEFAULT NULL,
      `updatedAt` bigint(20) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `username` (`username`) USING HASH
    ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 |

    import java.io.Serializable;

    public
    class User implements Serializable { private long id; private String userName; private String password; private String name; private int courseId; private String image; private String email; private String address; private String phone; private long createdAt; protected long updatedAt; public User() { } //其他getter和setter
       //toString方法
    }

    然后是mapper类。

    import com.chenxin.springboot_0702.model.User;
    import org.apache.ibatis.annotations.*;
    import org.apache.ibatis.mapping.StatementType;
    
    import java.util.List;
    import java.util.Map;
    
    @Mapper
    public interface UserMapper {
    
        @Select("select * from users")
        public List<Map> findAll();
    
    }

    接着说springboot启动类。最开始提过了在这里只用了springboot整合mybatis和mysql。所以@ComponentScan和@EnableAutoConfiguration。

    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.ComponentScan;
    
    @SpringBootApplication
    //开启通用注解扫描
    //@ComponentScan(basePackages = {"com.chenxin.springboot_0702"})
    @MapperScan(basePackages = {"com.chenxin.springboot_0702"})
    //@EnableAutoConfiguration
    public class Run {
    
        public static void main(String[] args) {
            SpringApplication.run(Run.class, args);
        }
    }

     测试类

    import com.chenxin.springboot_0702.dao.UserMapper;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.SpringBootConfiguration;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import javax.annotation.Resource;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Run.class)
    @EnableAutoConfiguration
    public class RunTests {
        @Resource
        private UserMapper userMapper;
    
        @Test
        public void contextLoads() {
        }
    
    
        @Test
        public void G() {
            System.out.println(userMapper.findAll());
        }
    }

    接下来是其他的增删改查。其中更新使用的@Update注解,貌似可以自动判断是否为空,只要为空就不更新了。

    import com.chenxin.springboot_0702.model.User;
    import org.apache.ibatis.annotations.*;
    import org.apache.ibatis.mapping.StatementType;
    
    import java.util.List;
    import java.util.Map;
    
    @Mapper
    public interface UserMapper {
    
        //查询
        @Select("select * from users where id = #{id}")
        public User findById(@Param("id") long id) throws Exception;
    
        @Select("select * from users")
        public List<User> findAll() throws Exception;
    
        @Select("select * from users where phone=#{phone}")
        public List<User> findByPhone(@Param("phone") String phone) throws Exception;
    
        //新增
        @Insert("INSERT INTO users(id,username,password,name,courseId,image,email,address,phone,createdAt,updatedAt) VALUES (#{id},#{username},#{password},#{name},#{courseId},#{image},#{email},#{address},#{phone},#{createdAt},#{updatedAt})")
        @Options(useGeneratedKeys = true, keyProperty = "id")
        public int add(User user) throws Exception;
    
        //删除
        @Delete("delete from users where id = #{id}")
        public boolean delete(@Param("id") long id) throws Exception;
    
        //更新
        @Update("update users set username=#{username}, password=#{password}, name=#{name}, courseId=#{courseId}, image=#{image}, email=#{email}, address=#{address}, phone=#{phone}, updatedAt=#{updatedAt} where id=#{id}")
        public boolean update(User user) throws Exception;
    }

    测试单元

    import com.chenxin.springboot_0702.dao.UserMapper;
    import com.chenxin.springboot_0702.model.User;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Run.class)
    @EnableAutoConfiguration
    public class RunTests {
        
        @Resource
        private UserMapper userMapper;
        
        @Test
        public void G() throws Exception {
            System.out.println(userMapper.findAll());
        }
        @Test
        public void g1() throws Exception {
            System.out.println(userMapper.findById(12L));
        }
        @Test
        public void g3() throws Exception {
            User user = new User();
            user.setName("无极");
            user.setUsername("六六qijiu");
            user.setPassword("12443345");
            userMapper.add(user);
            System.out.println(user.getId());
        }
        @Test
        //删除
        public void g4() throws Exception{
            long id = 14;
            System.out.println(userMapper.delete(id));
        }
    
        @Test
        //更新
        public void g5() throws Exception{
            User user = userMapper.findById(16);
            user.setUsername("七七七");
            System.out.println(userMapper.update(user));
        }
        @Test
        public void g6() throws Exception{
            List<User> users = userMapper.findByPhone("13101436674");
            for (User user : users)
                System.out.println(user.getId() + "***" + user.getPhone());
        }
    }
  • 相关阅读:
    Andorid中写文件后在电脑上看不到的解决办法
    【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
    OpenCV入门学习笔记
    视频播放(iOS开发)
    音频播放(iOS开发)
    iPad开发(相对于iPhone开发时专有的API)
    静态库/内存分析/通讯录/换肤/硬件信息获取
    Alpha冲刺! Day1
    软工团队
    软工团队
  • 原文地址:https://www.cnblogs.com/JasonChen92/p/9259629.html
Copyright © 2020-2023  润新知