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>
原文地址:https://www.cnblogs.com/jasonboren/p/12285945.html