一、MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java s,普通的 Java对象)映射成数据库中的记录。相信很多人在使用mybatis的时候都有自己的感受吧,mybatis的框架使用很好的提高了我们自身的开发效率,和sql编写能力。为了简化编写和配置过程,这里我介绍spring-boot和mybatis的二种整合方式。

二、我这里为了简化项目,将两种方式写在一起的,下面我会单独介绍相关的配置。首先需要的jar包(pom. )

<?  version="1.0" encoding="UTF-8"?><project  ns="http://maven.apache.org/POM/4.0.0"          ns:xsi="http://www.w3.org/2001/ Schema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.troy</groupId>    <artifactId>springboot_mybatis</artifactId>    <version>1.0-SNAPSHOT</version>    <parent>        <groupId>org.spring work.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.6.RELEASE</version>    </parent>    <dependencies>        <dependency>            <groupId>org.spring work.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>            <version>1.5.6.RELEASE</version>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>1.3.0</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.9</version>        </dependency>    </dependencies></project>

三、目录结构

四、application.yml配置

server:  port: 8080spring:  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://localhost:3306/model?useUnicode=true&amp;characterEncoding=utf8    username: root    password: rootmybatis:  mapper-locations: classpath:/mapper/*

五、第一种方式:采用@mapper的注解方式来实现数据库的访问

1、controller层

@RestController@RequestMapping(value = "/api/login")public class UserController {    @Autowired    private UserService userService;    @RequestMapping(value = "/init")    public String init() {        return "hello world";    }    @RequestMapping(value = "/findAll")    public List<Map<String, >> findAll() {        List<Map<String, >> list = userService.findAllMapper();        return list;    }    @RequestMapping(value = "/findById")    public Map<String, > findById() {        Long id = 1L;        Map<String, > map = userService.findByIdMapper(id);        return map;    }}

2、service层

1)接口

public interface UserService {    public List<Map<String, >> findAllMapper();    public Map<String, > findByIdMapper(Long id);}

2)实现类

@Service@Transactionalpublic class UserServiceImpl implements UserService {    @Autowired    private UserMapper userMapper;    @Override    public List<Map<String,  >> findAllMapper() {        return userMapper.findAll();    }    @Override    public Map<String,  > findByIdMapper(Long id) {        return userMapper.findById(id);    }}

3、mapper层

@Mapper@Repositorypublic interface UserMapper {    @Select(value = "select * from user")    public List<Map<String, >> findAll();    @Select(value = "select * from user where id=#{id}")    public Map<String, > findById(Long id);}

六、第二种方式:采用 配置文件的方式

1、controller层

@RestController@RequestMapping(value = "/api/login")public class UserController {    @Autowired    private UserService userService;    @RequestMapping(value = "/init")    public String init() {        return "hello world";    }    @RequestMapping(value = "/findAll")    public List<Map<String, >> findAll() {        return userService.findAll();    }    @RequestMapping(value = "/findById")    public Map<String, > findById() {        Long id = 1L;        return userService.findById(id);    }}

2、service层

1)接口

public interface UserService {    public List<Map<String, >> findAll();    public Map<String, > findById(Long id);}

2)实现类

@Service@Transactionalpublic class UserServiceImpl implements UserService {    @Autowired    private UserDao userDao;    @Override    public List<Map<String, >> findAll(){        return userDao.findAll();    }    @Override    public Map<String,  > findById(Long id) {        return userDao.findById(id);    }}

3、dao层

1)接口

@Repositorypublic interface UserDao {    public List<Map<String, >> findAll();    public Map<String, > findById(Long id);}

2)实现类

@Repositorypublic class UserDaoImpl implements UserDao{    @Autowired    private SqlSessionTemplate sqlSession;    @Override    public List<Map<String,  >> findAll() {        return sqlSession.selectList("user.findAll");    }    @Override    public Map<String,  > findById(Long id) {        Map<String, > map = new HashMap<String, >();        map.put("id",id);        return sqlSession.selectOne("user.findById",map);    }}

4、userMapper. 配置文件

<?  version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"        "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"><mapper namespace="user">    <select id="findAll" resultType="java.util.Map">        select * from user    </select>    <select id="findById" parameterType="java.util.Map" resultType="java.util.Map">        select * from user where id=#{id}    </select></mapper>

5、application.yml里面配置

mybatis:  mapper-locations: classpath:/mapper/*

七、总结:总体来说两种使用方式都是很不错的,注解的方式在使用上面很方便,也方便管理。 配置文件的方式在使用上面更灵活,针对于sql量比较大的方式处理比较合理。在会涉及逻辑判断的时候, 的方式使用就会体现的更加灵活。

 

收藏 打印