zoukankan      html  css  js  c++  java
  • springboot集成mybatis

    springboot集成mybatis

    springboot整合了各种框架,采用各种starter启动器来引入我们需要的东西,它采用约定优于配置的原则,极大了简化了配置,提高了开发效率。下面是springboot集成mybatis进行开发。
    1.pom配置文件中引入如下依赖

     		<!--引入web模块的starter-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--springboot中mybatis的起步依赖-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
    
            <!--mysql驱动包-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
    
            <!--Springboot热部署插件-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
    

    2.在springboot的核心配置properties文件中配置mybatis的相关信息

    #编码设置,用于解决中文乱码问题
    spring.http.encoding.charset=UTF-8
    spring.http.encoding.enabled=true
    spring.http.encoding.force=true
    server.tomcat.uri-encoding=UTF-8
    
    #页面映射配置
    spring.mvc.view.prefix=/pages/
    spring.mvc.view.suffix=.html
    
    #数据库的相关配置
    #配置数据源
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/book
    spring.datasource.username=root
    spring.datasource.password=123456
    
    #修改端口号,也可不改,默认为8080
    server.port=8088
    
    #配置实体类所在的包
    mybatis.type-aliases-package=com.jason.test.bean
    #配置mapper文件路径
    mybatis.mapper-locations=classpath*:com/jason/test/mapper/*.xml
    

    3.编写mapper接口也就是dao层,需要在mapper接口类上添加@Mapper注解

    @Mapper
    public interface CheckUser {
        //登录验证用户信息
        int select (Map map);
    
        //查询用户信息
        List<User> selectAll();
    
        //删除用户
        int del(int id);
    
        //用户修改
        int update(Map map);
    }
    注:    
    @Mapper注解的的作用
    1.为了把mapper这个DAO交给Spring管理
    2.为了不再写mapper映射文件(用sql注解的方式)
    3.为了给mapper接口自动生成一个实现类 自动根据一个添加@Mapper注解的接口生成一个实现类 
    

    4.mapper接口所对应的mapper.xml文件(部分内容)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.jason.test.dao.CheckUser">
    
        <resultMap id="resultUser" type="com.jason.test.bean.User">
            <result column="id" jdbcType="INTEGER" property="id"/>
            <result column="username" jdbcType="VARCHAR" property="username"/>
            <result column="password" jdbcType="VARCHAR" property="password"/>
            <result column="address" jdbcType="VARCHAR" property="address"/>
            <result column="phone" jdbcType="VARCHAR" property="phone"/>
            <result column="nickname" jdbcType="VARCHAR" property="nickname"/>
            <result column="signature" jdbcType="VARCHAR" property="signature"/>
            <result column="usermark" jdbcType="VARCHAR" property="usermark"/>
            <result column="membernum" jdbcType="VARCHAR" property="membernum"/>
        </resultMap>
    
        <!--用于登录验证用户信息-->
        <select id="select" parameterType="map" resultType="int">
            select count(*) from users where username=#{username} and password=#{password}
        </select>
    </mapper>
    

    5.编写service层

    @Service
    public class CheckUserService {
    	//service层调用dao层服务
        @Autowired(required = false) //表示如果无法自动注入时不报错,默认为true,当无法注入时报错
        private CheckUser checkUser;
    
        public int select(String username,String password){
            Map map=new HashMap();
            map.put("username",username);
            map.put("password",password);
            int user1=checkUser.select(map);
            return user1;
        }
    
        public List<User> selectAll(){
            return checkUser.selectAll();
        }
    
        public int del(int id){
            return checkUser.del(id);
        }
    
        public int update(String username,String password,int id){
            Map map=new HashMap();
            map.put("username",username);
            map.put("password",password);
            map.put("id",id);
            return checkUser.update(map);
        }
    }
    

    6.编写controller 控制层

    @Controller
    public class TestController {
        //控制器调用service层服务层
        @Autowired
        private CheckUserService checkUserService;
        
        //项目启动跳到默认首页
        @RequestMapping(value = "/")
        public String pages(){
            System.out.println("进入项目默认首页");
            return "index/index";
        }
        //省略其他相关代码
    }
    

    7.启动类

    @SpringBootApplication
    @MapperScan(basePackages = "com.jason.test.dao") //扫描mapper接口包路径
    public class TestApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(TestApplication.class, args);
        }
    
    }
    

    通过以上7步,就完成了springboot中集成mybatis。

    springboot集成mybatis时遇到的一些问题

    1.当使用maven插件spring-boot:run 启动项目时会出现中文乱码。
    这个时候需要在pom.xml中<build>节点中加入

      <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <!--解决maven插件启动时中文乱码问题-->
                    <configuration>
                        <fork>true</fork>
                        <!-- spring-boot:run 中文乱码解决 -->
                        <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                    </configuration>
                </plugin>
     </plugins>
    

    2.启动项目时报如下错误

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.jason.test.dao.CheckUser.select ,说明mapper.xml文件没有被编译成class文件。

    这个时候需要在pom.xml中<build>节点中加入

      <!--解决xml文件无法编译成class的问题-->
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
            </resources>
    
  • 相关阅读:
    Flutter-路由
    写一个底部Tabs导航动态组件
    实例:Flutter布局01
    HTTP报文
    HTML文本的各种属性
    HTML必要简介和基础
    MySQL8.0.23安装超详细傻瓜式
    从一个HTTP请求来研究网络分层原理
    MySQL的增删改查
    MySQL常用数据类型有哪些?
  • 原文地址:https://www.cnblogs.com/jasonboren/p/12285945.html
Copyright © 2011-2022 走看看