Springboot整合Mysql+Mybatis

Springboot整合Mysql+Mybatis


没有废话,直接开搞!

pom.xml依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 数据库连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

    </dependencies>

sql

启动前需要执行sql

CREATE TABLE `jin_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(64) DEFAULT NULL,
  `password` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `jin_user` (`id`,`user_name`,`password`,`name`) VALUES (1,'lamian','123456','拉面');

project structure(项目结构)

这里写图片描述

application.properties

配置SpringBoot启动配置信息

#项目启动端口
server.port=1215

#最基础的数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/jin?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#指定mybatis xml文件地址
mybatis.mapperLocations=classpath:com.jin.mapper/*.xml

Application.class

每个springboot都需要一个启动类.只需要在类上加上注解@SpringBootApplication
(该注解具体介绍http://blog.csdn.net/u013473691/article/details/52353923)
@MapperScan("com.jin.mapper")注解指定mapper接口扫描地址.目的是让容器能够从"com.jin.mapper"包下找到mapper接口.
/**
 * Created by lamian on 17/6/23.
 */
@SpringBootApplication
@MapperScan("com.jin.mapper")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

}

TestController.class(控制层)

这里简单的做了一个登陆的接口,用以调试springboot和mysql&mybatis的整合情况.
此外还有一个启动测试接口(测试web项目是否运行正常).
/**
 * Created by lamian on 17/6/23.
 */
@Controller
@RequestMapping("test")
public class TestController {

    @Autowired
    private TestService testService;

    /**
     * 启动测试接口
     * @return
     */
    @RequestMapping("/start")
    @ResponseBody
    public String startTest(){
        return "hello, world";
    }

    /**
     * mysql&mybatis整合测试接口
     * @return
     */
    @RequestMapping("/datasource")
    @ResponseBody
    public String datasourceTest(@RequestParam(value = "user_name") String userName, 
                                 @RequestParam(value = "password") String password){
        Map<String, String> mapUser = new HashMap<String, String>();
        mapUser.put("userName", userName);
        mapUser.put("password", password);
        User testUser;
        try{
            testUser = testService.findUser(mapUser);
        }catch (Exception e){
            e.printStackTrace();
            return "系统错误";
        }
        if(null != testUser){
           return "welcome " + testUser.getName();
        }
        return "账号密码错误";
    }

}

TestService.class(服务层)

一个简单的service层,直接调mapper接口
/**
 * Created by lamian on 17/6/26.
 */
@Service
public class TestService {

    @Autowired
    private TestMapper testMapper;

    public User findUser(Map<String, String> userMap){
        if(null == userMap){
            return null;
        }
        User testUser = testMapper.findUser(userMap).get(0);
        return testUser;
    }

}

TestMapper.interface(mapper接口)

简单的mapper接口
方法名要跟xml中被调用的sql,id相同.如select标签的id属性findUser.
/**
 * Created by lamian on 17/6/26.
 */
public interface TestMapper {

    List<User> findUser(Map<String, String> userMap);

}

TestMapper.xml(真正需要写sql的地方)

重要的事情说三遍,仔细仔细一定要仔细。在编写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.jin.mapper.TestMapper">
    <resultMap id="BaseResult" type="com.jin.entity.User">
        <id column="id" property="id"/>
        <id column="user_name" property="userName"/>
        <id column="password" property="password"/>
        <id column="name" property="name"/>
    </resultMap>

    <sql id="Base_Column_List">
      id,  user_name, password, name
    </sql>

    <select id="findUser" resultMap="BaseResult" parameterType="java.util.Map">
        SELECT
        <include refid="Base_Column_List"/>
        from jin_user
        <where>
          <if test="userName != null">
              AND user_name = #{userName}
          </if>
          <if test="password != null">
              AND password = #{password}
          </if>
        </where>
    </select>

</mapper>

打工告成!启动测试啦

启动完成Application后,在浏览器中输入
http://localhost:1215/test/datasource?user_name=lamian&password=123456
啪啪啪!当你看到下面的响应时,证明你整合mysql、mybatis成功!

这里写图片描述

错误及解决方案

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException
这是最常见的xml编写错误提示,看到这个一定是你xml文件出错了(大部分是拼写错误!)

· resultMap标签下column参数和property参数都对了吗
· parameterType参数和parameterMap参数使用正确了吗(不知道就换一下试试=-=)
· mapper标签namespace属性是否是相对应的mapper接口
· 还不行?敲个空格在启一遍试试吧

其它错误:
· Application启动类上面是否添加@MapperScan("你放mapper接口的包名(例如com.jin.mapper)")注解(用于扫描mapper所在接口)
· 配置文件mybatis.mapperLocations=xml文件所在包名(例如classpath:com.jin.mapper/*.xml)

百度谷歌是解决错误的最佳选择.
大多数错误都是因为粗心所引起的.仔细检查终会发现错误.

猜你喜欢

转载自blog.csdn.net/Achard/article/details/56282101