小付博客

无话可说...

您现在的位置是:首页>技术分享>MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件

MyBatis基于Spring-boot集成通用Mapper以及pagehelper分页插件

发布时间:2018-05-24 编辑:小付 浏览(1029) 评论(0)

    配置

    POM文件

    <parent>
        <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.5.6.RELEASE</version>
      <relativePath />
    </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>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


    同一环境1.5.7.RELEASE版本的Spring-boot

    会抛Caused by: java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.Driver异常,1.5.6.RELEASE以及1.5.5.RELEASE版本亲测没问题


    application.properties配置文件

    #数据库
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
    spring.datasource.username=root
    spring.datasource.password=741852
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    #mybatis&&通用Mapper
    mybatis.type-aliases-package=com.karle.bean
    mybatis.mapper-locations=classpath:mapper/*.xml
    mapper.mappers=com.karle.tk.TkMapper
    mapper.identity=MYSQL
    
    #分页插件
    pagehelper.helperDialect=mysql
    pagehelper.reasonable=true
    pagehelper.supportMethodsArguments=true
    pagehelper.params=count=countSql
    
    #log
    logging.file=logger.log
    logging.level.*=debug

    映射实体(省略字段get、set)

    import java.util.Date;import javax.persistence.Column;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Table(name = "user")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)    
        private Integer id;    
        
        /**
         * 名称
         */
        @Column(name = "name")    
        private String name;    
        
        /**
         * 年龄
         */
        @Column(name = "age")    
        private Integer age;    
        
        /**
         * 身份编号
         */
        @Column(name = "card_no")    
        private Integer cardNo;    
        
        /**
         * 生日
         */
        @Column(name = "birthday")    
        private Date birthday;
    }

    本地通用Mapper接口(继承通用Mapper接口)

    import tk.mybatis.mapper.common.Mapper;
    import tk.mybatis.mapper.common.MySqlMapper;
    public interface TkMapper<T> extends Mapper<T>, MySqlMapper<T> {
        //也可自己扩展
    }

    Mapper接口:基本的增、删、改、查方法 
    MySqlMapper:针对MySQL的额外补充接口,支持批量插入


    业务接口(继承“本地通用Mapper接口”)

    import org.apache.ibatis.annotations.Param;
    import com.karle.bean.User;
    import com.karle.tk.TkMapper;
    
    public interface UserMapper extends TkMapper<User> {
    
        public User selectByCardNo(@Param("cardNo") int cardNo);
    
    }

    Spring-boot启动类,@MapperScan仅扫描业务接口包,不能扫描本地通用Mapper接口包,

    否则报

    java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

    异常

    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @MapperScan(basePackages = { "com.karle.mapper" })
    public class SpringBootMyBatisApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootMyBatisApplication.class, args);
        }
    
    }

    单元测试

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    import com.github.pagehelper.PageHelper;
    import com.karle.bean.User;
    import com.karle.mapper.UserMapper;
    
    @RunWith(SpringRunner.class)
    @SpringBootTestpublic class SpringBootMyBatisApplicationTests {
    
        @Autowired
        private UserMapper mapper;    
        
        // 插入一条新记录
        @Test
        public void insertOne() {
            User newUser = new User();        
            int cardNo = (int) (Math.random() * 10000000);
            newUser.setAge(24);
            newUser.setBirthday(new Date());
            newUser.setName(cardNo + "用户");
            newUser.setCardNo(cardNo);
            mapper.insertSelective(newUser);
            System.out.println("插入成功");
        }    
        
        // 批量插入记录
        @Test
        public void insertMore() {
            List<User> recordList = new ArrayList<User>();        
            for (int i = 0; i < 2; i++) {
                User newUser = new User();            
                int cardNo = (int) (Math.random() * 10000000);
                newUser.setAge(26);
                newUser.setBirthday(new Date());
                newUser.setName(cardNo + "批量插入用户");
                newUser.setCardNo(cardNo);
                recordList.add(newUser);
            }
            mapper.insertList(recordList);
            System.out.println("批量插入成功");
        }    
        
        // 根据唯一编号查询用户(通用Mapper查询)
        @Test
        public void selectByCardNo() {
            User paramBean = new User();
            paramBean.setCardNo(6647403);
            User dbUser = mapper.selectOne(paramBean);        
            if (dbUser != null) {
                System.out.println("数据库用户(通用Mapper查询):" + dbUser.getName());            
                return;
            }
            System.out.println("查无此用户");
        }    
        
        // 根据唯一编号查询用户(XML查询)
        @Test
        public void selectByCardNoByXml() {
            User dbUser = mapper.selectByCardNo(6105967);        
            if (dbUser != null) {
                System.out.println("数据库用户(XML查询):" + dbUser.getName());            
                return;
            }
            System.out.println("查无此用户");
        }    
        
        // 根据年龄查询一组用户
        @Test
        public void selectByAge() {
            User paramBean = new User();
            paramBean.setAge(24);
            List<User> dbUserList = mapper.select(paramBean);
            System.out.println("总共查询数:" + dbUserList.size());
        }    
        
        // 分页查询用户
        @Test
        public void selectByPage() {
            PageHelper.offsetPage(1, 5);
            List<User> dbUserList = mapper.select(null);        
            for (User item : dbUserList) {
                System.out.println("分页用户:" + item.getName());
            }
        }    
        
        // 更新用户信息
        @Test
        public void updateOneInfo() {
            User paramBean = new User();
            paramBean.setId(1);
            paramBean.setAge(26);
            mapper.updateByPrimaryKeySelective(paramBean);
            System.out.println("更新成功");
        }
    
    }

    集成通用Mapper可以像hibernate那样“面向对象”进行数据库操作了,pagehelper分页也弥补了Mybatis本身不支持分页机制的小缺陷;为Mybatis添这两小插件,你还在犹豫使用Mybatis或者Hibernate吗?快拥抱Mybatis吧

    (完)

    Demo下载:http://download.csdn.net/download/qq_19260029/9982948

关键字词:MyBatis,Spring-boot,通用Mapper