美文网首页
[JWeb系列3] SpringBoot集成Mybatis

[JWeb系列3] SpringBoot集成Mybatis

作者: 做梦枯岛醒 | 来源:发表于2018-01-03 10:50 被阅读76次

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs) [百度百科]

    SpringBoot集成MyBatis

    说白了MyBatis提供了一种高级映射,相对快捷的操作数据库的方式,记得用过ThinkPhp框架,操作数据部分用起来还是很舒服的,所以在JavaWeb上选择了MyBatis集成。

    同理相较于Spring Boot,我们的MyBatis导入也需要添加依赖

    第一步,添加依赖

    添加部分如下,添加后的截图在下面

    <!--MyBatis依赖-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.1.1</version>
    </dependency>
    
    <!--Mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    
    依赖

    第二步,配置数据库信息

    在application.properties中配置数据库
    内容如下

    #第一句是你的entity,也就是pojo的所在包
    mybatis.type-aliases-package=com.example.demo.Entity
    #如果报错要求使用新版本,你需要在mysql.后面加上cj.(错误会提示)
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    #注意,这边的url username password配置跟jdbc的是一样的,具体要改成你用的数据库,添加你需要的配置
    spring.datasource.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
    spring.datasource.username = root
    spring.datasource.password = root
    
    app

    此时如果你的com.mysql.jdbc.Driver标红,说明你的项目mysql lib没设置好,需要你按照第一篇文章那样,把Mysql的Lib加入

    第三步,添加扫描注解

    在Application中添加mappingscan注解,内容是你的Mapper所在包


    image.png

    第四步,建立Pojo

    Pojo的话就是一个简单的java对象模板(Class),比如说我现在的场景我建立的测试数据库如下。

    数据库名是rfid,我现在用admins这个表,表中有3个字段。


    数据库

    那我的pojo建立应该对应着这几个字段。(其实不必要的,但是现在对应着就行,不会出什么大麻烦)

    package com.example.demo.Entity;
    
    import java.io.Serializable;
    
    public class UserEntity implements Serializable{
    //字段类型的话,最好跟Mapper里面规定的字段类型对应,否则会出现问题
       private Long id;
       private String user_id;
       private String password;
    
        public UserEntity(Long id, String user_id, String password) {
            this.id = id;
            this.user_id = user_id;
            this.password = password;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getUser_id() {
            return user_id;
        }
    
        public void setUser_id(String user_id) {
            this.user_id = user_id;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public String toString() {
            return "id"+user_id+"pswd"+password;
        }
    }
    
    
    

    第五步,开发Mapper

    先看一下我们的最终版吧

    package com.example.demo.Mapper;
    
    import com.example.demo.Entity.UserEntity;
    import org.apache.ibatis.annotations.*;
    
    import java.util.List;
    
    public interface UserMapper {
    
        @Select("SELECT * FROM admins")
        @Results({
                @Result(property = "id", column = "id"),
                @Result(property = "user_id", column = "user_id"),
                @Result(property = "password", column = "password")
        })
        List<UserEntity> getAll();
    
        @Select("SELECT * FROM admins WHERE id = #{id}")
        @Results({
                @Result(property = "user_id", column = "user_id"),
                @Result(property = "password", column = "password")
        })
        UserEntity getOne(Long id);
    
        @Insert("INSERT INTO admins(id,user_id,password) VALUES(#{id}, #{user_id}, #{password})")
        void insert(UserEntity user);
    
    
        @Update("UPDATE admins SET user_id=#{user_id},password=#{password} WHERE id =#{id}")
        void update(UserEntity user);
    
        //删除某一项
        @Delete("DELETE FROM admins WHERE id =#{id}")
        void delete(Long id);
    
    }
    

    Mapper是操作数据库的核心内容,这是一个java 接口,我们的增删改查通过注解来实现,还是要写sql语句,第一次看到这个的时候我内心是崩溃的,因为以前用过THinkphp对数据库的操作,简直超级棒,现在初来乍到搞JavaWeb,一直渴望有这样的神操作,可是到头来还是要写Sql……听同学说其他框架可以实现,暂且不研究,以后有机会再说。
    暂时先这样,我们写好了一个Mapper

    同时下面这是一些相关的解释

    • @Select 是查询类的注解,所有的查询均使用这个
    • @Results修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。(这也是我刚才说的对应不对应的问题,如果实际要求不能对应那么可以通过注解来解决)
    • @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值
    • @Update 负责修改,也可以直接传入对象
    • @delete 负责删除

    第六步,验收成果

    也是先看看我们最终版本

    package com.example.demo.Web;
    
    import com.example.demo.Mapper.UserMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    import com.example.demo.Entity.UserEntity;
    
    @RestController
    @EnableAutoConfiguration
    public class HelloController {
        @RequestMapping("/Hello")
        public String hello(){
            return "Hello Spring boot";
        }
    
        @Autowired
        private UserMapper userMapper;
    
        @RequestMapping("/getUsers")
        public String getUsers() {
            List<UserEntity> users=userMapper.getAll();
            return users.get(0).toString();
        }
    
        @RequestMapping("/getOne")
        public String getOne(){
            return userMapper.getOne(1L).toString();
        }
    }
    
    

    也是修改我们的HelloController 增加俩方法,然后浏览器访问看效果。


    效果图

    话说我刚才很智障的遇到一个错误,就是能连接数据库,查不到数据,一堆空指针……后来各种找不知道怎么解决,跑数据库一看,没添加数据……想把自己掐死。

    当然就是简单的集成,参考大神们的教程,在大神们神一样的操作上简化
    ?或者是整理了一下逻辑。
    在踩坑的路上越走越远。

    相关文章

      网友评论

          本文标题:[JWeb系列3] SpringBoot集成Mybatis

          本文链接:https://www.haomeiwen.com/subject/dhlqnxtx.html