Spring Boot(二)——MyBatis

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyhkmm/article/details/78270538

MyBatis介绍

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。具体可参考:Hibernate与Mybatis对比

无配置文件注解环境配置

1、这里使用的是无配置文件注解,使用注释不需要配置任何映射文件,添加相关依赖到pom.xml

<dependencies>
	<!--核心模块,包括自动配置支持、日志和YAM-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter</artifactId>
	</dependency>
	<!--测试模块,包括JUnit、Hamcrest、Mockito-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
	<!--支持web的模块-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!--支持mybatis和mysql的模块-->
	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<version>1.1.1</version>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<optional>true</optional>
	</dependency>
</dependencies>

2、数据库的相关配置,准备好mysql数据库的环境,将数据库的相关信息写的配置文件中

配置文件目录:src\main\resources\application.properties

mybatis.type-aliases-package=com.lyh.demo.entity
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 950321

3、创建实体类 UserEntity

实体类路径为:src\main\java\com\lyh\demo\entity\UserEntity.java

package com.lyh.demo.entity;

import java.io.Serializable;

public class UserEntity implements Serializable{
    private long id;
    private String userName;
    private String password;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "UserEntity{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

4、创建dao层Mapper类

路径为:src\main\java\com\lyh\demo\mapper\UserMapper.java
package com.lyh.demo.mapper;

import com.lyh.demo.entity.UserEntity;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {
    @Select("SELECT * FROM user")
    @Results({
            @Result(property = "userName", column = "userName")
    })
    List<UserEntity> getAll();
    @Insert("INSERT INTO user(id,userName,password) VALUES(#{id},#{userName},#{password})")
    void insert(UserEntity user);

    @Update("UPDATE user SET userName=#{userName} WHERE id =#{id}")
    void update(UserEntity user);

    @Delete("DELETE FROM user WHERE id =#{id}")
    void delete(Long id);
}

@Select 查询数据的注解。
@Result 修饰返回的结果集,关联实体类属性和数据库字段,如果实体类属性和数据库属性名保持一致,可以不需要。
@Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值。
@Update 修改数据,直接传入实体类会自动解析属性到对应的值。
@delete 删除数据。

5、创建控制层UserController类

路径为:src\main\java\com\lyh\demo\controller\UserController.java。这里就只写查询数据的方法,其它增删改的方法也是类似的写法,这里就不一一列出了。

package com.lyh.demo.controller;

import com.lyh.demo.mapper.UserMapper;
import com.lyh.demo.entity.UserEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
    @Autowired
    private UserMapper userMapper;
    @RequestMapping("/getUsers")
    public String getUsers(){
        List<UserEntity> users=userMapper.getAll();
        return users.toString();
    }
}

6、创建数据库表结构

sql语句如下:
CREATE TABLE `user` (
  `id` bigint(20) DEFAULT NULL,
  `userName` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL
) ;
INSERT INTO `user` VALUES ('1', '用户1', '123456');
INSERT INTO `user` VALUES ('2', '用户2', '123456');

项目结构如下图所示


  7、运行

运行DemoApplicatio后访问http://localhost:8080/getUsers,浏览器页面输出结果如下图:


使用配置文件搭建环境

1、pom.xml和上面一样,只是修改application.properties,添加以下配置,其中基础配置文件为mybatis-config.xml和实体类映射文件的地址*.xml,注意classpath的路径为:resource下
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml 
2、mybatis-config.xml如下:
<configuration>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>
3、userMapper.xml如下:
<mapper namespace="com.lyh.demo.mapper.UserMapper" >
    <resultMap id="ResultMap" type="com.lyh.demo.entity.UserEntity" >
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="userName" property="userName" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
    </resultMap>

    <sql id="List" >
        id, userName, password, user_sex, nick_name
    </sql>

    <select id="getAll" resultMap="ResultMap"  >
       SELECT 
       <include refid="List" />
       FROM users
    </select>
</mapper>

4、dao层的接口:

public interface UserMapper {

    List<UserEntity> getAll();

}

总结

无配置文件注释和配置文件这两种各有各的优点,注释适用于微服务,配置文件适用于更负责的传统应用,具体根据sql的复杂程度选择。

GitHub地址:https://github.com/lyhkmm/spring-boot-examples/tree/master/spring-boot-mybatis


猜你喜欢

转载自blog.csdn.net/lyhkmm/article/details/78270538